机器学习--基于主成分分析(PCA)的各地区综合排名

一 背景

     现在我们手头上有一份数据(2016年中国农村居民可支配收入来源情况表),数据的大概样子如下:

      现在我们想要根据这份数据,做个综合排名,看下哪个地区的农村居民的可支配输入情况较好。(下面为了表达方便,我们把工资性收入,经营净收入,财产净收入和转移净收入简称为x1,x2,x3,x4)

      最直观的想法是直接把每项内容直接相加再按数值大小从大到小排名。比如北京对应的值=16637.5+2061.9+1350.1+2260

     但,问题来了。工资性收入和经营净收入或财产净收入后面会不会有一个共同的影响因素呢?如果有,那么我们按上述方式简单相加就不合理了,我们把这共同影响因素算了2次。

     所以我们首先要看看这4个收入分项内容背后知否有共同的影响因素。即各分项内容是否存在着线性相关。比如:工资性收入和经营净收入间,工资性收入在表中的数据越大,经营净收入也越大。那么我们就可以认为工资性收入和经营净收入间存在着线性正方向,存在着线性关系,背后存在着共同的影响因素。

     如果发现这些分项之间存在着线性相关怎么办呢?我们就把x1,x2,x3,x4用一些不存在线性相关的因素(比如:y1,y2,y3,y4)来表达他们,但一定要保持前后的特征不变。

     方差是我们机器学习里面经常用于表达特征的一种方式。那么我们就可以考虑在保持方差不变,或者变化很小的情况下用y1,y2,y3,y4来表达x1,x2,x3,x4比如

y1=a11*x1+a12*x2+a13*x3+a14*x4        //假如y1能保留原来80%特征

y2=a21*x1+a22*x2+a23*x3+a24*x4        //假如y1能保留原来10%特征

y3=a31*x1+a32*x2+a33*x3+a34*x4        //假如y1能保留原来5%特征

y4=a41*x1+a42*x2+a43*x3+a44*x4        //假如y1能保留原来5%特征

    如果项目需求只要求能保留95%特征就行,那么我们只要用y1,y2,y3来代替原来的x1,x2,x3,x4就可以了。

    那如果有了y1,y2,y3后如何去计算每个地区综合排名呢?综合排名值=y1+y2+y3 吗?应该不对,因为他们重要程度不一样,很显然y1保留的特征更多,应该更重要。所以我们各个分区的综合排名值=y1×80%+y2×10%+y3×5%   (这些保留百分比我们给他取个名字叫“贡献率”)

二 环境准备

     我们这里需要的准备的环境就只需要装个anocanda就可以了。因为在anocanda安装完成以后,就包含了我们需要的numpy库,pandas库,机器学习scikit-learn库及编辑程序需要用到的spyder及编译用的python

三  编程

在spyder编辑工具中首先把数据放到项目目录中,接下来只要编写下面程序就好了

# 数据获取
import pandas as pd
Data=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')
X=Data.iloc[:,1:]
# 数据规范化处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X) 
X=scaler.transform(X)  
#对标准化后的数据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_ 
#综合排名(F是最总的每个地区的综合值)
#综合得分=各个主成分*贡献率之和,Y[:,0]表达的是y1分项对应北京上海等全部地区的值
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) #按综合得分降序进行排序

四 最终结果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘同敏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值