第4关:基于像素主成分的人脸识别模型
·
任务描述
读取机器学习包中的人脸识别图像数据集,对数据集进行探索分析,对像素特征数据做主成分分析,并提取主成分,要求累计贡献率在95%以上。基于提取的主成分数据,按80%训练和20%测试,构建支持向量机分类模型,输出模型准确率和测试数据集的预测准确率。
相关知识
为了完成本关任务,你需要掌握:1.从机器学习包中获取人脸识别图像数据集 2.对像素特征数据做主成分分析,并提取主成分,要求累计贡献率在95%以上。 3.按照题目要求将数据集划分为训练数据集和测试数据集。 4.构建支持向量机分类模型,进行训练和预测。
获得数据
导入机器学习包中人脸识别图像数据集 图像像素数据集为x,图像标签数据集为y
import sklearn.datasetsa=sklearn.datasets.load_digits()x=a.datay=a.target
对提取的数据进行主成分分析
导入python自带的主成分分析模块PCA对数据进行主成分分析
from sklearn.decomposition import PCA//导入主成分分析模块PCApca=PCA(n_components=0.95)//利用PCA创建主成分分析对象pcapca.fit(X)//调用pca对象中的fit()方法,对待分析的数据进行拟合训练X1=pca.transform(X)//调用pca对象中的transform()方法,返回提取的主成分
划分训练集和测试集
from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(X1,Y,test_size=0.2,random_state=4)
把X,Y分别随机划分为训练集和测试集,训练集占总数据的80%,测试集占20%。共4个数据集。(test_size为测试集所占的比例)
构建支持向量机分类模型
构建支持向量机分类模型,利用随机分配的80%的数据对向量机模型进行训练。
from sklearn.svm import SVCclf = svm.SVC(kernel='linear') //其中核函数可以选择线性核、多项式核、高斯核、sig核,分别用linear、poly、rbf、sigmoid表示,默认情况下选择高斯核。本题使用线性核clf.fit(x_train,y_train)//调用svm中的fit()方法进行训练。rv=clf.score(x, y); 调用svm中的score()方法,考查训练效果。此时的rv为模型准确率(针对训练数据)y1=clf.predict(x_test)//对测试数据进行预测,并获得预测结果r=y1-y_test//预测值与真实值相减v=len(r[r==0])/len(y1)//预测值与真实值相减为0,即预测准确,即测试机预测准确值
编程要求
根据提示,在右侧编辑器补充代码,按照任务要求获取数据,划分数据,利用支持分类向量机输出模型的准确率和测试集的预测准确率。本关的大体内容上与本章节的第3关类似,只是增加了主成分分析的步骤
开始你的任务吧,祝你成功!
# -*- coding: utf-8 -*-
#读取机器学习包sklearn内置的人脸图像数据集,
#对像素特征数据做主成分分析,并提取主成分,要求累计贡献率在95%以上。
#基于提取的主成分数据作为输入特征数据,
#按80%训练和20%测试进行随机划分,构建支持向量机分类模型(线性核函数),
#返回模型的准确率rv和测试集的预测准确率rs。
from sklearn.decomposition import PCA #主成分分析模块
def return_values():
#1 读取数据集
import sklearn.datasets
from sklearn.model_selection import train_test_split
a=sklearn.datasets.fetch_olivetti_faces()
#2 提取数据
X=a.data
Y=a.target
pca=PCA(n_components=0.95)#利用PCA创建主成分分析对象pca
pca.fit(X)#调用pca对象中的fit()方法,对待分析的数据进行拟合训练
X1=pca.transform(X)#调用pca对象中的transform()方法,返回提取的主成分
x_train,x_test,y_train,y_test=train_test_split(X1,Y,test_size=0.2,random_state=4)
from sklearn.svm import SVC
svm_clf = SVC(kernel='linear')
svm_clf.fit(x_train,y_train)
rv=svm_clf.score(x_train, y_train)
y1=svm_clf.predict(x_test)
r=y1-y_test
rs=len(r[r==0])/len(y1)
return (rv,rs)
#********** End **********#
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)