我目前正在尝试在python中使用sklearn在分类中实现K-FOLD交叉验证。我了解K-FOLD和交叉验证背后的基本概念。但是,我不知道cross_val_score是什么,它做什么,以及CV迭代在获取分数数组中起什么作用。以下是sklearn的官方文档页面中的示例。
**Example 1**
from sklearn import datasets, linear_model
from sklearn.model_selection import cross_val_score
diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]
lasso = linear_model.Lasso()
print(cross_val_score(lasso, X, y, cv=3))
***OUPUT***
[0.33150734 0.08022311 0.03531764]
看看示例1 ,输出将在数组中生成3个值。我知道当我们使用kfold时,n_split是生成折叠数的命令。那么,cv在此示例中做什么?
**My Code**
kf = KFold(n_splits=4,random_state=seed,shuffle=False)
print('Get_n_splits',kf.get_n_splits(X),'\n\n')
for train_index, test_index in kf.split(X):
print('TRAIN:', train_index, 'TEST:', test_index)
x_train, x_test = df.iloc[train_index], df.iloc[test_index]
y_train, y_test = df.iloc[train_index], df.iloc[test_index]
print('\n\n')
# use train_test_split to split into training and testing data
x_train, x_test, y_train, y_test = cross_validation.train_test_split(X, y,test_size=0.25,random_state=0)
# fit / train the model using the training data
clf = BernoulliNB()
model = clf.fit(x_train, y_train)
y_predicted = clf.predict(x_test)
scores = cross_val_score(model, df, y, cv=4)
print('\n\n')
print('Bernoulli Naive Bayes Classification Cross-validated Scores:', scores)
print('\n\n')
查看我的代码,我对Bernoulli Naive Bayes分类器使用4倍交叉验证,并且在得分中使用cv = 4,如下所示: 分数= cross_val_score(model,df,y,cv = 4) 上一行给了我4个值的数组。但是,如果我将其更改为cv = 8,如下所示: 分数= cross_val_score(model,df,y,cv = 8) 然后将生成8个值的数组作为输出。再说一次,简历在这里做什么。
我确实一遍又一遍地阅读了文档,并搜索了许多网站,但是由于我是新手,所以我真的不明白cv是做什么的以及如何产生分数。
我们将不胜感激。
预先感谢
答案 0 :(得分:0)
在K-FOLD交叉验证中,遵循以下步骤:
此过程重复K次,并在每个步骤中计算诸如“ ACCURACY” 之类的性能指标。
请看下面的图片以获得清晰的图片。它来自Scikit-Learn的交叉验证模块。
>>> from sklearn.model_selection import cross_val_score
>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_val_score(clf, iris.data, iris.target, cv=5)
>>> scores
array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])
>>> print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
Accuracy: 0.98 (+/- 0.03)
在此计算单个平均得分。 默认情况下,每次CV迭代计算的分数都是估算器的分数方法。
我从下面提到的链接中寻求帮助。