機器學習 KFold交叉驗證

2021-10-03 02:15:59 字數 3543 閱讀 7298

section i: brief introduction on stratifiedkfold

from

sebastian raschka, vahid mirjalili. python機器學習第二版. 南京:東南大學出版社,2018.

section ii: code and analyses

**

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import standardscaler

from sklearn.decomposition import pca

from sklearn.linear_model import logisticregression

from sklearn.pipeline import make_pipeline

import numpy as np

from sklearn.model_selection import stratifiedkfold

import warnings

warnings.filterwarnings(

"ignore"

)#section 1: load breast data, i.e., benign and malignant

breast=datasets.load_breast_cancer(

)x=breast.data

y=breast.target

x_train,x_test,y_train,y_test=\

train_test_split(x,y,test_size=

0.2,stratify=y,random_state=1)

#section 2: define pipeline model

pipe_lr=make_pipeline(standardscaler(),

pca(n_components=2)

, logisticregression(random_state=1)

)#section 3: define stratifiedkfold model

print

("original class dist: %s\n"

% np.bincount(y)

)kfold=stratifiedkfold(n_splits=

10,random_state=1)

.split(x_train,y_train)

scores=

for k,

(train_idx,test_idx)

inenumerate

(kfold)

: pipe_lr.fit(x_train[train_idx]

,y_train[train_idx]

) score=pipe_lr.score(x_train[test_idx]

,y_train[test_idx]

)print

("fold: %2d, class dist: %s, acc: %.3f"

%(k+

1,np.bincount(y_train[train_idx]

),score)

)print

('cv accuracy: %.3f +/- %.3f'

%(np.mean(scores)

,np.std(scores)))

#section 4: the easier manner when cross_val_score used

from sklearn.model_selection import cross_val_score

scores=cross_val_score(estimator=pipe_lr,

x=x_train,

y=y_train,

cv=10,

n_jobs=1)

print

("\ncv accuracy scores: %s"

% scores)

print

("cv accuracy: %.3f +/- %.3f"

%(np.mean(scores)

,np.std(np.std(scores)))

)

結果

original class dist:[

212357

]fold:

1, class dist:[

153256

], acc:

0.978

fold:

2, class dist:[

153256

], acc:

0.935

fold:

3, class dist:[

153256

], acc:

0.957

fold:

4, class dist:[

153256

], acc:

0.935

fold:

5, class dist:[

153256

], acc:

0.913

fold:

6, class dist:[

153257

], acc:

0.956

fold:

7, class dist:[

153257

], acc:

0.933

fold:

8, class dist:[

153257

], acc:

0.956

fold:

9, class dist:[

153257

], acc:

0.933

fold:

10, class dist:[

153257

], acc:

0.956

cv accuracy:

0.945+/

-0.018

cv accuracy scores:

[0.97826087

0.93478261

0.95652174

0.93478261

0.91304348

0.95555556

0.93333333

0.95555556

0.93333333

0.95555556

]cv accuracy:

0.945+/

-0.000

對比上述結果可知兩點,其一,stratifiedkfold顯然是根據照類別分布,按照比例取樣形成訓練集和測試集;其二,cross_val_score劃分資料結果同stratifiedkfold取樣結果是一致的。

Sklearn中交叉驗證 KFold

在機器學習建模過程中,將資料分為訓練集和測試集。測試集合訓練集是完全分開的兩個資料集,完全不參與訓練,只是用於模型最終確定後,來測試模型的效果。而訓練集又要分出一部分資料用來驗證模型的訓練效果,即驗證集。驗證集在每次訓練集訓練結束後,對模型的效果進行初步地測試。之所以要設定驗證集,是因為訓練資料會有...

機器學習 交叉驗證

假設我們需要從某些候選模型中選擇最適合某個學習問題的模型,我們該如何選擇?以多元回歸模型為例 我們假設模型集合為有限集 假設樣本集為s,根據經驗風險最小化原則 erm 可能會使用這樣的演算法 1.在s上訓練每個模型 2.選擇訓練誤差最小的假設函式,即為我們需要的函式。然而,這樣的演算法實際上並不有效...

機器學習 交叉驗證

交叉驗證是最好的測試方法 乙個問題叫做交叉驗證,是指假設要將乙份資料拆分成訓練集和測試集,這個時候怎麼評估出它的誤差?交叉驗證是把集合拆成五份,取四份做訓練集 乙份做測試集,並且每次選擇不同的那乙份做測試級,最後測出五個結果再做平均,這被認為是最好的測試方法。交叉驗證確實是乙個還不錯的驗證的方法,但...