数据处理的统计学习(scikit-learn教程)
这被称为KFold交叉验证 (2)交叉验证生成器上面将数据划分为训练集和测试集的代码写起来很是沉闷乏味。scikit-learn为此自带了交叉验证生成器以生成目录列表: 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)) 接着交叉验证就可以很容易实现了: kfold = cross_validation.KFold(len(X_digits),n_folds=3) [svc.fit(X_digits[train],y_digits[train]).score(X_digits[test],y_digits[test]) ? ? ? ? for train,test in kfold] 为了计算一个模型的score,scikit-learn自带了一个帮助函数: cross_validation.cross_val_score(svc,X_digits,y_digits,cv=kfold,n_jobs=-1)
交叉验证生成器: 练习: import numpy as npfrom sklearn import cross_validation,datasets,svm digits = datasets.load_digits() X = digits.data y = digits.target svc = svm.SVC(kernel='linear') C_s = np.logspace(-10,10) 完整代码: (3)网格搜索和交叉验证模型网格搜索: from sklearn.grid_search import GridSearchCV Cs = np.logspace(-6,10) clf = GridSearchCV(estimator=svc,param_grid=dict(C=Cs),? ? ? ? ? ? ? ? ? n_jobs=-1) clf.fit(X_digits[:1000],y_digits[:1000]) ? ? ? ? clf.best_score_ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? clf.best_estimator_.C ? ? ? ? ? ? ? ? ? ? ? ? ? ?# Prediction performance on test set is not as good as on train setclf.score(X_digits[1000:],y_digits[1000:]) ? ? ? 默认情况下, cross_validation.cross_val_score(clf,y_digits) 两个交叉验证循环是并行执行的:一个 【警告】你不能在并行计算时嵌套对象( 交叉验证估测: 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)# The estimator chose automatically its lambda:lasso.alpha_ 这些模型的称呼和他们的对应模型很相似,只是在他们模型名字的后面加上了' 练习:
``` 四、无监督学习:寻找数据的代表(1)聚类:将观测样例聚集到一起聚类解决的问题:
from sklearn import cluster,datasets iris = datasets.load_iris() X_iris = iris.data y_iris = iris.target k_means = cluster.KMeans(n_clusters=3) k_means.fit(X_iris) print(k_means.labels_[::10])print(y_iris[::10]) 注意:没有绝对的保证能够恢复真实的分类。首先,尽管scikit-learn使用很多技巧来缓和问题的难度,但选择簇的个数还是是很困难的,初始状态下算法是很敏感的,可能会陷入局部最小。 8个簇: 真实情况: 不要“过解释”聚类结果 应用实例:矢量化 import scipy as sptry: ? lena = sp.lena()except AttributeError: ? from scipy import misc ? lena = misc.lena() X = lena.reshape((-1,1)) # We need an (n_sample,n_feature) arrayk_means = cluster.KMeans(n_clusters=5,n_init=1) k_means.fit(X) values = k_means.cluster_centers_.squeeze() labels = k_means.labels_ lena_compressed = np.choose(labels,values) lena_compressed.shape = lena.shape 原始图像: K-means矢量化: 等段:(Equal bins) 图像直方图:
|