scikit-learn工具学习 - cross_validation , 一条语句里用for循环

本文介绍了scikit-learn的交叉验证机制,讲解了如何使用cross_validation模块进行数据划分,并通过示例展示了如何在一条for循环语句中应用。进阶部分探讨了参数自适应机制,包括使用GridSearchCV进行参数调优,以及内置验证机制的估计器如何自动寻找最佳参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交叉验证的机制

scikit-learn提供库:cross_validation
from sklearn import cross_validation
n指代样本数,n_folds指代将数据集分成多少份且做几次验证试验。
在初始化对象k_fold里已经包含了许多信息,它已经根据参数n和n_folds将n个样本分成n_folds份。每次验证过程选取其中1份作为测试集,剩下的n_folds-1份作为训练集,并且做n_folds次这样的验证。

>>> from sklearn import cross_validation
>>> k_fold = cross_validation.KFold(n=6, n_folds=3)
>>> for train_indices, test_indices in k_fold:
...      print('Train: %s | test: %s' % (train_indices, test_indices))
Train: [2 3 4 5] | test: [0 1]
Train: [0 1 4 5] | test: [2 3]
Train: [0 1 2 3] | test: [4 5]

实践

源代码
>>> from sklearn import datasets, svm   #导入所需要的库
>>> digits = datasets.load_digits()   #load scikit-learn库里的实验数据集:digits
>>> X_digits = digits.data  #获得样本特征数据部分
>>> y_digits = digits.target  #获得样本label
>>> svc = svm.SVC(C=1, kernel='linear')  #初始化svm分类器
>>>
>>> from sklearn import cross_validation   #导入交叉验证模块
>>> kfold = cross_validation.KFold(len(X_digits), n_folds=3) #初始化交叉验证对象,len(X_digits)指明有多少个样本;n_folds指代kfolds中的参数k,表示把训练集分成k份(n_folds份),本例中为3份
>>> [svc.fit(X_digits[train], y_digits[train]).score(X_digits[test], y_digits[test]) for train, test in kfold]   #此处train、test里有交叉验证对象中已经初始化好的3组训练样本和测试样本所需的位置标号
##其实cross_validation库将上述for循环也集成进来了
>>> cross_validation.cross_val_score(svc, X_digits, y_digits, n_jobs=-1)  #n_jobs=-1代表将受用计算机上的所有cpu计算,参数cv(此例中为默认值)除了kfold选项,还可以选择StratifiedKFold等,如果cv是一个int数字的话,并且如果提供了raw target参数,那么就代表使用StratifiedKFold分类方式,如果没有提供raw target参数,那么就代表使用KFold分类方式。
array([ 0.93489149,  0.95659432,  0.93989983])
收获

1、交叉验证如何用
2、在一条语句里使用for循环的技巧,
[ process(Xi) for Xi in dataset ]

进阶

1、参数自适应机制

from sklearn.grid_search import GridSearchCV
这种机制能通过cross_validation不断验证参数集,并最终评判出最佳参数

>>> from sklearn.grid_search import GridSearchCV
>>> Cs = np.logspace(-6, -1, 10)
>>> clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs),
...                    n_jobs=-1)
>>> clf.fit(X_digits[:1000], y_digits[:1000])        
GridSearchCV(cv=None,...
>>> clf.best_score_                                  
0.925...
>>> clf.best_estimator_.C                            
0.0077...
2、嵌入到估计器(estimator)中的参数自适应机制

这种情形下,估计器(estimator)中自带cross_validation功能,所以可以在估计器里设计验证机制使得估计器能自动测试出最佳参数,这里的参数指模型本身的参数,如L1正则中的alpha参数

>>> from sklearn import linear_model, datasets
>>> lasso = linear_model.LassoCV()
>>> diabetes = datasets.load_diabetes()
>>> X_diabetes = diabetes.data
>>> y_diabetes = diabetes.target
>>> lasso.fit(X_diabetes, y_diabetes)
LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,
    max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False,
    precompute='auto', random_state=None, selection='cyclic', tol=0.0001,
    verbose=False)
>>> # The estimator chose automatically its lambda:
>>> lasso.alpha_ 
0.01229...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值