学习
实践
活动
工具
TVP
写文章

PCA的相关小练习

回归-产生连续结果,用于预测

分类-产生离散结果,用于预测

聚类-产生一组集合,用于降维

主成分的目的

对应原有的变量,将重复的变量删去多余,建立尽可能少的两两不相关的新变量,并且这些新变量能最大程度的保留原有信息

对于主成分的筛选

若从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%以上,然后再做主成分分析就可以了

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180417G1V0AZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券