目錄
1. 主成分分析概念:
?2. 主成分分析法步驟:
第一步:對所有特征進行中心化:去均值
第二步:求協(xié)方差矩陣C
第三步:求協(xié)方差矩陣C的特征值?編輯和相對應(yīng)的特征向量?編輯
第四步:將原始特征投影到選取的特征向量上,得到降維后的新K維特征
?3. 主成分分析法MATLAB實現(xiàn):
1. 主成分分析概念:
????????主成分分析算法(PCA)是最常用的線性降維方法,它的目標是通過某種線性投影,將高維的數(shù)據(jù)映射到低維的空間中,并期望在所投影的維度上數(shù)據(jù)的信息量最大(方差最大),以此使用較少的數(shù)據(jù)維度,同時保留住較多的原數(shù)據(jù)點的特性。一般來說,當研究的問題涉及到多變量且變量之間存在很強的相關(guān)性時,我們可考慮使用主成分分析的方法來對數(shù)據(jù)進行簡化。
降維具有的優(yōu)點:
- 使得數(shù)據(jù)集更易使用
- 降低算法的計算開銷
- 去除噪聲
- 使得結(jié)果容易理解
????????假設(shè)有n個樣本,p個指標,則可構(gòu)成n*p的樣本矩陣x:
?例如:此圖中有10個樣本,2個指標,可以構(gòu)成10*2的樣本矩陣
?2. 主成分分析法步驟:
第一步:對所有特征進行中心化:去均值
?? 求每一個特征的平均值(按列求取),然后對于所有的樣本,每一個特征都減去自身的均值。
?
第二步:求協(xié)方差矩陣C
??????? 求協(xié)方差矩陣
????????
第三步:求協(xié)方差矩陣C的特征值和相對應(yīng)的特征向量
??????? 求協(xié)方差矩陣C的特征值和相對應(yīng)的特征向量
????????特征值 λ 會有 N個,每一個 λ? 對應(yīng)一個特征向量 u,將特征值 λ 按照從大到小的順序排序,選擇最大的前k個,并將其相對應(yīng)的k個特征向量拿出來,我們會得到一組 { ( λ 1 , u 1 ) , ( λ 2 , u 2 ) , . . . , ( λ k , u k ) } 。本例中原始特征只有2維,我在選取 λ 的時候,令 k = 1,選擇最大的 λ 1 和 其 對 應(yīng) 的 u 1 和其對應(yīng)的u1?。
第四步:將原始特征投影到選取的特征向量上,得到降維后的新K維特征
選取最大的前k個特征值和相對應(yīng)的特征向量,并進行投影的過程,就是降維的過程。對于每一個樣本 ,原來的特征是 ,投影之后的新特征是? ,新特征的計算公式如下:
?主成分分析法的原理分析在此處不涉及,感興趣的友友可以看這一篇文章:
PCA:詳細解釋主成分分析_lanyuelvyun的博客-CSDN博客_pca
?3. 主成分分析法MATLAB實現(xiàn):
data1部分原數(shù)據(jù):文章來源:http://www.zghlxwxcb.cn/news/detail-531107.html
省份 | 食品 | 衣著 | 家庭設(shè)備 | 醫(yī)療 | 交通 | 娛樂 | 居住 | 雜項 |
北京 | 2959.19 | 730.79 | 749.41 | 513.34 | 467.87 | 1141.82 | 478.42 | 457.64 |
天津 | 2459.77 | 495.47 | 697.33 | 302.87 | 284.19 | 735.97 | 570.84 | 305.08 |
河北 | 1495.63 | 515.9 | 362.37 | 285.32 | 272.95 | 540.58 | 364.91 | 188.63 |
山西 | 1406.33 | 477.77 | 290.15 | 208.57 | 201.5 | 414.72 | 281.84 | 212.1 |
內(nèi)蒙古 | 1303.97 | 524.29 | 254.83 | 192.17 | 249.81 | 463.09 | 287.87 | 192.96 |
遼寧 | 1730.84 | 553.9 | 246.91 | 279.81 | 239.18 | 445.2 | 330.24 | 163.86 |
吉林 | 1561.86 | 492.42 | 200.49 | 218.36 | 220.69 | 459.62 | 360.48 | 147.76 |
黑龍江 | 1410.11 | 510.71 | 211.88 | 277.11 | 224.65 | 376.82 | 317.61 | 152.85 |
上海 | 3712.31 | 550.74 | 893.37 | 346.93 | 527 | 1034.98 | 720.33 | 462.03 |
江蘇 | 2207.58 | 449.37 | 572.4 | 211.92 | 302.09 | 585.23 | 429.77 | 252.54 |
浙江 | 2629.16 | 557.32 | 689.73 | 435.69 | 514.66 | 795.87 | 575.76 | 323.36 |
安徽 | 1844.78 | 430.29 | 271.28 | 126.33 | 250.56 | 513.18 | 314 | 151.39 |
福建 | 2709.46 | 428.11 | 334.12 | 160.77 | 405.14 | 461.67 | 535.13 | 232.29 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
clear;clc
load data1.mat % 主成分聚類
[n,p] = size(x); % n是樣本個數(shù),p是指標個數(shù)
R = corrcoef(x);
disp('樣本相關(guān)系數(shù)矩陣為:')
disp(R)
[V,D] = eig(R); % V 特征向量矩陣 D 特征值構(gòu)成的對角矩陣
%%計算主成分貢獻率和累計貢獻率
lambda = diag(D); % diag函數(shù)用于得到一個矩陣的主對角線元素值(返回的是列向量)
lambda = lambda(end:-1:1); % 因為lambda向量是從小大到排序的,我們將其調(diào)個頭
contribution_rate = lambda / sum(lambda); % 計算貢獻率
cum_contribution_rate = cumsum(lambda)/ sum(lambda); % 計算累計貢獻率 cumsum是求累加值的函數(shù)
disp('特征值為:')
disp(lambda') % 轉(zhuǎn)置為行向量,方便展示
disp('貢獻率為:')
disp(contribution_rate')
disp('累計貢獻率為:')
disp(cum_contribution_rate')
disp('與特征值對應(yīng)的特征向量矩陣為:')
% 注意:這里的特征向量要和特征值一一對應(yīng),之前特征值相當于顛倒過來了,因此特征向量的各列需要顛倒過來
% rot90函數(shù)可以使一個矩陣逆時針旋轉(zhuǎn)90度,然后再轉(zhuǎn)置,就可以實現(xiàn)將矩陣的列顛倒的效果
V=rot90(V)';
disp(V)
%% 計算我們所需要的主成分的值
m =input('請輸入需要保存的主成分的個數(shù): ');
F = zeros(n,m); %初始化保存主成分的矩陣(每一列是一個主成分)
for i = 1:m
ai = V(:,i)'; % 將第i個特征向量取出,并轉(zhuǎn)置為行向量
Ai = repmat(ai,n,1); % 將這個行向量重復n次,構(gòu)成一個n*p的矩陣
F(:, i) = sum(Ai .* X, 2); % 注意,對標準化的數(shù)據(jù)求了權(quán)重后要計算每一行的和
end
參考:清風數(shù)學建模文章來源地址http://www.zghlxwxcb.cn/news/detail-531107.html
到了這里,關(guān)于主成分分析法(PCA)及MATLAB實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!