导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from pandas import DataFrame
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import fetch_lfw_people
faces = fetch_lfw_people(resize=1,min_faces_per_person=70)
# 查看一下数据
images = faces.images
plt.imshow(images[100],cmap='gray')
display(images.shape,images[100].shape)
#获取数据
data = faces.data
target = faces.target
target_name = faces.target_names
# 切分数据
X_train ,X_test,y_train,y_test = train_test_split(data,target,test_size=88)
# 使用PCA降维
pca = PCA(100,whiten=True)
pca.fit(X_train)
# 转化
X_train_pca = pca.transform(X_train)
使用GridSearchCV找到最佳的支持向量机方法
svc = SVC()
param_grid = {
'C':[0.01,0.1,1,2,10],
'gamma':[0.001,0.01,0.1,0.5,1]
}
gv = GridSearchCV(svc,param_grid)
gv.fit(X_train_pca,y_train)
# 最佳参数
gv.best_params_
# 最好的得分
gv.best_score_
# 最佳的模型
estimator = gv.best_estimator_
# 对预测数据也进行降维
X_test_pca = pca.transform(X_test)
# 最佳模型进行预测
y_ = estimator.predict(X_test_pca)
预测得分
estimator.score(X_test_pca,y_test)
> 0.8181818181818182
图形可视化
# 画图
# 88 / 40
# 8行5列
plt.figure(figsize=(8*2,5*6))
for i in range(40):
axes = plt.subplot(8,5,i+1)
axes.imshow(X_test[i*2].reshape((125,94)),cmap='gray')
axes.set_title('True:%s\nPredict:%s' % (target_name[y_test[i*2]].split()[-1],target_name[y_[i*2]].split()[-1]))
axes.axis('off')
1.png
2.png
3.png
网友评论