回归-产生连续结果,用于预测
分类-产生离散结果,用于预测
聚类-产生一组集合,用于降维
主成分的目的
对应原有的变量,将重复的变量删去多余,建立尽可能少的两两不相关的新变量,并且这些新变量能最大程度的保留原有信息
对于主成分的筛选
若从100个变量降维为10个变量,a1b1+......+a10b10,对b1-b10从大到小排序,并做累计求和,一般选取贡献率达到85%以上的
求解步骤
计算数据的协方差阵
计算协方差阵的特征值与特征向量
特征值从大到小排列
筛选主成分,并将数据转换到特征向量构建的新空间中
例子1
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
rng=np.random.RandomState(8)
data=np.dot(rng.rand(2,2),rng.randn(2,200)).T
df=pd.DataFrame({'X1':data[:,0],
'X2':data[:,1]})
plt.scatter(df['X1'],df['X2'],alpha=0.8,marker='.')
plt.axis('equal')
plt.grid()
from sklearn.decomposition import PCA
pca=PCA(n_components=1)
pca.fit(df)
#返回所保留的n个成分的各自的方差百分比
print(pca.explained_variance_ratio_)
#投影后特征维度的方差
print(pca.explained_variance_)
#返回具有最大方差的成分
print(pca.components_)
#保留成分的个数
print(pca.n_components_)
例子2
from sklearn.datasets import load_digits
digits=load_digits()
print(digits.keys())
print(len(digits['data']))
print(digits.data[:2])
降维
画出投射在二维向量上的图像
修改版本,从64维降低为10维的时候,如何找到这个图的主成分
pca=PCA(n_components=10)
projected=pca.fit_transform(digits.data)
print('transformed shape:',projected.shape)
projected[:5]
print(pca.explained_variance_)
s=pca.explained_variance_
#找到它的累计贡献率>85%的时候
c_s=pd.DataFrame({'b':s,
'b_sum':s.cumsum()/s.sum()})
可以看出,当在第七个的时候累计贡献率达到85%以上,然后再做主成分分析就可以了
领取专属 10元无门槛券
私享最新 技术干货