pythonkfold交叉验证_KFold交叉验证
KFold模块
del_lection import KFold
为什么要使⽤交叉验证?交叉验证的介绍
交叉验证是在机器学习建⽴模型和验证模型参数时常⽤的办法。 交叉验证,顾名思义,就是重复的使⽤数据,把得到的样本数据进⾏切分,组合为不同的训练集和测试集,⽤训练集来训练模型,⽤测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。
那么什么时候才需要交叉验证呢?交叉验证⽤在数据不是很充⾜的时候。它的基本想法就是重复地使⽤数据:把给定的数据进⾏切分,将切分的数据集组合为训练集和测试集,在此基础上反复地进⾏训练、测试以及模型选择。 ⽐如在我⽇常项⽬⾥⾯,对于普通适中问题,如果数据样本量⼩于⼀万条,我们就会采⽤交叉验证来训练优化选择模型。如果样本⼤于⼀万条的话,我们⼀般随机的把数据分成三份,⼀份为训练集(Training Set),⼀份为验证集(Validation Set),最后⼀份为测试集(Test Set)。⽤训练集来训练模型,⽤验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再⽤于测试集,最终决定使⽤哪个模型以及对应参数。
交叉验证的⽬的是为了能有效地估计模型的泛化能⼒ (测试误差),从⽽进⾏模型选择。 评估模型,然后通过的出来的准确率,我们再进⾏模型选择。
K折交叉验证原理
这便是交叉验证的过程:
1、⾸先随机地将数据集切分为 k 个互不相交的⼤⼩相同的⼦集;
2、然后将 k-1 个⼦集当成训练集训练模型,剩下的 (held out) ⼀个⼦集当测试集测试模型;
3、将上⼀步对可能的 k 种选择重复进⾏ (每次挑⼀个不同的⼦集做测试集);夸女生的话
4、在每个训练集上训练后得到⼀个模型,⽤这个模型在相应的测试集上测试,计算并保存模型的评估指标,
5、这样就训练了 k 个模型,每个模型都在相应的测试集上计算测试误差,得到了 k 个测试误差。
对这 k 次的测试误差取平均便得到⼀个交叉验证误差,并作为当前 k 折交叉验证下模型的性能指标。
莲花折纸在模型选择时,假设模型有许多可以调整的参数可供调参,⼀组可以调整的参数便确定⼀个模型,计
算其交叉验证误差,最后选择使得交叉验证误差最⼩的那⼀组的调整参数。这便是模型选择过程。
简⽽⾔之,就是我们通过交叉验证验证不同的模型,或者不同的参数组合,最终我们选择准确度⾼的作为我们的模型。生物多样性
k ⼀般⼤于等于2,实际操作时⼀般从3开始取,只有在原始数据集样本数量⼩的时候才会尝试取2。
k折交叉验证可以有效的避免过拟合以及⽋拟合状态的发⽣,最后得到的结果也⽐较具有说服性。
k折交叉验证最⼤的优点:
所有数据都会参与到训练和预测中,有效避免过拟合,充分体现了交叉的思想
交叉验证可能存在 bias 或者 variance。如果我们提⾼切分的数量 k,variance 会上升但 bias 可能会下降。相反得,如果降低 k,bias 可能会上升但 variance 会下降。bias-variance tradeoff 是⼀个有趣的问题,我们希望模型的 bias 和 variance 都很低,但有时候做不到,只好权衡利弊,选取他们⼆者的平衡点。
通常使⽤10折交叉验证,当然这也取决于训练数据的样本数量。
当我们的数据集⼩时,我们的数据⽆法满⾜模型的复杂度就会过拟合,使⽤交叉验证我们可以重复地使⽤数据:把给定的数据进⾏切分,将切分的数据集组合为训练集和测试集,在此基础上反复地进⾏训练、测试以及模型选择。相当于我们增加了我们的数据量(防⽌过拟合)。最后得到我们模型的准确率(性能)。
pipeline的流程案例-代码解释:
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
pipe_lr = Pipeline([('sc', StandardScaler()),
('pca', PCA(n_components=2)),
('clf', LogisticRegression(random_state=1))
]
)
pipe_lr.fit(X_train, y_train)
print('Test accuracy: %.3f' % pipe_lr.score(X_test, y_test))
Pipeline执⾏流程的分析
pipeline 的中间过程由scikit-learn相适配的转换器(transformer)构成,最后⼀步是⼀个estimator。
⽐如上述的代码,StandardScaler和PCA transformer 构成intermediate steps,LogisticRegression 作为最终的estimator。
当我们执⾏ pipe_lr.fit(X_train, y_train)时,⾸先由StandardScaler在训练集上执⾏ fit和transform⽅法,transformed后的数据⼜被传递给Pipeline对象的下⼀步,也即PCA()。和StandardScaler⼀样,PCA也是执⾏fit和transform⽅法,最终将转换后的数据传递给LosigsticRegression。
ble import RandomForestClassifier
del_lection import GridSearchCV
from sklearn.datats import load_iris
from sklearn.pipeline import Pipeline
教学工作实习计划
中班健康领域目标from sklearn.preprocessing import StandardScaler
# 创建随机森林模型
rf=RandomForestClassifier()
# 加载数据
data=load_iris()契机的近义词
生日蛋糕图片大全# 定义参数调优的范围,randomforestclassifier__n_estimators __前⾯定义的是名字,后⾯定义的内容是参数
parameters={"randomforestclassifier__n_estimators":range(1,11),
"randomforestclassifier__max_depth":range(1,5)}
# 定义pipeline 流⽔线
pipeline=Pipeline([
('scaler',StandardScaler()),
('randomforestclassifier',rf)
])
# 使⽤GridSearchCV 进⾏参数调优
clf=GridSearchCV(estimator=pipeline,param_grid=parameters,cv=6)
# 进⾏数据集分类
clf.fit(data.data,data.target)
# 打印最优分数 给出不同参数情况下的评价结果print("最优分数:%.4lf"%clf.best_score_)
# 打印最优参数 描述了已取得最佳结果的参数的组合print("最优参数:%s"%clf.best_params_)著名的数学家