北太天元學(xué)習(xí)41-主成分分析(PCA)
說(shuō)到主成分,沒(méi)有學(xué)過(guò)統(tǒng)計(jì)的同志也會(huì)覺(jué)得是明白的,就是主要 成分,也就是某個(gè)東西有很多種成分組成,主要的成分就是主 成分。 例如, 常見(jiàn)的感冒藥的主要成分是對(duì)乙酰氨基酚。 說(shuō)到主成分分析,不由得讓我想到防制藥,是不是指的是把一個(gè) 藥品的主成分給分析清楚再仿制。不管日常生活中如何使用,我們下面 所說(shuō)的主成分分析PCA(principal component analysis)是統(tǒng)計(jì)學(xué)的一個(gè)術(shù)語(yǔ),是機(jī)器學(xué)習(xí)的一種非常重要的方法。
機(jī)器學(xué)習(xí)方法按照有無(wú)標(biāo)注(或者有無(wú)標(biāo)簽)可以分成監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)。 下面圖中的監(jiān)督學(xué)習(xí),對(duì)輸入的數(shù)據(jù)標(biāo)注了是美女,然后選用某種模型,然后學(xué)習(xí)特征,對(duì)其它的圖片就可以預(yù)測(cè)是不是一個(gè)美女。

監(jiān)督學(xué)習(xí)
而無(wú)監(jiān)督學(xué)習(xí),輸入的數(shù)據(jù)是圖片,沒(méi)有任何的標(biāo)注(或者標(biāo)簽),然后尋用某種模型,對(duì)輸入的數(shù)據(jù)自動(dòng)的進(jìn)行分類。

主成分分析PCA是一種流行的無(wú)監(jiān)督算法,已在數(shù)據(jù)分析、數(shù)據(jù)壓縮、去噪、降維等多個(gè)應(yīng)用中使用。主成分分析可以幫助您減少或消除數(shù)據(jù)中的線性相關(guān)的部分,也就是說(shuō)它是一種在數(shù)據(jù)分析中常用的降維技術(shù)。PCA通過(guò)線性變換將原始數(shù)據(jù)變換為一組各維度線性無(wú)關(guān)的表示,能夠揭示出數(shù)據(jù)的主要特征。 有時(shí)候,主成分分析甚至可以在沒(méi)有任何數(shù)據(jù)丟失的情況下降低維度。 主成分分析可以降維,從而有助于我們實(shí)現(xiàn)高維數(shù)據(jù)的可視化(可以在二維或三維維度上可視化)。
PCA的核心思想是將n維特征映射到k維(k<n),這k維是全新的正交特征也被稱為主成分,是在原有n維特征的基礎(chǔ)上重新構(gòu)造出來(lái)的k維特征。
PCA的主要步驟如下:
?? 1. 將原始數(shù)據(jù)標(biāo)準(zhǔn)化,即減去均值并除以標(biāo)準(zhǔn)差,以消除不同特征的量綱影響。
?? 2. 計(jì)算樣本的協(xié)方差矩陣。
??? 3. 計(jì)算協(xié)方差矩陣的特征值和特征向量。
??? 4. 將特征值從大到小排序,選擇前k個(gè)最大的特征值對(duì)應(yīng)的特征向量。
??? 5. 用這k個(gè)特征向量張成的子空間即為降維后的空間。
以下是一個(gè)簡(jiǎn)單的例子,說(shuō)明如何使用PCA對(duì)數(shù)據(jù)進(jìn)行處理,并給出相應(yīng)的北太天元代碼。
假設(shè)我們有一個(gè)包含多個(gè)變量的數(shù)據(jù)集,每個(gè)變量代表一個(gè)特征。我們的目標(biāo)是減少數(shù)據(jù)集的維度,同時(shí)盡可能保留原始數(shù)據(jù)的主要特征。
??? 數(shù)據(jù)準(zhǔn)備
首先,我們創(chuàng)建一個(gè)包含多個(gè)變量(特征)的數(shù)據(jù)集。為了簡(jiǎn)化示例,我們只使用二維數(shù)據(jù)集。
北太天元代碼
% 創(chuàng)建二維數(shù)據(jù)集
data = rand(100, 2);
??? 數(shù)據(jù)標(biāo)準(zhǔn)化
在進(jìn)行PCA之前,我們需要對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化的目的是將所有特征的平均值調(diào)整為0,并將標(biāo)準(zhǔn)偏差調(diào)整為1。這在PCA中非常重要,因?yàn)镻CA對(duì)特征的尺度敏感。
%北太天元代碼
% 數(shù)據(jù)標(biāo)準(zhǔn)化
m均值 = mean(data);
std_標(biāo)準(zhǔn)差 = std(data);
data_std = (data - m均值) ./ std_標(biāo)準(zhǔn)差;
??? 計(jì)算協(xié)方差矩陣
PCA通過(guò)計(jì)算數(shù)據(jù)協(xié)方差矩陣來(lái)找到數(shù)據(jù)的主要特征。協(xié)方差矩陣衡量了各個(gè)特征之間的相關(guān)性。
北太天元代碼
% 計(jì)算協(xié)方差矩陣
cov_matrix = cov(data_std);
??? 計(jì)算協(xié)方差矩陣的特征向量和特征值
PCA通過(guò)將協(xié)方差矩陣分解為特征向量和特征值來(lái)找到數(shù)據(jù)的主要特征。特征向量代表了數(shù)據(jù)的主要方向(即主成分),而特征值代表了這些方向的重要性。
北太天元代碼
% 計(jì)算協(xié)方差矩陣的特征向量和特征值
[V, D] = eig(cov_matrix);
??? 選擇主成分
根據(jù)特征值的大小,選擇前k個(gè)最大的特征值對(duì)應(yīng)的特征向量作為主成分。這里,k是我們要保留的維度數(shù)。
北太天元代碼
% 選擇前k個(gè)主成分
k = 1; % 保留一個(gè)維度
V_k = V(:, 1:k);
??? 將數(shù)據(jù)投影到主成分上
最后,我們將數(shù)據(jù)投影到選定的主成分(即新的特征向量)上,得到降維后的數(shù)據(jù)。
北太天元代碼
% 將數(shù)據(jù)投影到主成分上
projected_data = data_std * V_k;
完整的北太天元代碼如下:
%北太天元代碼
% 創(chuàng)建二維數(shù)據(jù)集
data = rand(100, 2);
% 數(shù)據(jù)標(biāo)準(zhǔn)化
m均值 = mean(data);
std_標(biāo)準(zhǔn)差 = std(data);
data_std = (data - m均值) ./ std_標(biāo)準(zhǔn)差;
% 計(jì)算協(xié)方差矩陣
cov_matrix = cov(data_std);
% 計(jì)算協(xié)方差矩陣的特征向量和特征值
[V, D] = eig(cov_matrix);
% 選擇前k個(gè)主成分
k = 1; % 保留一個(gè)維度
V_k = V(:, 1:k);
% 將數(shù)據(jù)投影到主成分上
projected_data = data_std * V_k;
?? ??? ?