机器学习基本模型与算法在线实验闯关
·
第9关:基于主成分分析的综合评价
任务描述
本关任务:读取“农村居民人均可支配收入来源2016.xlsx”数据表,其中数据来源于2016年《中国统计年鉴》,对表中给出的我国内陆31个地区做主成分分析,并基于主成分进行综合排名,输出排名结果。
相关知识
为了完成本关任务,你需要掌握: (1)对原始数据进行标准化处理。 (2)计算样本相关系数矩阵。 (3)求相关系数矩阵的特征值和相应的特征向量。 (4)选择重要的主成分,并写出主成分表达式。 (5)计算主成分得分。 (6)依据主成分得分的数据,进一步从事统计分析。
相关系数矩阵
多个随机变量的方差可以通过其协方差矩阵来考察。由于多个变量的单位不一样,为了消除量纲,通常需要对变量数据做规范化处理,规范化变量数据的协方差矩阵,即是相关系数矩阵。本例的相关系数矩阵计算示例代码如下:
import pandas as pdData=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')X=Data.iloc[:,1:]R=X.corr()
输出:``
数据规范化处理
对数据集X进行拟合训练,返回规范化后的数据X。 示例如下:
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaler.fit(X)X=scaler.transform(X)
输出:``
主成分分析
对标准化后的数据X做主成分分析,基本步骤如下
① 导入主成分分析模块PCA。from sklearn.decomposition import PCA② 利用PCA创建主成分分析对象pca。pca=PCA(n_components=0.95) #这里设置累计贡献率为95%以上。③ 调用pca对象中的fit()方法,对待分析的数据进行拟合训练。pca.fit(X)④ 调用pca对象中的transform()方法,返回提取的主成分。Y=pca.transform(X)⑤ 通过pca对象中的components_属性、explained_variance_属性、explained_variance_ ratio_属性,返回主成分分析中对应的特征向量、特征值和主成分方差百分比(贡献率),比如:tzxl=pca.components_tz=pca.explained_variance_gxl=pca.explained_variance_ratio_ #返回主成分方差百分比(贡献率)⑥ 主成分表达式及验证。可以通过程序验证第1个主成分前面的4个分量的值。Y00=sum(X[0,:]*tzxl[0,:])Y01=sum(X[1,:]*tzxl[0,:])Y02=sum(X[2,:]*tzxl[0,:])Y03=sum(X[3,:]*tzxl[0,:])。
主成分分析的示例代码如下:
from sklearn.decomposition import PCApca=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,示例代码如下:
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) #按综合得分降序进行排序
编程要求
根据提示,在右侧编辑器补充代码,对表中给出的我国内陆31个地区做主成分分析,并基于主成分进行综合排名
测试说明
平台会对你编写的代码进行测试:
开始你的任务吧,祝你成功!
任务代码
#********** Begin **********#
#读取“农村居民人均可支配收入来源2016.xlsx”数据表,其中数据来源于2016年《中国统计年鉴》,
#首先,对指标数据进行均值方差标准化处理
#其次,其次对标准化处理后的指标数据作主成分分析,要求提前累计贡献率在95%以上
#再次,基于提取的主成分计算综合得分,综合得分=提取的各主成分与对应贡献率之和
#最后,基于综合得分获得各地区的排名,得分按从高到低排序,用一个序列Rs来表示,其中index为地区名称,值为综合得分
def return_values():
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
Data=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')
X=Data.iloc[:,1:]
R=X.corr()
scaler = StandardScaler()
scaler.fit(X)
X=scaler.transform(X)
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_ #返回主成分方差百分比(贡献率)
for i in range(0,4):
Y[i]=sum(X[i,:]*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) #按综合得分降序进行排序
return Rs
#********** End **********#
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)