有关本篇文章的课件大家可以参考这个链接:https://www.icourse163.org/learn/BIT-1001872001?tid=1001965001#/learn/content?type=detail&id=1002854140&cid=1003246094,数据集和slide的获取可以查看本专辑case 0中的相应链接。
下面简单地介绍一下代码(其实就是给原来的代码写点注释,更能看懂一些)
首先是调用相应地包:
import matplotlib.pyplot as plt
from numpy.random import RandomState
from sklearn import decomposition
from sklearn.datasets import fetch_olivetti_faces
import ssl
运行时一定要加上这一句话,否则就会报错:
ssl._create_default_https_context = ssl._create_unverified_context
对图片展示形式进行设定:
n_row,n_col=2,3#2行,3列
n_components=n_col*n_row#设置提取特征的数目
image_shape=(64,64)#对图片格式进行设定
导入数据集,如果好奇数据的形式,可以打开注释尝试输出:
dataset=fetch_olivetti_faces(shuffle=True,random_state=RandomState(0))#随机排序,随机状态
#print(dataset)
faces=dataset.data#将数据存入faces中
绘图函数,设置绘图的格式:
def plot_gallery(title,images,n_col=n_col,n_row=n_row):
plt.figure(figsize=(2. * n_col, 2.26 * n_row)) #设置图片格式
plt.suptitle(title, size=16)#设置标题和字体大小
for i,comp in enumerate(images):#转换成枚举类型,将每一个数据标上序号,同时也统计了数据的个数
plt.subplot(n_row,n_col,i+1)#确定数据的子图位置
vmax=max(comp.max(),-comp.min())#找到绝对值最大的数
plt.imshow(comp.reshape(image_shape),cmap=plt.cm.gray,interpolation='nearest',vmin=-vmax,vmax=vmax)#颜色图谱设置成灰度,插值运算选择nearest,即把某块显示成一种颜色,利用vmin和vmax来缩放参数
#进行坐标轴变换
plt.xticks(())
plt.yticks(())
plt.subplots_adjust(0.01,0.05,0.99,0.94,0.04,0.)#调整子图的间距
画出提取特征之前的图像:
plot_gallery('First centered Olivetti faces',faces[:n_components])#调用绘图函数,选取数据中的前六个进行绘图
初始话降维模型:
estimators=[('Eigenfaces - PCA using randomized SVD',decomposition.PCA(n_components=6,whiten=True)),('Non-negative components - NMF',decomposition.NMF(n_components=6,init='nndsvda',tol=5e-3))]#调用PCA算法,使得有六个主成分,并对特征进行白化,即使得每个特征具有相同的方差
使用模型进行计算,并绘图展示:
for name,estimator in estimators:#迭代运行两种算法
print("Extracting the top %d %s..."%(n_components,name))#输出方法名称
print(faces.shape)
estimator.fit(faces)#运行模型
components_=estimator.components_#提取运算出来的主成分
plot_gallery(name,components_[:n_components])#调用绘图函数,选取数据中的前六个进行绘图
plt.show()
以上就是这个case的全部内容,代码可以复制以后直接运行。