关于k折交叉验证,以下对k的说法正确的是,下列关于k折交叉验证说法
python中的Sklearnk反向交叉检查
上映日期:2018-06-10 11:09,
浏览次数:492次
,标签:
大蟒
sklearnk
1.模型验证审查
模型验证的一个重要目的是选择最佳模型。在监督学习的基础上,要求模型对未知数据有很强的泛化能力。因此,要表达不同模型对未知数据的影响,就需要模型验证的过程。
首先,为了衡量模型的性能,我们使用训练精度(所有数据)进行训练和测试。这种方法会过度拟合模型。为了解决这个问题,我们将所有的数据分为训练集和测试集。训练集用于训练模型,测试集用于衡量模型的预测表达能力。这种测量方法称为测试精度,可以有效避免过拟合。
由于测试精度的一个缺点是样本精度高的方差估计,所以样本精度取决于不同的测试集,其效果是不同的。
交叉验证过程
*选择k的值(通常为10)并将数据集分成k等份。
*中小学的数据一部分会作为训练数据,另一部分作为模型训练的测试数据。
*使用测量值来衡量模型的预测性能。
交叉检查的优点
交叉检查通过减少一个数据分区中模型的性能差异来确保模型性能的稳定性。
*交叉验证可用于选择调整参数、比较模型性能差异和选择功能。
交叉验证的缺点
*交叉验证需要成本计算。计算过程很慢,尤其是数据集很大的时候。
高方差估计的例子
使用iris数据,测试精度表明模型性能的方差非常高。
froms kle arn . model _ selection importtrain _ test _ splitfromskneel . datasets
导入load _ irisfromskneel . neighborsportkneighborsclassifier from
sklearnimportmetricsdata=load _ iris(train=data . data test=data . target
foriinrange (1,5 ) :print ) random_stateis),I,)准确度得分为: )
train_x,test_x,train_y,test_y=train_test_split(训练,测试,随机状态=i))。
KNN=kneighborsclassifier(5)KNN . fit(train _ y,train _ y)))))))kneighborsclassifier(5))
y_pred=KNN . predict(test _ x)print)metrics . accuracy _ score(test _ y,y _ pred))
结果:
random_state为1,且andaccuracyscoreis为:1.0 random _ state为2,且
accuracy score is:1.0 random _ state为3,accuracy score为:
random _ state是4,而andaccuracyscoreis是10526315 . 53663663667
从上面的测试精度可以看出,不同的训练集和测试集划分方法具有不同的精度,而交叉验证的基本思想是将数据集划分为一个序列,建立不同的训练测试集,分别用训练模型计算测试精度,最后取结果的平均值。这样可以有效减少测试精度的差异。
2.转向交叉验证
*将数据集平均分成k块。
用一个数据作为测试数据,其余的作为训练数据。
*测试精度计算
*使用不同的测试集,重复步骤2和3。
作为对未知数据的预测精度的估计,精度是平均的。
3.使用交叉验证的建议
* K=10是一般建议。
*对于分类问题,应采用分层抽样的方法生成数据,以保证训练集和测试集中正负案例的比例相同。
4.交叉验证的例子
4.1参数调整
交叉验证法帮助我们调整参数,最终得到一组最优的模型参数。在下面的例子中,使用虹膜数据和KNN模型,通过调整参数来优化测试数据的准确性和泛化能力,从而获得一组最优参数。
froms klearn . datasetsimportload _ irisfromsknown . neighbors导入
kneighborsclassifier # import warnings # warnings . filter warnings(忽略) )来自
sklearn.model_selection导入cross_val_score数据=load_iris() train=
data . data test=data . target KNN=KNeighborsClassifier(5)scores=
cross_val_score(knn,train,test,cv=10,scoring= accuracy )print(scores)[1。
0.93333333 1.1.0.86666667 0.93333333 0.93333333 1.1.1.]
这个是每一次的的准确率,下面我们进行把这些准确率进行平均
print(scores.mean()) [1 .0.93333333 1.1.0.86666667 0.93333333 0.93333333 1.
1.1.] 0.9666666666666668
在上面的代码中,我们使用的是k=5这个值,但不一定是左右的,所以我们可以来进行选择,找到一个最优的k
从sklearn.datasets导入从sklearn.neighbors导入负载_虹膜
KNeighborsClassifier #导入警告#警告。过滤来自的警告(“忽略”)
sklearn.model_selection导入交叉值分数数据=load_iris() train=
数据。数据测试=数据。范围(1,30)内I的目标:knn=
邻居分类器(I)分数=
cross_val_score(knn,train,test,cv=10,scoring= accuracy )打印(分数。均值())
结果:
0.96 0.9533333333333334 0.9666666666666666 0.9666666666666666
0.9666666666666668 0.9666666666666668 0.9666666666666668 0.9666666666666668
0.9733333333333334 0.9666666666666668 0.9666666666666668 0.9733333333333334
0.9800000000000001 0.9733333333333334 0.9733333333333334 0.9733333333333334
0.9733333333333334 0.9800000000000001 0.9733333333333334 0.9800000000000001
0.9666666666666666 0.9666666666666666 0.9733333333333334 0.96
0.9666666666666666 0.96 0.9666666666666666 0.9533333333333334 0.9533333333333334
4.2用于模型的选择
交叉验证也可以帮助我们进行模型选择,以下是一组例子,分别使用虹膜数据,KNN和符号逻辑的回归模型进行模型的比较和选择。
当幸福的银耳汤这里只是选择两个举个例子
KNN=KNeighborsClassifier(n _ neighbors=5)print(cross _ val _ score(KNN,火车
测试,cv=10,评分=准确率)。mean()) lr=LogisticRegression()
print(cross_val_score(lr,train,test,cv=10,scoring=accuracy ).均值())
0.9666666666666668 0.9533333333333334