前言:主成分分析是一种通过降维技术将多个变量化为少数几个主成分的方法,和逐步回归有相似之处。主成分分析适用于数据的线性降维,得到的主成分是由原来的变量标准化后线性组合而成的,只是主成分的个数比原来变量个数少。
参考书籍:《python数学建模算法与应用》 司守奎 孙玺菁 (强烈推荐!)
具体代码书上有写我就没有再敲出来
1、主成分分析
原则:主成分一般选取不超过6个,且累计贡献率只需要达到85%。
sklearn.decomposition模块的PCA函数实现了主成分分析,基本格式为:
f=PCA(n_components=None).fit(data)
n_components默认值为None,表示所有成分保留。n可以为int、float、str。
data只需要包含需要降维的变量数据,不需要因变量数据。
主成分回归python实现_to be a good girl的博客-CSDN博客_主成分回归代码
步骤:
1、数据标准化(去中心化)
x为原指标变量,u为均值,分母为标准差
求标准差时自由度设置为1,即ddof=1
2、计算相关系数矩阵:np.corrcoef(data) data为2D数组形式
3、构造并拟合函数f=PCA().fit(x’)
查看特征值:f.explained_variance_
查看各主成分贡献率:f.explained_variance_ratio_
提取各主成分系数,每一行是一个主成分的组成系数:f.components_
主成分系数可以相差一个负号,乘以-1后仍然为特征向量(主成分系数)
2、主成分回归分析
步骤:
1、进行主成分分析,得到主成分。
2、做主成分回归分析,得到由主成分组成的回归方程。
以主成分为变量,因变量数据不变进行回归分析。主成分的值由其系数求出*原数据得出。
3、恢复至原始的自变量,求出其他系数。(反标准化变换)
有时主成分回归方程比直接的回归方程具有更小的残差方差,更加的稳定。当直接线性回归的系数无法通过显著性检验时可以考虑主成分分析。
建模时步骤:
1、数据预处理(数据标准化),给出标准化公式
2、写出相关系数矩阵的计算公式(区别于聚类分析中的皮尔逊相关系数)
3、给出累计贡献率超过85%的主成分的特征向量
4、后续进行评价、回归等
3、利用主成分分析确定权重
k1_spss=md.components
j = 0
Weights = []
for j in range(len(k1_spss)):
for i in range(len(pca.explained_variance_)):
Weights_coefficient = np.sum(100 * (pca.explained_variance_ratio_[i]) * (k1_spss[i][j])) / np.sum(pca.explained_variance_ratio_)
j = j + 1
Weights.append(np.float(Weights_coefficient))
print('Weights',Weights)
# 权重归一化处理
Weights=pd.DataFrame(Weights)
Weights1 = preprocessing.MinMaxScaler().fit(Weights)
Weights2 = Weights1.transform(Weights)
print('Weights2',Weights2)
主成分分析法(Python实现) - 知乎 (zhihu.com)