您的位置:

cross_val_score参数详解

一、交叉验证

机器学习是一个经验性的学科,我们需要用数据去检验算法的效果。而在实际应用中,我们通常无法知道真实的预测误差,所以我们需要从样本集中分离出一部分数据作为测试集,用来估计算法的预测效果。但是测试集只有一份,如果只对算法进行一次测试,评估结果可能会与真实值产生偏差。为了避免这种情况,我们可以使用交叉验证的方法,将样本集分成若干个子集,轮流使用每个子集作为测试集,其他子集作为训练集,计算多个评估结果的平均值。

二、cross_val_score函数

Scikit-learn提供了cross_val_score函数来实现交叉验证。该函数的主要参数包括估计器、特征矩阵、标签集合、分割器、评估指标等。其中分割器和评估指标可以设置多种取值,本文将详细介绍。

三、分割器参数

分割器参数是用来将样本集分成若干个子集的。Scikit-learn提供了多种分割器:

KFold(n_splits=’warn’, shuffle=False, random_state=None)
StratifiedKFold(n_splits=’warn’, shuffle=False, random_state=None)
GroupKFold(n_splits=’warn’)
LeaveOneOut()
LeavePOut(p=1)
LeaveOneGroupOut()
LeavePGroupsOut(n_groups=2)
ShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=None)
GroupShuffleSplit(n_splits=’warn’)
StratifiedShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=None)
PredefinedSplit(test_fold)

其中,KFold和StratifiedKFold是最常用的分割器。KFold将样本集平均分成K份,轮流使用每份数据作为测试集,其他数据作为训练集,返回K个预测分数。StratifiedKFold和KFold类似,但它会根据标签分配样本,保证每个测试集中正样本和负样本的比例相同。

四、评价指标参数

评价指标参数用来衡量估计器预测效果的标准。Scikit-learn提供了多种评价指标:

accuracy
r2
neg_mean_squared_error
neg_mean_absolute_error
explained_variance
mean_absolute_error
mean_squared_error
median_absolute_error

其中,accuracy是分类模型的评价指标,用于衡量正确分类的样本数占总样本数的比例;r2是回归模型的评价指标,用于衡量模型对观察数据的方差进行了多少解释;neg_mean_squared_error和neg_mean_absolute_error是回归模型的评价指标,用于衡量模型预测结果的均方误差和平均绝对误差;explained_variance是回归模型的评价指标,用于衡量模型预测结果与真实结果的方差之比;mean_absolute_error、mean_squared_error和median_absolute_error是回归模型的评价指标,用于衡量模型预测结果与真实结果的误差。

五、示例代码

下面是一个使用cross_val_score函数的示例代码:

from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

iris = load_iris()
X, y = iris.data, iris.target
dt = DecisionTreeClassifier()
scores = cross_val_score(dt, X, y, cv=5, scoring='accuracy')
print('Accuracy: %0.2f (+/- %0.2f)' % (scores.mean(), scores.std() * 2))

本示例将使用决策树分类器对鸢尾花数据集进行分类,采用5折交叉验证并使用accuracy指标评价模型。其中,cv参数为分割器参数,指定使用5折交叉验证;scoring参数为评价指标参数,指定使用accuracy指标评价预测效果。