基于scikit-learn工具的交叉检验 — cross_validation模型
2016-04-13 20:31
344 查看
1. 何为交叉检验
在进行数据挖掘的工作或者比赛中,通常都是给定一个train训练数据集和一个test测试数据集,然后采用一个或多个模型对train进行训练,最后将训练完成得到的模型用于test 的预测。然后问题来了,我们怎么确定我们对train 训练的模型是优秀的呢?那么我们会想到从原来的train 数据集中分成两部分 train_1,train_2,拿train_1去训练,然后将训练完成的结果带入另一部分train_2去验证。因为这时另一部分也是有target的,所以可以验证出模型的效果。
但是这样也有一个弊端,因为我们一直在将模型优化到使train_2 的结果越来越好的状态,可是我们的最终目的是要预测test, 而我们不停的优化train_2的结果很可能会造成在train_2 上的过拟合。因此我们不能只分一份来做验证,而是采用多份数据去验证,然后求平均;这样就避免了对谋一份验证数据的过拟合。这就叫交叉检验。
下面我主要介绍通过sklearn中的cross_validation 来做交叉检验
2. cross_validation
2.1 cross_validation.KFold
KFold(n,n_fold=3,shuffle=False,random_state=None)
n 样本个数
n_fold 分为多少份,至少为2,每份样本个数相同
例1
from sklearn import cross_validation k_fold = cross_validation.KFold(n=12,n_folds=4) for train_indices,test_indices in k_fold: print train_indices,test_indices
例2
from sklearn import cross_validation from sklearn import datasets,svm digits = datasets.load_digits() X_digits = digits.data y_digits = digits.target clf = svm.SVC(kernel='linear',C=1) k_fold = cross_validation.KFold(len(X_digits),n_folds=10) print [clf.fit(X_digits[train],y_digits[train]).score(X_digits[test],y_digits[test]) for train ,test in k_fold]
还有一个函数,可以不需要写for循环,直接得到结果
cross_validation.cross_val_score(clf,X_digits,y_digits,cv=10)
2.2 cross_validation.StratifiedKFold
StratifiedKFold 是kFold 的变形,它划分的时候是将每个类别的相同比例的样本进行搭配作为1个fold,StratifiedKFold(y,n_folds=3,shuffle=False,random_state=None)
y 样本标签
例子
import numpy as np from sklearn import cross_validation X=np.array([[1,2],[3,4],[1,2],[3,4],[1,2],[3,4],[1,2],[3,4]]) y=np.array([0,0,1,1,0,0,1,1]) skf = cross_validation.StratifiedKFold(y,n_folds=4) for skf1,skf2 in skf: print skf1,skf2
相关文章推荐
- 量子计算磁共振原型机被激光脉冲原型机淘汰
- manacher算法总结
- iOS 6 Auto Layout NSLayoutConstraint 界面布局
- 13.KVM安装之网桥
- Newtonsoft.Json(Json.net)的基本用法
- Python写入CSV文件的问题
- 爆破vcrkme01(已补上注册机)
- 关于项目中上传图片时图片尺寸和大小的判断问题
- S5PV210的SD卡启动详解2
- StringBuffer的常用方法与操作
- C语言入门之指针用法教程
- leetcode之Merge Sorted Array
- node版本的切换(转)
- RSA算法-java
- java 中的Exception RuntimeException 区别
- 微信支付--网页版-V3-(2)
- lightoj 1192 - Left Right Nim博弈
- hiho一下第一周#1032 : 最长回文子串
- 【HNOI模拟】 K小数查询
- Android实现横屏以及全屏的小技巧