数据归约——主成分分析PCA

 

原理

多元统计分析处理的是多变量(多指标)问题。由于变量较多,增加了分析的复杂性,但在实际问题中,变量之间可能存在一定的相关性。多变量中可能存在信息的重叠。人们希望用较少的变量来代替原来较多的变量,这种代替可以反映原来多个变量的大部分信息,这实际上是一种“降维”的思想。

主成分研究如何通过少数几个主成分(principal component)来解释多个变量间的内部结构。即从原始变量中导出少数几个主分量,使它们尽可能多地保留原始变量的信息,且彼此间互不相关。

数学上的处理是将原始的p个变量作线性组合,作为新的变量 设p个原始变量为x_{1},x_{2},...,x_{p},新的变量(即主成分)为y_{1},y_{2},...,y_{p},主成分和原始变量之间的关系表示为

a_{i1}^{2}+a_{i2}^{2}+...+a_{ip}^{2}=1

第一个主成分:在统计上,主成分所代表的原始变量的信息用其方差来表示。因此,所选择的第一个主成分是所有主成分中的方差最大者,即Var(y_{1})最大。

依次选择:如果第一个主成分不足以代表原来的变量,在考虑选择第二个主成分,依次类推。(有序) 。

约束条件:这些主成分互不相关cov(y_{i},y_{j})=0,且方差递减var(y_{1})>var(y_{2})…var(y_{p})。

一般要求所选主成分的方差总和占全部方差的80%以上,一般来说,主成分的累计方差贡献率达到80%以上的前几个主成分,都可以选作最后的主成分。

一般情况下,当特征根小于1时,就不再选作主成分了,因为该主成分的解释力度还不如直接用原始变量解的释力度大。

主成分分析步骤:

(1)计算相关系数矩阵:根据标准化后的数据矩阵求出相关系数矩阵R。

(2)计算特征值与特征向量:求出相关系数(协方差)矩阵R的特征根和特征向量,并按从大到小的顺序排列,\left | \lambda _{1}-R \right |=0,记为\lambda _{1}\geq \lambda _{2}\geq ...\geq \lambda _{p}

(3)确定主成分:特征值越大,则对应的特征向量表示的主成分的方差越大,var(y_{i})=\lambda_{i}         

(4)计算主成分贡献率和累计贡献率:对于第k个主成分,其对方差的贡献率为\frac{\lambda _{k}}{\sum_{i=1}^{p}\lambda _{i}}

(5)计算主成分载荷:表中的每一列表示一个主成分与原来变量X的相关系数。这个系数越大,说明主成分对该变量的代表性就越大。各主成分正交!

(6)根据主成分分析模型和主成分载荷,可以得到主成分与原来变量之间的线性组合表达式。注意表达式中的x不是原始变量,而是标准化变量!

代码实现

# 规范化
from sklearn.preprocessing import scale
data['Age'] = scale(data['Age'])
data['Fare'] = scale(data['Fare'])
data.head()

#取出所有数值变量
data_num = pd.DataFrame()
for col in data.columns:
    if data[col].dtype in ['int64','float64']: 
        data_num[col] = data[col]
data_num

 

# 数据归约
# PCA主成分分析
from sklearn.decomposition import PCA

#实例化模型
pca = PCA()
#训练并返回结果
result = pca.fit_transform(data_num.iloc[:,1:8])
#变为dataframe格式
data_result = pd.DataFrame(result)
data_result

 

#查看降维后主成分的方差比率 -可以根据此处的方差比率指定参数n_components
pca.explained_variance_ratio_

 

# 降到三个特征值
pca3 = PCA(n_components=3)
pd.DataFrame(pca3.fit_transform(data_num.iloc[:,1:]))

#查看降维后主成分与源数据的对应关系
pd.DataFrame(pca3.components_.T)

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kentos(acoustic ver.)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值