标签:状态 out selection ros 目的 过程 随机数 处理 个数
交叉验证
当我们构建分类器时,有可能会存在过拟合现象。如何利用有限的数据降低模型的过拟合?——交叉验证
我们把每个数据集分成两个子集
一个用于构建分类器(模型),称为训练集(training set)
另一个用于评估分类器,称为测试集(test set)
根据训练集和测试集的挑选方法,一般可分为简单交叉验证、k折交叉验证、留一法交叉验证。
一、简单交叉验证(hold-out cross validation)
1、从全部数据集S中选择80%的样本的作为训练集(一般时8/2分,8为训练集,2为测试集),剩余未测试集。
2、在测试集中进行训练,得到分类模型
3、在验证集中,用分类模型进行预测,并记录相关指标如敏感性、特异性、AUC
4、选择分类效果好的分类模型
优点:处理简单,只需把随机数据分两份
缺点:有些样本可能从未做过训练或测试数据,而有些样本不止一次选为训练或测试数据。另外训练集样本数太少,通常不足以代表母体样本的分布,导致 test 阶段辨识率容易出现明显落差。
二、k折交叉验证(k-fold cross validation)
1、 将全部训练集 S分成 k个不相交的子集,假设 S中的训练样例个数为 m,那么每一个子 集有 m/k 个训练样例,,相应的子集称作 {s1,s2,…,sk},一般是10 fold。
2、每次从分好的子集中里面,拿出一个作为测试集,其它k-1个作为训练集
3、在测试集中进行训练,得到分类模型
4、 把这个模型放到测试集上,得到分类率。
5、计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。
优点: K-CV使得每一个样本数据都既被用作训练数据,也被用作测试数据,可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。
缺点: K值的选择,计算比较繁琐,需要训练k次,测试k次。
三、留一法交叉验证(leave-one-out cross validation)
每次只留下一个样本做测试集,其它样本做训练集,如果有k个样本,则需要训练k次,测试k次。
留一法
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
accuracy = 0;
for train, test in loo.split(X):
log_model.fit(X[train], y[train]) # fitting
y_p = log_model.predict(X[test])
if y_p == y[test] : accuracy += 1
print(accuracy / np.shape(X)[0])
交叉验证(10折)
log_model = LogisticRegression(solver=‘liblinear’)
y_pred = cross_val_predict(log_model, X, y, cv=10)
print(metrics.accuracy_score(y, y_pred))
————————————————
版权声明:本文为CSDN博主「MuyeeyuM」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a751375/java/article/details/86606953
标签:状态 out selection ros 目的 过程 随机数 处理 个数
原文地址:https://www.cnblogs.com/jialinliu/p/12817368.html