sklearn.model_selection.cross_val_score(estimator,X,y=None,*,groups=None,scoring=None,cv=None,n_jobs=None,verbose=0,fit_params=None,pre_dispatch='2*n_jobs',error_score=nan)
前面我們提到了4種分割數據集的方法,在分割完數據集后,我們訓練模型,那模型的表現到底如何呢?我們可以使用這個函數來看模型的評分。estimator:estimator object implementing ‘fit’
我們的算法模型X:array-like of shape (n_samples, n_features)
y:array-like of shape (n_samples,) or (n_samples, n_outputs), default=None
我們的數據集cv:int, cross-validation generator or an iterable, default=None
我們要進行的交叉驗證的方法
幾個常用的參數如上所示,下面,我們舉幾個小栗子。
KFold
關于KFold參考:橘貓吃不胖:sklearn函數:KFold(分割訓練集和測試集)?zhuanlan.zhihu.com
對于K折交叉驗證, K的取值,通常為3、5、10
import pandas as pd
import numpy as np
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
df = pd.read_csv('data/pima-indians-diabetes.csv' , names=names)
df.head(10)
X = df.values[:,:8]
y = df.values[:,8]
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
kfold = KFold(n_splits=10)
model = LogisticRegression()
result = cross_val_score(model , X , y , cv=kfold)
最后的result,就是我們每一次模型的得分(準確率)
這里,我們調用KFold,設置K=10,也就是會分割為10分子集,然后去遍歷調用模型
這里,我們使用的是邏輯回歸模型
2. LeaveOneOut
關于LeaveOneOut,參考:橘貓吃不胖:sklearn函數:LeaveOneOut(分割訓練集和測試集)?zhuanlan.zhihu.com
同樣使用上面的數據集
from sklearn.model_selection import LeaveOneOut
loocv = LeaveOneOut()
model = LogisticRegression(max_iter=1000)
result = cross_val_score(model , X , y , cv=loocv)
result
result.mean()
這個跑起來的確很慢,一開始結果都是0,1我還以為錯了,啥情況,一想,因為留一法,就是遍歷N次,每次的結果要么是對的,要么就是不對的,所以,可以看個平均的得分