机器学习学习笔记(七)PCA

概念

主成分分析PrincipalComponentAnalysis

(1)一个非监督的机器学习算法

(2)主要用于数据的降维

(3)通过降维,可以发现更便于人类理解的特征

(4)其他应用:可视化;去燥

如何找到这个让样本间间距最大的轴?

如何定义样本间间距?

使用方差(Variance):

一个目标函数的最优化问题:使用梯度上升法解决

(1)demean

def demean(X):

    returnX-np.mean(X,axis=0)

(2)梯度上升

def f(w,X): 

    returnnp.sum((X.dot(w))**2)/len(X)

实现

##主成分分析: ##样本数据集-》降维class PCA:


scikit-learn中的PCA

导包:from sklearn.decomposition import PCA

实例:pca=PCA(n_components=1)

pca.fit(X)

降维:X_reduction=pca.transform(X)

升维:x_restore=pca.inverse_transform(X_reduction)

具体判断降低到几维?

pca.explained_variance_ratio_

 

pca=PCA(0.95)##95%

pca.fit(X_train)

MINIST数据集

导包:from sklearn.datasets import fetch_mldata

下载:mnist=fetch_mldata("MNISToriginal")

降噪

原始数据图片:

机器学习学习笔记(七)PCA_第1张图片


降噪过程:

pca=PCA(0.5)

pca.fit(noisy_digits)

components=pca.transform(example_digits)

filter_digits=pca.inverse_transform(components)

绘制:plot_digits(filter_digits)

降噪后:


机器学习学习笔记(七)PCA_第2张图片


人脸识别的应用-特征脸

导包:from sklearn.datasets import fetch_lfw_people

下载:faces=fetch_lfw_people()

显示:

def plot_faces(faces):

   fig,axes=plt.subplots(6,6,figsize=(10,10),subplot_kw={'xticks':[],'yticks':[]},

                        gridspec_kw=dict(hspace=0.1,wspace=0.1))

    for i,ax inenumerate(axes.flat):

       ax.imshow(faces[i].reshape(62,47),cmap='bone')

    plt.show()

机器学习学习笔记(七)PCA_第3张图片

PCA:

from sklearn.decomposition import PCA

pca=PCA(svd_solver='randomized')

pca.fit(X)

plot_faces(pca.components_[:36,:])

结果:

机器学习学习笔记(七)PCA_第4张图片

你可能感兴趣的:(机器学习学习笔记(七)PCA)