数据处理的统计学习(scikit-learn教程)
练习: 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) 图像直方图:
特征凝聚: digits = datasets.load_digits() images = digits.images X = np.reshape(images,(len(images),-1)) connectivity = grid_to_graph(*images[0].shape) agglo = cluster.FeatureAgglomeration(connectivity=connectivity,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? n_clusters=32) agglo.fit(X) X_reduced = agglo.transform(X) X_approx = agglo.inverse_transform(X_reduced) images_approx = np.reshape(X_approx,images.shape)
(2)分解:从一个信号到成分和加载成分及其加载:
上面观测样例的点分布在一个方向上是非常平坦的:三个特征单变量的一个甚至可以有其他两个准确的计算出来。PCA用来发现数据在哪个方向上是不平坦的。 当被用来转换数据的时候,PCA可以通过投射到一个主子空间来降低数据的维度。: # Create a signal with only 2 useful dimensionsx1 = np.random.normal(size=100) x2 = np.random.normal(size=100) x3 = x1 + x2 X = np.c_[x1,x2,x3]from sklearn import decomposition pca = decomposition.PCA() pca.fit(X)print(pca.explained_variance_) ?# As we can see,only the 2 first components are usefulpca.n_components = 2X_reduced = pca.fit_transform(X) X_reduced.shape
|