作业一 :PAC降维练习
| 博客班级 | 班级链接 |
|---|---|
| 作业要求 | 作业链接 |
| 学号 | 181613146 |
【题目】
- 现有我国大陆30个省、直辖市、自治区的经济发展状况数据集如表所示,包括8项经济指标:
- 国民生产总值(A1);
- 居民消费水平(A2);
- 固定资产投资(A3);
- 职工平均工资(A4);
- 货物周转量(A5);
- 居民消费指数(A6);
- 商品零售价格指数(A7);
- 工业总产值(A8)。
- 试用基本PCA方法将这8项经济指标融合成3项综合指标。
【要求】
-
写出PCA完成降维的主要步骤;
-
详细写出题目降维的计算过程;
-
请大家在博客中直接完成或在作业本上完成后拍照上传。
| A1 | A2 | A3 | A4 | A5 | A6 | A7 | A8 | |
|---|---|---|---|---|---|---|---|---|
| 北京 | 1394.89 | 2505 | 519.01 | 8144 | 373.9 | 117.3 | 112.6 | 843.43 |
| 天津 | 920.11 | 2720 | 345.46 | 6501 | 342.8 | 115.2 | 110.6 | 582.51 |
| 河北 | 2849.52 | 1258 | 704.87 | 4839 | 2033.3 | 115.2 | 115.8 | 1234.85 |
| 山西 | 1092.48 | 1250 | 290.9 | 4721 | 717.3 | 116.9 | 115.6 | 697.25 |
| 内蒙古 | 832.88 | 1387 | 250.23 | 4134 | 781.7 | 117.5 | 116.8 | 419.39 |
| 辽宁 | 2793.37 | 2397 | 387.99 | 4911 | 1371.1 | 116.1 | 114 | 1840.55 |
| 吉林 | 1129.2 | 1872 | 320.45 | 4430 | 497.4 | 115.2 | 114.2 | 762.47 |
| 黑龙江 | 2014.53 | 2334 | 435.73 | 4145 | 824.8 | 116.1 | 114.3 | 1240.37 |
| 上海 | 2462.57 | 5343 | 996.48 | 9279 | 207.4 | 118.7 | 113 | 1642.95 |
| 江苏 | 5155.25 | 1926 | 1434.95 | 5934 | 1025.5 | 115.8 | 114.3 | 2026.64 |
| 浙江 | 3524.79 | 2249 | 1006.39 | 6619 | 754.4 | 116.6 | 113.5 | 916.59 |
| 安徽 | 2003.58 | 1254 | 474 | 4609 | 908.3 | 114.8 | 112.7 | 824.14 |
| 福建 | 2160.52 | 2320 | 553.97 | 5857 | 609.3 | 115.2 | 114.4 | 433.67 |
| 江西 | 1205.1 | 1182 | 282.84 | 4211 | 411.7 | 116.9 | 115.9 | 571.84 |
| 山东 | 5002.34 | 1527 | 1229.55 | 5145 | 1196.6 | 117.6 | 114.2 | 2207.69 |
| 河南 | 3002.74 | 1034 | 670.35 | 4344 | 1574.4 | 116.5 | 114.9 | 1367.92 |
| 湖北 | 2391.42 | 1527 | 571.68 | 4685 | 849 | 120 | 116.6 | 1220.72 |
| 湖南 | 2195.7 | 1408 | 422.61 | 4797 | 1011.8 | 119 | 115.5 | 843.83 |
| 广东 | 5381.72 | 2699 | 1639.83 | 8250 | 656.5 | 114 | 111.6 | 1396.35 |
| 广西 | 1606.15 | 1314 | 382.59 | 5150 | 556 | 118.4 | 116.4 | 554.97 |
| 海南 | 364.17 | 1814 | 198.35 | 5340 | 232.1 | 113.5 | 111.3 | 64.33 |
| 四川 | 3534 | 1261 | 822.54 | 4645 | 902.3 | 118.5 | 117 | 1431.81 |
| 贵州 | 630.07 | 942 | 150.84 | 4475 | 301.1 | 121.4 | 117.2 | 324.72 |
| 云南 | 1206.68 | 1261 | 334 | 5149 | 310.4 | 121.3 | 118.1 | 716.65 |
| 西藏 | 55.98 | 1110 | 17.87 | 7382 | 4.2 | 117.3 | 114.9 | 5.57 |
| 陕西 | 1000.03 | 1208 | 300.27 | 4396 | 500.9 | 119 | 117 | 600.98 |
| 甘肃 | 553.35 | 1007 | 114.81 | 5493 | 507 | 119.8 | 116.5 | 468.79 |
| 青海 | 165.31 | 1445 | 47.76 | 5753 | 61.6 | 118 | 116.3 | 105.8 |
| 宁夏 | 169.75 | 1355 | 61.98 | 5079 | 121.8 | 117.1 | 115.3 | 114.4 |
| 新疆 | 834.57 | 1469 | 376.95 | 5348 | 339 | 119.7 | 116.7 | 428.76 |
【解答】
1. 读取数据
import pandas as pd
import numpy as np
data = pd.read_csv('./data.csv', header=None)
data

2.去中心化: 每个数据减去对应每列的平均值
sample, feature = data.shape
data = data - np.mean(data)
data

3. 计算协方差矩阵: 直接调用方法即可
data = np.mat(data)
data = data.astype('float16')
# 计算协方差矩阵
covX = np.cov(data.T)
covX

4. 求特征值和特征向量:调用专有的方法
eig_val, eig_vec = np.linalg.eig(covX)
eig_pairs = [(np.abs(eig_val[i]), eig_vec[:, i]) for i in range(feature)]
index = np.argsort(-eig_val)
# 对特征值从大到小排序,
np.argsort(eig_val)
eig_val

5. 降维
k = 3
selectVec = np.matrix(eig_vec.T[index[:k]])
finalData = data * selectVec.T # (30, 8) * (8, 3) = (30, 3)
finalData.shape
finalData


浙公网安备 33010602011771号