PCA:
参考:https://www.cnblogs.com/pinard/p/6239403.html
目的:提取有价值的信息
目标:希望投影后的值尽可能分散
选择K个单位正交基,使得原始数据变换到这组基上后,各字段两两协方差为0,字段的方差尽可能大
(1)先对数据进行去中心化
(2)构建协方差矩阵(对角线为方差,其他元素为协方差):
目标:对角线最大,其他值为0
(3)进行对角化处理:
求出特征值;
求特征值最大的K个特征向量;
单位化特征向量,变换坐标
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets.samples_generator import make_blobs
x,y=make_blobs(n_samples=1000,n_features=3,centers=[[3,3, 3], [0,0,0], [1,1,1], [2,2,2]], cluster_std=[0.2, 0.1, 0.2, 0.2], random_state =9)
fig=plt.figure()
ax=Axes3D(fig,rect=[0,0,1,1],elev=30,azim=20)
plt.scatter(x[:,0],x[:,1],x[:,2],marker='o')
#三维
from sklearn.decomposition import PCA
pca=PCA(n_components=3)
pca.fit(x)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
#二维
pca=PCA(n_components=2)
pca.fit(x)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
#指定比例
pca=PCA(n_components=0.95)
pca.fit(x)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
print(pca.n_components_)
#指定比例
pca=PCA(n_components=0.99)
pca.fit(x)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
print(pca.n_components_)
#mle算法自动选择
pca=PCA(n_components='mle')
pca.fit(x)
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
print(pca.n_components_)