Python综合评价模型(四)主成分分析法

主成分分析法是通过降维把多个评价指标转化为少数几个综合指标从而对评价对象进行综合评价的方法

提取的主成分的个数一般不超过5-6个

提取的主成分的累积贡献率一般不低于80-85%

第一步 导入第三方库和案例数据

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
#按指定路径导入数据,以“地区”为索引(文件路径需按实际情况更换)
data = pd.read_excel(r'C:/Users/AROUS/Desktop/综合评价数据.xlsx', index_col = '地区')
data

第二步 标准化数据

#定义z-score标准化函数
def z_score(x): 
    return (x - x.mean()) / x.std()
#使用z-score标准化函数标准化数据
data_z = data.apply(z_score, 0)
data_z

第三步 训练模型

pca = PCA().fit(data_z)

第四步 计算主成分个数

方式1 按特征值计算主成分个数
#输出特征值
pca.explained_variance_
#计算特征值大于1的主成分个数
n_components = (pca.explained_variance_ > 1.0).sum()
n_components
方式2 按累积贡献率计算主成分个数
#输出方差贡献率
pca.explained_variance_ratio_
#输出累积方差贡献率
pca.explained_variance_ratio_.cumsum()
#计算累积方差贡献率大于0.8的主成分个数
n_components = np.argmax(pca.explained_variance_ratio_.cumsum() >= 0.8) + 1
n_components

第五步 计算主成分系数

#n_components参数用于设置需保留的主成分个数,默认为None(即保留全部主成分),案例保留2个主成分
pca = PCA(n_components = n_components).fit(data_z)
pca.components_

第六步 计算主成分得分

F1=0.3967×生产总值+0.2874×从业人员+0.3074×固定资产+0.4011×利用外资+0.3789×进出口额+0.3864×新品出口+0.3846×市场占有+0.2527×对外依存

F2=-0.2064×生产总值-0.5209×从业人员-0.4819×固定资产-0.0094×利用外资+0.3104×进出口额+0.1216×新品出口+0.2104×市场占有+0.5461×对外依存

col_name = ['F{}'.format(i+1) for i in range(n_components)]
pca_transform = pd.DataFrame(pca.transform(data_z), columns = col_name, index = data.index)
data = pd.concat([data, pca_transform], axis=1)
data 

第七步 计算综合得分

#使用方差贡献率作为主成分权重
w = pca.explained_variance_ratio_
w
data['主成分分析法得分'] = data.iloc[:, -2:].dot(w)
data

第八步 导出综合评价结果

data.to_excel('主成分分析法综合评价结果.xlsx', index = True)

下期预告: P y t h o n 综合评价模型(五)德尔菲法 \textcolor{RoyalBlue}{下期预告 : Python综合评价模型(五)德尔菲法} 下期预告:Python综合评价模型(五)德尔菲法

关注公众号“ T r i H u b 数研社”发送“ 230305 ”获取案例数据和代码 \textcolor{RoyalBlue}{关注公众号“TriHub数研社”发送“230305”获取案例数据和代码} 关注公众号TriHub数研社发送“230305”获取案例数据和代码

主成分分析(PCA)的目的是将高维数据降维到低维,同时尽可能地保留原本的信息。在PCA中,特征向量表示了数据的主要方向,而特征值表示了数据在这些方向上的重要性。 对于给定的数据集X,PCA的步骤如下: 1. 对数据集进行中心化,即将每一维的数据减去该维数据的均值,使得数据集的均值为0。 2. 计算协方差矩阵C,其元素为:Cij = cov(Xi, Xj) = E[(Xi - E[Xi])(Xj - E[Xj])],其中E[·]表示期望值。 3. 对协方差矩阵进行特征值分解,得到特征向量和特征值。 4. 将特征值从大到小排序,选择前k个特征值对应的特征向量作为新的基,其中k为降维后的维数。 5. 利用新的基将数据映射到新的空间中,即Y = XW,其中Y为降维后的数据,W为特征向量矩阵。 6. 计算每个特征向量的权重,即每个特征向量在新的空间中所占的比例。 以下是Python实现PCA并求特征向量的权重的示例代码: ```python import numpy as np def PCA(X, k): # 中心化 X = X - np.mean(X, axis=0) # 计算协方差矩阵 cov = np.cov(X.T) # 特征值分解 eig_vals, eig_vecs = np.linalg.eig(cov) # 特征值排序 eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:,i]) for i in range(len(eig_vals))] eig_pairs.sort(reverse=True) # 选择前k个特征向量 w = np.hstack((eig_pairs[i][1].reshape(X.shape[1],1)) for i in range(k)) # 计算特征向量的权重 weights = np.sum(w, axis=1) return weights # 示例数据 X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 求特征向量的权重 weights = PCA(X, 2) print(weights) ``` 输出结果为: ``` [0.57735027 0.57735027 0.57735027] ``` 其中,weights表示每个特征向量在新的空间中所占的比例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值