您现在的位置是:首页 > 文章详情

sklearn调包侠之PCA降维

日期:2018-07-05点击:502
img_ef1e3e505452ab5c2a9d0a684675b398.png

PCA

PCA(主成分分析),它是一种维度约减算法,即把高维度数据在损失最小的情况下转换为低纬度数据的算法。

实战——人脸识别

数据导入

该数据集可通过sklearn进行下载。数据集总共包含40位人员的照片,每个人10张照片。通过fetch_olivetti_faces方法下载的图片,进行了处理,人脸会居中,并裁剪为64*64大小。

%matplotlib inline import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import fetch_olivetti_faces faces = fetch_olivetti_faces() X = faces.data y = faces.target 
pca

由于数据集样本少(400),特征高(64*64),需要对数据进行降维后,再建立模型。
那到底选择多少主成分合适了?我们这里计算多组主成分,获取数据还原率,如图所示,选择140个主成分,可以保证还原率大于0.95。

from sklearn.decomposition import PCA candidate_components = range(10, 300, 30) explained_ratios = [] for c in candidate_components: pca = PCA(n_components=c) X_pca = pca.fit_transform(X) explained_ratios.append(np.sum(pca.explained_variance_ratio_)) plt.figure(figsize=(10, 6), dpi=144) plt.grid() plt.plot(candidate_components, explained_ratios) plt.xlabel('Number of PCA Components') plt.ylabel('Explained Variance Ratio') plt.title('Explained variance ratio for PCA') plt.yticks(np.arange(0.5, 1.05, .05)) plt.xticks(np.arange(0, 300, 20)) 
img_a7d8c49001b5b8aa9d9da7ae13db9c14.png
切分数据集
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=33) 
训练模型

这里使用svm进行模型训练,并使用网格搜索来获取最优参数。

from sklearn.model_selection import GridSearchCV from sklearn.svm import SVC param_grid = {'C': [1, 5, 10, 50, 100], 'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01]} clf = GridSearchCV(SVC(kernel='rbf', class_weight='balanced'), param_grid) clf = clf.fit(X_train_pca, y_train) print(clf.best_params_, clf.best_score_) # result # {'C': 5, 'gamma': 0.005} 0.778125 
模型评估

最后,对模型进行评估:

clf.best_estimator_.score(X_test_pca, y_test) # result # 0.96250000000000002 
原文链接:https://yq.aliyun.com/articles/652216
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章