1、數學推導
根據上講的思想,我們可以用下圖來進行數學上的推導.
2、PCA的步驟
1)對原始數據進行標准化處理:對該指標變量進行標准化,
2)計算相關系數矩陣(協方差矩陣)
3)計算相關系數矩陣的特征值和特征向量,得到新的指標標量。
4)計算特征值的信息貢獻率和累積貢獻率,按一定規則選擇主成分
5)以主成分的貢獻率為權重,構建主成分綜合評價模型,計算綜合評價值和排名
3、應用實例——我國各地區普通高等教育發展綜合評價
案例背景不再詳述,在此我們選取10個指標來評價30個省市他們的普通高等教育發展。
數據:
1)將上述數據標准化,計算協方差矩陣
2)計算協方差矩陣的特征值和特征值貢獻率
3)根據特征值貢獻率選取前四個特征根對應的特征向量
由此可得四個主成分分別為:
4)分別以四個主成分的貢獻率為權重,計算主成分綜合得分:
計算的matlab程序:
1 gj=[ 2 5.96 310 461 1557 931 319 44.36 2615 2.2 13631; 3 3.39 234 308 1035 498 161 35.02 3052 0.9 12665; 4 2.35 157 229 713 295 109 38.4 3031 0.86 9385; 5 1.35 81 111 364 50 58 30.45 2699 1.22 7881; 6 1.5 88 128 421 144 58 34.3 2808 0.54 7733; 7 1.67 86 120 370 153 58 33.53 2215 0.76 7480; 8 1.17 63 93 296 117 44 35.22 2528 0.58 8570; 9 1.05 67 92 297 115 43 32.89 2835 0.66 7262; 10 0.95 64 94 287 102 39 31.54 3008 0.39 7786; 11 0.69 39 71 205 61 24 34.5 2988 0.37 11355; 12 0.56 40 57 177 61 23 32.62 3149 0.55 7693; 13 0.57 58 64 181 57 22 32.95 3202 0.28 6805; 14 0.71 42 62 190 66 26 28.13 2657 0.73 7282; 15 0.74 42 61 194 61 24 33.06 2618 0.47 6477; 16 0.86 42 71 204 66 26 29.94 2363 0.25 7704; 17 1.29 47 73 265 114 46 25.93 2060 0.37 5719; 18 1.04 53 71 218 63 26 29.01 2099 0.29 7106; 19 0.85 53 65 218 76 30 25.63 2555 0.43 5580; 20 0.81 43 66 188 61 23 29.82 2313 0.31 5704; 21 0.59 35 47 146 46 20 32.83 2488 0.33 5628; 22 0.66 36 40 130 44 19 28.55 1974 0.48 9106; 23 0.77 43 63 194 67 23 28.81 2515 0.34 4085; 24 0.7 33 51 165 47 18 27.34 2344 0.28 7928; 25 0.84 43 48 171 65 29 27.65 2032 0.32 5581; 26 1.69 26 45 137 75 33 12.1 810 1 14199; 27 0.55 32 46 130 44 17 28.41 2341 0.3 5714; 28 0.6 28 43 129 39 17 31.93 2146 0.24 5139; 29 1.39 48 62 208 77 34 22.7 1500 0.42 5377; 30 0.64 23 32 93 37 16 28.12 1469 0.34 5415; 31 1.48 38 46 151 63 30 17.87 1024 0.38 7368; 32 ];%原始數據 33 gj=zscore(gj); %數據標准化 34 r=corrcoef(gj); %計算相關系數矩陣 35 [e,lamda]=eig(r); %求相關系數矩陣的特征值和特征向量 36 lamda=sort(sum(lamda),'descend');%將特征值降序排列 37 attribute=lamda./sum(lamda); %各特征值的貢獻率 38 cum_attribute=cumsum(attribute); %累計的貢獻率 39 num=4; %選取的主成分的個數 40 df=gj*e(:,10:-1:11-num) %新指標下的樣本值 41 score=attribute(1:num)*df'; %計算綜合得分 42 [stf,ind]=sort(score,'descend'); %把得分按照從高到低的次序排列 43 stf=stf', ind=ind'