sklearn gridsearchcv_sklearn调包侠之PCA降维

sklearn gridsearchcv_sklearn调包侠之PCA降维_第1张图片

sklearn gridsearchcv_sklearn调包侠之PCA降维_第2张图片

PCA

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

实战——人脸识别

数据导入

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

  1. %matplotlib inline
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. from sklearn.datasets import fetch_olivetti_faces
  5. faces = fetch_olivetti_faces()
  6. X = faces.data
  7. y = faces.target

pca

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

  1. from sklearn.decomposition import PCA
  2. candidate_components = range(10, 300, 30)
  3. explained_ratios = []
  4. for c in candidate_components:
  5. pca = PCA(n_components=c)
  6. X_pca = pca.fit_transform(X)
  7. explained_ratios.append(np.sum(pca.explained_variance_ratio_))
  8. plt.figure(figsize=(10, 6), dpi=144)
  9. plt.grid()
  10. plt.plot(candidate_components, explained_ratios)
  11. plt.xlabel('Number of PCA Components')
  12. plt.ylabel('Explained Variance Ratio')
  13. plt.title('Explained variance ratio for PCA')
  14. plt.yticks(np.arange(0.5, 1.05, .05))
  15. plt.xticks(np.arange(0, 300, 20))

sklearn gridsearchcv_sklearn调包侠之PCA降维_第3张图片

切分数据集

  1. from sklearn.model_selection import train_test_split
  2. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=33)

训练模型

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

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

模型评估

最后,对模型进行评估:

  1. clf.best_estimator_.score(X_test_pca, y_test)
  2. # result
  3. # 0.96250000000000002

你可能感兴趣的:(sklearn,gridsearchcv)