概念
主成分分析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=PCA(0.5)
pca.fit(noisy_digits)
components=pca.transform(example_digits)
filter_digits=pca.inverse_transform(components)
绘制:plot_digits(filter_digits)
降噪后:
人脸识别的应用-特征脸
导包: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:
from sklearn.decomposition import PCA
pca=PCA(svd_solver='randomized')
pca.fit(X)
plot_faces(pca.components_[:36,:])
结果: