热线电话:13121318867

登录
2020-06-11 阅读量: 797
python机器学习中sklearn的cross validation相关知识总结

cross validation大概的意思是:对于原始数据我们要将其一部分分为traindata,一部分分为test data。train data用于训练,test data用于测试准确率。在test data上测试的结果叫做validation error。将一个算法作用于一个原始数据,我们不可能只做出随机的划分一次train和testdata,然后得到一个validation error,就作为衡量这个算法好坏的标准。因为这样存在偶然性。我们必须多次的随机的划分train data和test data,分别在其上面算出各自的validation error。这样就有一组validationerror,根据这一组validationerror,就可以较好的准确的衡量算法的好坏。crossvalidation是在数据量有限的情况下的非常好的一个evaluate performance的方法。而对原始数据划分出train data和testdata的方法有很多种,这也就造成了cross validation的方法有很多种。

1. train_test_split

对数据集进行快速打乱(分为训练集和测试集)

这里相当于对数据集进行了shuffle后按照给定的test_size 进行数据集划分。

2. cross_val_score

对数据集进行指定次数的交叉验证并为每次验证效果评测

调用方式:

sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None,

cv=None,n_jobs=1, verbose=0,

fit_params=None,

pre_dispatch='2*n_jobs')

返回值就是对于每次不同的的划分raw data时,在test data上得到的分类的准确率。

参数解释:

estimator:是不同的分类器,可以是任何的分类器。比如支持向量机分类器:estimator = svm.SVC(kernel='linear', C=1)

cv:代表不同的cross validation的方法。如果cv是一个int值,并且如果提供了rawtarget参数,那么就代表使用StratifiedKFold分类方式;如果cv是一个int值,并且没有提供rawtarget参数,那么就代表使用KFold分类方式;也可以给定它一个CV迭代策略生成器,指定不同的CV方法。

scoring:默认Nnoe,准确率的算法,可以通过score_func参数指定;如果不指定的话,是用estimator默认自带的准确率算法。

3. KFold  (K折交叉验证)

1、将数据集平均分割成K个等份

2、使用1份数据作为测试数据,其余作为训练数据

3、计算测试准确率

4、使用不同的测试集,重复2、3步骤

5、对测试准确率做平均,作为对未知数据预测准确率的估计

最基础的CV算法,也是默认采用的CV策略​。主要的参数包括两个,一个是样本数目,一个是k-fold要划分的份数。

fromsklearn.model_selection import KFold

X= np.array([[1, 2], [3, 4], [1, 2], [3, 4]])

y= np.array([1, 2, 3, 4])

kf= KFold(n_splits=2)

kf.get_n_splits(X)#给出K折的折数,输出为2

print(kf)

#输出为:KFold(n_splits=2, random_state=None,shuffle=False)

for train_index, test_index in kf.split(X):

print("TRAIN:",train_index, "TEST:", test_index)

X_train,X_test = X[train_index], X[test_index]

y_train,y_test = y[train_index], y[test_index]

#输出:TRAIN: [2 3] TEST: [0 1]

# TRAIN: [0 1] TEST: [2 3]

##这里kf.split(X)返回的是X中进行分裂后train和test的索引值,令X中数据集的索引为0,1,2,3;第一次分裂,先选择test,索引为0和1的数据集为test

剩下索引为2和3的数据集为train;第二次分裂,先选择test,索引为2和3的数据集为test,剩下索引为0和1的数据集为train。

16.7340
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子