from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.linear_model import SGDClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.metrics import accuracy_score,recall_score,f1_score
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
#1.1读取数据
from sklearn.datasets import fetch_olivetti_faces
data, targets=fetch_olivetti_faces(return_X_y=True)
img_shape=(64,64)
img_shape=(64,64)
#1.2可视化显示
fig,ax=plt.subplots(4,5)
for i,axi in enumerate(ax.flat):
axi.imshow(data[i].reshape(img_shape),cmap=plt.cm.gray)
axi.set(xticks=[],yticks=[],xlabel=targets[i])
plt.show()
#1.3训练集和测试集
X_train, X_test, y_train, y_test =train_test_split(data, targets, test_size=0.5,random_state=2)
print('X_train',X_train.shape)
print('y_train',y_train.shape)
print ('X_test',X_test.shape)
print ('y_test',y_test.shape)
#2.1&2.2定义SVM,训练模型
svc =SVC(kernel='linear',C=10)
svc.fit(X_train,y_train)
#2.3分类
y_predict=svc.predict(X_test)
acc01=accuracy_score(y_test,y_predict)
recall01=recall_score(y_test,y_predict,average='weighted')
f101= round(f1_score(y_test,y_predict,average='weighted'),4)
print('Accuracy:',acc01)
print('Recall:',recall01)
print('F1 Score:',f101)
#2.4混淆矩阵
sns.set()
y_true =y_test
y_pred=svc.predict(X_test)
confusion_matrix(y_true,y_pred,labels=None,sample_weight=None)
C=confusion_matrix(y_true,y_pred)
print(C,end='\n\n')
#3.1KNN分类
clf=KNeighborsClassifier(n_neighbors=2)
clf.fit(X_train,y_train)
y_pred1=clf.predict(X_test)
acc02=accuracy_score(y_test,y_pred1)
recall02 =recall_score(y_test,y_pred1,average='weighted')
f102 =round(f1_score(y_test,y_pred1,average='weighted'),4)
print('Accuracy:', acc02)
print('Recall:', recall02)
print('F1 Score:', f102)
print('\n')
#3.2贝叶斯分类
mlt=MultinomialNB(alpha=1.0)
mlt.fit(X_train,y_train)
y_pred2=mlt.predict(X_test)
acc03=accuracy_score(y_test,y_pred2)
recall03 =recall_score(y_test,y_pred2,average='weighted')
f103=round(f1_score(y_test,y_pred2,average='weighted'),4)
print('Accuracy:',acc03)
print('Recall:',recall03)
print('F1 Score:',f103)
print('\n')
from sklearn import linear_model
rec = linear_model.RidgeClassifier()
#3.3线性分类器
rec.fit(X_train,y_train)
y_pred3=rec.predict(X_test)
acc04 =accuracy_score(y_test,y_pred3)
recall04 =recall_score(y_test,y_pred3,average='weighted')
f104 =round(f1_score(y_test,y_pred3,average='weighted'),4)
print('Accuracy:', acc04)
print('Recall:', recall04)
print('F1 Score:', f104)