美文网首页想法简友广场散文
python与机器学习降维:PCA实现高维数据可视化和NMF人脸

python与机器学习降维:PCA实现高维数据可视化和NMF人脸

作者: Cache_wood | 来源:发表于2021-10-05 09:54 被阅读0次

PCA实现高维数据可视化

#建立工程,导入sklearn相关工具包
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
#加载数据并进行降维
data = load_iris()
y = data.target
X = data.data
pca = PCA(n_components=2)

reduced_X = pca.fit_transform(X)
#按类别对降维后的数据进行保存
red_x,red_y = [],[]
blue_x,blue_y = [],[]
green_x,green_y = [],[]

for i in range(len(reduced_X)):
    if y[i] == 0:
        red_x.append(reduced_X[i][0])
        red_y.append(reduced_X[i][1])
    elif y[i] == 1:
        blue_x.append(reduced_X[i][0])
        blue_y.append(reduced_X[i][1])
    else:
        green_x.append(reduced_X[i][0])
        green_y.append(reduced_X[i][1])
#降维后数据点的可视化
plt.scatter(red_x,red_y,c='r',marker='x')
plt.scatter(blue_x,blue_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()

NMF人脸数据特征提取

#建立工程,导入sklearn相关工具包
import matplotlib.pyplot as plt
from sklearn import decomposition
from sklearn import datasets
from sklearn.datasets import fetch_olivetti_faces
from numpy.random import RandomState
#设置基本参数并加载数据
n_row, n_col = 2,3
n_components = n_row*n_col
image_shape = (64,64)
dataset = fetch_olivetti_faces(shuffle=True,random_state=RandomState(0))
faces = dataset.data
#设置图像的展示方式
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)
        plt.xticks(())
        plt.yticks(())
    plt.subplots_adjust(0.01,0.05,0.99,0.93,0.04,0.)

plot_gallery("First centered Olivetti faces", faces[:n_components])
#创建特征提取的对象NMF,使用PCA作为对比
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))
]
#降维后数据点的可视化
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()


相关文章

网友评论

    本文标题:python与机器学习降维:PCA实现高维数据可视化和NMF人脸

    本文链接:https://www.haomeiwen.com/subject/anvcnltx.html