1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python主成分分析法

python主成分分析法

时间:2019-08-27 02:42:11

相关推荐

python主成分分析法

数据集如下:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport mathpd.set_option('display.unicode.ambiguous_as_wide', True)pd.set_option('display.unicode.east_asian_width', True)plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel("xyh.xlsx")print(df)n = len(df.columns)R = df.corr()print('相关系数矩阵为:')print(R)w, v = np.linalg.eig(R)# argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y。# [1,4,3,-1,6,9]# x[3]=-1最小,所以y[0]=3,x[5]=9最大,所以y[5]=5。sorted_indices = np.argsort(w)topk_evecs = v[:, sorted_indices[::-1]]sorted_indices = sorted_indices[::-1]w = w[sorted_indices]print('特征值为{}\n特征向量为{}'.format(w, topk_evecs))S = sum(w)print("每个维度的方差贡献率")print(w / S)print("使用R得到的累积方差贡献率为:")print(np.cumsum(w) / S)print("-" * 100)x = [i + 1 for i in range(n)]print(x)print(w)plt.plot(x, w)plt.title("碎石图")plt.xlabel("主成分个数")plt.ylabel("主成分特征值")plt.grid()plt.show()# 可以得到要划分为2个主成分# 计算因子载荷矩阵和贡献率# 一般情况需要通过碎石图判断PC1 = pd.DataFrame(topk_evecs[:, 0].reshape(1, n))PC2 = pd.DataFrame(topk_evecs[:, 1].reshape(1, n))PC1 = PC1 * math.sqrt(w[0])PC2 = PC2 * math.sqrt(w[1])pc = pd.concat([PC1, PC2])pc.columns = df.columnspc.index = [i + 1 for i in range(len(pc))]Y = []for i in range(len(pc.columns)):Y.append(math.pow(pc.iloc[0, i], 2) + math.pow(pc.iloc[1, i], 2))Y = np.array(Y).reshape(1, n)Y = pd.DataFrame(Y)Y.index = ["贡献率"]Y.columns = pc.columnspc = pd.concat([pc, Y])print('因子载荷矩阵和贡献率如下:')print(pc)# 由此可以看出主成分1主要反映学生的偏科状况,主成分2主要反映学生的总体成绩

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。