任务描述

读取机器学习包中的人脸识别图像数据集,对数据集进行探索分析,对像素特征数据做主成分分析,并提取主成分,要求累计贡献率在95%以上。基于提取的主成分数据,按80%训练和20%测试,构建支持向量机分类模型,输出模型准确率和测试数据集的预测准确率。

相关知识

为了完成本关任务,你需要掌握:1.从机器学习包中获取人脸识别图像数据集 2.对像素特征数据做主成分分析,并提取主成分,要求累计贡献率在95%以上。 3.按照题目要求将数据集划分为训练数据集和测试数据集。 4.构建支持向量机分类模型,进行训练和预测。

获得数据

导入机器学习包中人脸识别图像数据集 图像像素数据集为x,图像标签数据集为y


  1. import sklearn.datasets
  2. a=sklearn.datasets.load_digits()
  3. x=a.data
  4. y=a.target
对提取的数据进行主成分分析

导入python自带的主成分分析模块PCA对数据进行主成分分析


  1. from sklearn.decomposition import PCA//导入主成分分析模块PCA
  2. pca=PCA(n_components=0.95)//利用PCA创建主成分分析对象pca
  3. pca.fit(X)//调用pca对象中的fit()方法,对待分析的数据进行拟合训练
  4. X1=pca.transform(X)//调用pca对象中的transform()方法,返回提取的主成分
划分训练集和测试集

  1. from sklearn.model_selection import train_test_split
  2. x_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%的数据对向量机模型进行训练。


  1. from sklearn.svm import SVC
  2. clf = svm.SVC(kernel='linear') //其中核函数可以选择线性核、多项式核、高斯核、sig核,分别用linear、poly、rbf、sigmoid表示,默认情况下选择高斯核。本题使用线性核
  3. clf.fit(x_train,y_train)//调用svm中的fit()方法进行训练。
  4. rv=clf.score(x, y); 调用svm中的score()方法,考查训练效果。
  5. 此时的rv为模型准确率(针对训练数据)
  6. y1=clf.predict(x_test)//对测试数据进行预测,并获得预测结果
  7. r=y1-y_test//预测值与真实值相减
  8. 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 **********#

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐