import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import seaborn as sns;sns.set()
from sklearn.datasets import fetch_lfw_people
faces = fetch_lfw_people(min_faces_per_person=60)
print(faces.target_names)
print(faces.images.shape)
fig,ax = plt.subplots(3,5)
for i,axi in enumerate(ax.flat):
axi.imshow(faces.images[i],cmap='bone')
axi.set(xticks=[],yticks=[],xlabel=faces.target_names[faces.target[i]])
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dcaaa6d0e79fb8aace3a6031c60ad31e.png)
- 每一幅图的尺寸为[62x47] ,大约3000个像素值,我们可以将整个图像展平为-一个长度为3000左右的一维向量,然后使用这个向量做为特征.通常更有效的方法是通过预处理提取图像最重要的特征. -个重要的特征提取方法是PCA(主成分分析),可以将-副图像转换为-一个长度为更短的(150)向量.
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
pca = PCA(n_components=150,whiten=True,random_state=42)
svc = SVC(kernel='linear',class_weight='balanced')
model = make_pipeline(pca,svc)
from sklearn.model_selection import train_test_split
xtrain,xtest,ytrain,ytest = train_test_split(faces.data,faces.target,random_state=42)
from sklearn.model_selection import GridSearchCV
param_grid = {'svc__C': [1, 5, 10, 50]}
grid = GridSearchCV(model, param_grid)
%time grid.fit(xtrain, ytrain)
print(grid.best_params_)
model = grid.best_estimator_
yfit = model.predict(xtest)
fig,ax = plt.subplots(4,6)
for i,axi in enumerate(ax.flat):
axi.imshow(xtest[i].reshape(62,47),cmap='bone')
axi.set(xticks=[],yticks=[])
axi.set_ylabel(faces.target_names[yfit[i]].split()[-1],color='black' if yfit[i]==ytest[i] else 'red')
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3c527d28518fb06ba0d55fd7f7fbb7f0.png)
from sklearn.metrics import classification_report
print(classification_report(ytest,yfit,target_names = faces.target_names))
from sklearn.metrics import confusion_matrix
mat = confusion_matrix(ytest,yfit)
sns.heatmap(mat.T,square=True,annot=True,fmt='d',cbar=False,xticklabels=faces.target_names,yticklabels=faces.target_names)
plt.xlabel('true label')
plt.ylabel('predicted label');
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2943f0e13a5f999c5725180a0c38ae33.png)