机器学习的数据预处理模块(二):主成分分析
在上一节中,谈到了数据预处理模块的前两种方法,缺失值处理和数据规范化。在上述两步完成后,数据集已经得到了一定的规划。然而,有时候,数据集会存在以下问题:其中数据的或者有许多的,倘若不排除这些问题,可能会导致模型的计算量巨大,特征不够明显,进而无法进行进一步的统计分析。PCA的作用在于此。
在上一节中,谈到了数据预处理模块的前两种方法,缺失值处理和数据规范化。在上述两步完成后,数据集已经得到了一定的规划。然而,有时候,数据集会存在以下问题:其中数据的特征维度过大或者有许多特征量是无关紧要的,倘若不排除这些问题,可能会导致模型的计算量巨大,特征不够明显,进而无法进行进一步的统计分析。
有时,我们能看到许多的排行榜,这些排行榜不可能仅采用单个指标衡量,往往需要综合考虑各方面的因素,运用多方面的指标进行分析。那这个多因素考虑下的排行榜是如何诞生的呢?
•关于排名,我们需要一个综合指标来衡量,但是这个综合指标该如何计算呢?指标加权是一个通常的思路,比如:
Y1=a11*X1+a12*X2+a13*X3+a14*X4
•其中X1~X4是原来的指标,Y1是综合指标,a11~a14是对应的加权系数。那么如何确定系数a1j(j=1,2,3,4)呢?这里我们应该先明确Xi(i=1,2,3,4)可以看成是一个随机变量,那么Y1是由Xi线性加权获得,它也是一个随机变量。此时,主成分分析(PCA)就起到了关键作用。
1.PCA的思想
主成分分析是一种数学降维方法,其主要目的是找出几个综合变量来代替原来众多的变量,使得这些综合变量能尽可能地代表原来变量的信息且彼此之间互不相关。这种将多个变量化为少数几个互相无关的综合变量的统计分析方法就叫做主成分分析。
设p个n维随机变量
其协方差矩阵为
变量x1,x2,…,xp经过线性变换后得到新的综合变量Y1,Y2,…,Yp,即:

其中系数为常数向量。要求满足以下条件:

则称Y1为第一主成分,Y2为第二主成分,依此类推,Yp称为第p个主成分。这里 称𝑙𝑖𝑗为主成分的系数。
2.PCA的计算步骤

第一步不再赘述。
(2):计算样本相关系数矩阵:


(3): 求相关系数矩阵的特征值和相应的特征向量
- 求解R的特征方程:
- 得到R的m个特征值

- 求方差贡献率
达到预定值的主成分个数k
- 求前p个特征值对应的单位特征向量

- 以k个单位特征向量为系数进行线性变换,求出k个样本主成分

3.PCA的例题及代码实现(Python)
以地区农村居民人均可支配收入水平为例,需要对其进行一个综合排名。

以下为源代码(数据集也已上传):
import pandas as pd
Data=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')
X=Data.iloc[:,1:]
R=X.corr()
# 数据规范化处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X)
X=scaler.transform(X)
#主成分分析
from sklearn.decomposition import PCA
pca=PCA(n_components=0.95)
pca.fit(X)
Y=pca.transform(X)
#特征向量,特征值,贡献率
tzxl=pca.components_
tz=pca.explained_variance_
gxl=pca.explained_variance_ratio_
Y00=sum(X[0,:]*tzxl[0,:])
Y01=sum(X[1,:]*tzxl[0,:])
Y02=sum(X[2,:]*tzxl[0,:])
Y03=sum(X[3,:]*tzxl[0,:])
#综合排名
F=gxl[0]*Y[:,0]+gxl[1]*Y[:,1]+gxl[2]*Y[:,2] #综合得分=各个主成分*贡献率之和
dq=list(Data['地区'].values) #提取地区
Rs=pd.Series(F,index=dq) #以地区作为index,综合得分为值,构建序列
Rs=Rs.sort_values(ascending=False) #按综合得分降序进行排序
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)