sklearn模型评选择与评估
sklearn模型評選擇與評估
1. 數(shù)據(jù)集劃分
1.1 K折交叉驗證
1.1.1 K折交叉驗證算法原理
a. 將全部訓(xùn)練及S分成K個不相交的子集,假設(shè)S中樣本個數(shù)為M,那么,每一個子集的訓(xùn)練樣本個數(shù)為M/K相應(yīng)的子集稱做{S1,S2,...,SK}\{S_{1},S_{2},...,S_{K}\}{S1?,S2?,...,SK?}
b. 每次從分好的訓(xùn)練只集中拿出一個測試集。其他K-1一個作為訓(xùn)練集。
c. 在K-1一個訓(xùn)練集上訓(xùn)練出學(xué)習(xí)器模型,把這個模型放到測試集上,得到分類率.
d. 計算K求得分類率的平均值。作為該模型的真實分類率。
1.1.2 StratifiedKFold劃分后,訓(xùn)練集、測試集的比例與原始數(shù)據(jù)集一致。
1.1.3優(yōu)缺點
優(yōu)點:充分利用了所有樣本
缺點:計算繁瑣。計算K次,測試K次
1.1.4代碼
返回的是每一折的索引
def KFold_practice():x = np.arange(12)X = x.reshape(6, 2)y = np.arange(15, 21)kf = model_selection.KFold(n_splits=3) # 定義一個K折分割器 還有參數(shù)shuffle,random_state'KFold.split(x)返回的是索引,訓(xùn)練樣本和測試樣本是什么要將索引帶到數(shù)據(jù)集中去'for train_index, test_index in kf.split(X):print("TRAIN Index:", train_index,"TEST Index:", test_index)X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]print("TRAIN Subset:\n", X_train)print("TEST Subset:\n", X_test) KFold_practice() TRAIN Index: [2 3 4 5] TEST Index: [0 1] TRAIN Subset:[[ 4 5][ 6 7][ 8 9][10 11]] TEST Subset:[[0 1][2 3]] TRAIN Index: [0 1 4 5] TEST Index: [2 3] TRAIN Subset:[[ 0 1][ 2 3][ 8 9][10 11]] TEST Subset:[[4 5][6 7]] TRAIN Index: [0 1 2 3] TEST Index: [4 5] TRAIN Subset:[[0 1][2 3][4 5][6 7]] TEST Subset:[[ 8 9]]1.2 留一法(LOO)
1.2.1 留一法
假設(shè)在N個樣本中,將每一個樣本作為測試集,剩下的N-1個作為作為訓(xùn)練樣本,這樣得到N個分類器、N個測試結(jié)果,N個結(jié)果平均來衡量模型的性能。
LOO與KFold相比,當(dāng)K<<N時,LOO比KFold更耗時。
1.2.2 留P法
假設(shè)在N個樣本中,將P個樣本作為測試集,剩下的N-P個作為作為訓(xùn)練樣本,這樣得到CnPC_{n}^{P}CnP?個訓(xùn)練-測試集對(train-test pairs),當(dāng)P>1是,測試集將發(fā)生重疊。當(dāng)P=1時,變成了留一法。
1.2.3 代碼
與Kfold類似,劃分后返回的也是索引
1.3 隨機劃分法
產(chǎn)生指定數(shù)量的訓(xùn)練/測試數(shù)據(jù)集劃分。指定訓(xùn)練集和測試集的比例或者數(shù)量。
首先對樣本隨機打亂,然后劃分train/test對。
可以通過random_state控制隨機序列發(fā)生器,使得運算結(jié)果可重現(xiàn)。
StratifiedShuffleSplit是ShuffleSplit的變體,返回分層劃分。劃分后每一個類的比例與原始數(shù)據(jù)集比例一致。
2. 超參數(shù)優(yōu)化方法
2.1 網(wǎng)格搜索窮舉式超參數(shù)優(yōu)化方法
GridSearchCV(eatimator,param_grid=param_grid)
參數(shù)
eatimator:分類器
param_grid:參數(shù)網(wǎng)格
參數(shù)網(wǎng)格如下。一共有2*2*9*10=360種組合方式。GridSearchCV在每種參數(shù)組合下計算在N折交叉驗證的每一折中計算訓(xùn)練集和測試集上的得分。
clf.cv_results_是一個字典類型的數(shù)據(jù),結(jié)果如下。rank_test_score對應(yīng)的是某中參數(shù)組合下,模型在測試集中結(jié)果的排名。
2.2 隨機采樣式超參數(shù)優(yōu)化方法
RandomizedSearchCV(eatimator, param_distributions=param_distribution, n_iter=10,cv=3)
參數(shù)
eatimator:分類器
param_distributions:參數(shù)分布。參數(shù)值按參數(shù)分布選取
n_iter:迭代次數(shù),選多少組參數(shù)組合
3. 模型驗證方法
3.1 通過交叉驗證計算得分
model_selection.cross_val_score(eatimator,X,y,cv=cv,n_jobs=4)
參數(shù)
eatimator:實現(xiàn)fit()的學(xué)習(xí)器
X:array_like,需要學(xué)習(xí)的數(shù)據(jù),可以是列表或2d數(shù)組
y:array_like,可選的。監(jiān)督學(xué)習(xí)中樣本的真實目標(biāo)值
scoring:string,callable or None,可選的,默認(rèn)是None
???None - 調(diào)用eatimator的score函數(shù)
???string Or callable需實現(xiàn)scorer(estimator,X,y)
cv: int,交叉驗證生成器對象或者一個迭代器,可選的,默認(rèn)None
???決定交叉驗證劃分策略,cv的可選項:
a. None:使用默認(rèn)的3折交叉驗證
b.interger:K折StratifiedKfold的K
c.交叉驗證生成器對象
d.一個能產(chǎn)生train/test劃分的迭代器對象。
返回值
scores:浮點數(shù)組,shape=len(list(cv)) 在測試集上的得分
每一次交叉驗證的得分形成一個數(shù)組(默認(rèn)是3折交叉驗證,生成3個數(shù)組)
3.2 對每個輸入數(shù)據(jù)點產(chǎn)生交叉驗證估計
model_selection .cross_val_predict(estimator,X,y=None,cv=None,n_jobs=1,method='predict')
參數(shù)
- method:string,optional,default:predict. Invokes the passed method of the passed estimator.
默認(rèn)使用傳入模型的預(yù)測方法。
3.3 計算并繪制模型的學(xué)習(xí)率曲線
learning_curve(estimator, X, y, groups=None, train_sizes=np.linspace(0.1, 1.0, 5), cv='warn', scoring=None, exploit_incremental_learning=False, n_jobs=None, pre_dispatch="all", verbose=0, shuffle=False, random_state=None, error_score='raise-deprecating')
計算指定學(xué)習(xí)器在不同大小的訓(xùn)練集上經(jīng)過交叉驗證的訓(xùn)練得分和測試得分。
算法過程
首先用一個交叉驗證生成器將整體數(shù)據(jù)集劃分成K折,每一折劃分成訓(xùn)練集和測試集。從每一折的訓(xùn)練集中取出一定比例(比如0.1)作為訓(xùn)練集,然后不斷增加子集的比例,在這些自己上訓(xùn)練模型。然后計算在對應(yīng)自己下的模型在整體訓(xùn)練集和測試集上的得分。
參數(shù)
- train_sizes :array_like,shape(n_tricks,),dtype:float or int.
用于指定訓(xùn)練樣本子集的相對數(shù)量或者絕對數(shù)量。
如果是浮點數(shù),則是訓(xùn)練集中樣本數(shù)量的百分比,(0,1]之間。
如果是整型數(shù),則指的是訓(xùn)練子集的樣本數(shù)量,這個數(shù)量不能超過訓(xùn)練樣本總體數(shù)量。默認(rèn)值np.linspace(0.1,1.0,5)
返回值
- train_sizes_abs:array,shape=(n_unique_tricks,),dtype:int。返回train_sizes去掉重復(fù)值后的結(jié)果。
- train_scores:array,shape=(n_unique_tricks,n_cv_folds),scores on training sets.
- test_scores:array,shape=(n_unique_tricks,n_cv_folds),scores on testsets.
3.4 計算并繪制模型的驗證曲線
model_selection.validation_curve(estimator, X, y, param_name, param_range, groups=None, cv='warn', scoring=None, n_jobs=None, pre_dispatch="all", verbose=0, error_score='raise-deprecating')
當(dāng)某個參數(shù)變化時,在該參數(shù)每一個取值下計算出模型在訓(xùn)練集和測試集上的得分。(與GridSearchCV類似,但是只可以計算在測試集上的得分,且只能有一個參數(shù))
參數(shù)
- param_name:string,參數(shù)名
- param_range:array_like,shape(n_values,),參數(shù)的取值范圍
返回值 - train_scoresarray_like,shape(n_trick,n_cv_folds),在訓(xùn)練集上的得分。
- test_scoresarray_like,shape(n_trick,n_cv_folds),在測試集上的得分。
總結(jié)
以上是生活随笔為你收集整理的sklearn模型评选择与评估的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn数据集操作API
- 下一篇: sklearn模型预测性能评估(二)