當前位置:首頁 » 操作系統 » pca的源碼

pca的源碼

發布時間: 2024-06-12 06:48:46

Ⅰ PCA涓繪垚鍒嗗垎鏋愬浘鍍忔暟鎹闄嶇淮浠g爜奼傛暀

鑾峰彇n琛宮鍒楀師濮嬫暟鎹錛屽啓鎴恘*m鐨勭煩闃靛艦寮忥紱
鏁版嵁涓蹇冨寲銆傚嵆鎶婃瘡涓灞炴х殑鍧囧煎勭悊璁句負0錛堜笅闈㈡湪緹婂皢緇欏嚭鑷宸辯紪鍐欑殑婧愪唬鐮侊紝鏈ㄧ緤鐨勬暟鎹鐢ㄥ垪浠h〃灞炴э紝鍦ㄨユラや腑錛屽氨鎶婃瘡鍒楃殑鍧囧奸兘璁劇疆涓0錛夈
鏍規嵁涓蹇冨寲鍚庣殑鐭╅樀奼傚崗鏂瑰樊鐭╅樀銆傚崗鏂瑰樊鏈変笁縐嶅礆紝0琛ㄧず灞炴т箣闂寸浉浜掔嫭絝嬶紝娌℃湁褰卞搷錛涙e艱〃紺哄睘鎬ф槸姝g浉鍏崇殑鍏崇郴錛岃嫢灞炴A鍜屽睘鎬B鏄姝g浉鍏沖叧緋伙紝鍒橝澧炲姞B涔熷炲姞錛孉鍑忓皬B涔熷噺灝忥紱璐熷艱〃紺哄睘鎬ф槸璐熺浉鍏崇殑鍏崇郴錛岃嫢灞炴C鍜屽睘鎬D鏄璐熺浉鍏沖叧緋伙紝鍒機澧炲姞D鍑忓皬錛孋鍑忓皬D澧炲姞銆傛墍浠ワ紝鍗忔柟宸鐭╅樀涔熷彲浠ョ悊瑙d負鐩稿叧緋繪暟鐭╅樀錛岃〃紺哄睘鎬ч棿鐨勭浉鍏崇▼搴︺
鏍規嵁鍗忔柟宸鐭╅樀奼傜壒寰佸肩煩闃點傜壒寰佸肩煩闃靛彧鏈夊硅掔嚎涓婄殑鍏冪礌鏈夊礆紝涓婁笁瑙掑拰涓嬩笁瑙掑厓緔犻兘涓0.
鏍規嵁鐗瑰緛鍊肩煩闃墊眰瀵瑰簲鐨勭壒寰佸悜閲忋
瀵圭壒寰佸肩煩闃佃繘琛屾帓搴忥紝騫惰懼畾涓涓闃堝礆紝鑻ュ墠i涓鐗瑰緛鐭╅樀鐨勫拰>=璁懼畾鐨勯槇鍊礆紝鍒欏氨鏈塱涓涓繪垚鍒嗭紝鍙栧叾瀵瑰簲鐨勭壒寰佸悜閲忥紝瀹氫負涓繪垚鍒嗗悜閲忕煩闃點
鍘熷嬬煩闃典箻浠ヨ漿緗鍚庣殑涓繪垚鍒嗗悜閲忓嵆寰楅檷緇村悗鐨勭煩闃點傛瘮濡傦紝鍘熷嬫暟鎹鏄150*4鐨勭煩闃碉紝鍦ㄦラ6涓鍙栧緱浜2涓涓繪垚鍒嗭紝閭d箞涓繪垚鍒嗙煩闃靛氨鏄2*4鐨勭煩闃點150*4鐨勭煩闃典箻浠4*2鐨勭煩闃碉紝鍗沖緱150*2鐨勭煩闃碉紝浣撶幇浜嗛檷緇存晥鏋溿傦紙閫夊彇榪欎釜灞炴ц緝灝戠殑鏁版嵁闆嗘槸涓轟簡鏂逛究鍒濆﹁呯殑鐞嗚В錛屽湪瀹為檯宸ョ▼涓錛屾垜浠鐨勫睘鎬у煎線寰涓嶆4涓錛屼絾闄嶇淮鏂規硶閮戒竴鏍風殑銆傦級

Ⅱ C#中如何編寫PCA演算法代碼

PCA的處理步驟:

1,均值化

2,求協方差矩陣(我知道的有兩種方法,這是第一種,按部就班的求,第二種是:(A*A『/(N-1)))

3,求協方差的特徵值和特徵向量

4,將特徵值按照從大到小的順序排序,選擇其中最大的k個,然後將其對應的k個特徵向量分別作為列向量組成特徵向量矩陣

5,將樣本點投影到選取的特徵向量上

matlab實現源代碼

%PCA演算法,matlab實現
functionF=pcad(A,n)%A是M*N
%測試實例A=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1;2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]
%結果F=[0.8280,-1.7776,0.9922,0.2742,1.6758,0.9129,-0.0991,-1.1446,-0.4380,-1.2238]
%PCA第一步:均值化
X=A-repmat(mean(A,2),1,size(A,2))%去均值
%PCA第二步:求特徵協方差矩陣
B=COV(X')%求協方差
%PCA第三步:求特徵協方差矩陣的特徵值和特徵向量
[v,d]=eig(B)%求特徵值和特徵向量
%PCA第四步:將特徵值按照從大到小的順序排序
d1=diag(d);%取出對角矩陣,也就是把特徵值提出來組成一個新的M*1的d1矩陣
[d2index]=sort(d1);%特徵值以升序排序d2是排序後的結果index是數排序以前的排名位置
cols=size(v,2);%特徵向量矩陣的列數
fori=1:cols%對特徵向量做相反位置的調整是個降序排列。這個過程把特徵值和特徵向量同時做相應的降序排列
vsort(:,i)=v(:,index(cols-i+1));%vsort是一個M*col(注:col一般等於M)階矩陣,保存的是按降序排列的特徵向量,每一列構成一個特徵向量
%vsort保存的是協方差矩陣降序後的特徵向量,為M*M階
dsort(i)=d1(index(cols-i+1));%dsort保存的是按降序排列的特徵值,是一維行向量,1*M
end%完成降序排列
M=vsort(:,1:n)%提取主成分量
%PCA第五步:將樣本點投影到選取的特徵向量上
F=(X'*M)'%最終的投影

Ⅲ 2020-07-21

主成分分析(PCA)是一種數據降維和去除相關性的方法,它通過線性變換將向量投影到低維空間。對向量進行投影就是對向量左乘一個矩陣,得到結果向量:

在這里,結果向量的維數小於原始向量的維數。降維要確保的是在低維空間中的投影能很好地近似表達原始向量,即重構誤差最小化。

核心的問題的如何得到投影矩陣,和其他的機器學習演算法一樣,它通過優化目標函數得到。首先考慮最簡單的情況,將向量投影到一維空間,然後推廣到一般情況。

假設有 n 個 d 維向量 X i ,如果要用一個向量 X 0 來近似代替它們,這個向量取什麼值的時候近似代替的誤差最小?如果用均方誤差作為標准,就是要最小化如下函數:

顯然問題的最優解是這些向量的均值:

證明很簡單。為了求上面這個目標函數的極小值,對它的求梯度(求導)並令梯度等於0,可以得到

解這個方程即可得到上面的結論。只用均值代表整個樣本集過於簡單,誤差太大。作為改進,可以將每個向量表示成均值向量和另外一個向量的和:

其中, e 為單位向量, a i 是標量。上面這種表示相當於把向量投影到一維空間,坐標就是 a i 。當e和ai取什麼值的時候,這種近似表達的誤差最小?
這相當於最小化如下誤差函數:

將上面求得的ai帶入目標函數中,得到只有變數e的函數:

上式的後半部分和e無關,由於e是單位向量,因此有 ||e||=1 的約束,這個約束條件可以寫成e T e=1。我們要求解的是一個帶等式約束的極值問題,可以使用拉格朗日乘數法。構造拉格朗日函數:

因此,這個矩陣半正定。這里需要最大化 e T Se 的值,由於

因此, 為散度矩陣最大的特徵值時, e T Se 有極大值,目標函數取得極小值。將上述結論從一維推廣到 d' 維。每個向量可以表達成

在這里 e i 是單位向量。誤差函數變成

可以證明,使得該函數取最小值的 e j 為散度矩陣最大的d'個特徵值對應的單位長度特徵向量,即求解下面的優化問題:

其中, tr 為矩陣的跡。矩陣W的列 e j 是要求解的跡的基向量。散度矩陣是實對稱矩陣,屬於不同特徵值的特徵向量相互正交。前面已經證明這個矩陣半正定,特徵值非負。這些特徵向量構成一組基向量,可以用它們的線性組合來表達向量 x 。從另外一個角度來看,這種變換將協方差矩陣對角化,相當於去除了各分量之間的相關性。

從上面的推導過程可以得到計算投影矩陣的流程如下:
(1)計算樣本集的均值向量,將所有向量減去均值,這成為白化;

(2)計算樣本集的協方差矩陣;

(3)對協方差矩陣進行特徵值分解,得到所有特徵值與特徵向量;

(4)將特徵值從大到小排序,保留最大的一部分特徵值對應的特徵向量,以它們為行,形成投影矩陣。

具體保留多少個特徵值由投影後的向量維數決定。使用協方差矩陣和使用散度矩陣是等價的,因為後者是前者的 n 倍,而矩陣 A 和 nA 有相同的特徵向量。

得到投影矩陣之後可以進行向量降維,將其投影到低維空間。向量投影的流程如下。

(1)將樣本減掉均值向量。

(2)左乘投影矩陣,得到降維後的向量。

向量重構指根據投影後的向量重構原始向量,與向量投影的作用和過程相反。向量重構的流程如下。

(1)輸入向量左乘投影矩陣的轉置矩陣。

(2)加上均值向量,得到重構後的結果。

從上面的推導過程可以看到,在計算過程中沒有使用樣本標簽值,因此,主成分分析是一種無監督學習演算法。除了標准演算法之外它還有多個變種,如稀疏主成分分析、核主成分分析、概率主分量分析等。

源碼講解視頻鏈接

Ⅳ PCA闄嶇淮綆楁硶鈥斺斿師鐞嗕笌瀹炵幇

鏈哄櫒瀛︿範鍩虹綆楁硶python浠g爜瀹炵幇鍙鍙傝冿細machine_learning_algorithms銆

1銆佺畝浠

PCA錛圥rincipal Component Analysis錛夋槸涓縐嶅父鐢ㄧ殑鏁版嵁鍒嗘瀽鏂規硶銆侾CA閫氳繃綰挎у彉鎹㈠皢鍘熷嬫暟鎹鍙樻崲涓轟竴緇勫悇緇村害綰挎ф棤鍏崇殑琛ㄧず錛屽彲鐢ㄤ簬鎻愬彇鏁版嵁鐨勪富瑕佺壒寰佸垎閲忥紝甯哥敤浜庨珮緇存暟鎹鐨勯檷緇淬

4涓浜涘筆CA鐨勮ょ煡

PCA鏈璐ㄤ笂鏄灝嗘柟宸鏈澶х殑鏂瑰悜浣滀負涓昏佺壒寰侊紝騫朵笖鍦ㄥ悇涓姝d氦鏂瑰悜涓婂皢鏁版嵁鈥滅葷浉鍏斥濓紝涔熷氨鏄璁╁畠浠鍦ㄤ笉鍚屾d氦鏂瑰悜涓婃病鏈夌浉鍏蟲с

鍥犳わ紝PCA涔熷瓨鍦ㄤ竴浜涢檺鍒訛紝渚嬪傚畠鍙浠ュ緢濂界殑瑙i櫎綰挎х浉鍏籌紝浣嗘槸瀵逛簬楂橀樁鐩稿叧鎬у氨娌℃湁鍔炴硶浜嗭紝瀵逛簬瀛樺湪楂橀樁鐩稿叧鎬х殑鏁版嵁錛屽彲浠ヨ冭檻Kernel PCA錛岄氳繃Kernel鍑芥暟灝嗛潪綰挎х浉鍏寵漿涓虹嚎鎬х浉鍏熾鍙﹀栵紝PCA鍋囪炬暟鎹鍚勪富鐗瑰緛鏄鍒嗗竷鍦ㄦd氦鏂瑰悜涓婏紝濡傛灉鍦ㄩ潪姝d氦鏂瑰悜涓婂瓨鍦ㄥ嚑涓鏂瑰樊杈冨ぇ鐨勬柟鍚戱紝PCA鐨勬晥鏋滃氨澶ф墦鎶樻墸浜嗐

鏈鍚庨渶瑕佽存槑鐨勬槸錛孭CA鏄涓縐嶆棤鍙傛暟鎶鏈錛屼篃灝辨槸璇撮潰瀵瑰悓鏍風殑鏁版嵁錛屽傛灉涓嶈冭檻娓呮礂錛岃皝鏉ュ仛緇撴灉閮戒竴鏍鳳紝娌℃湁涓昏傚弬鏁扮殑浠嬪叆錛屾墍浠PCA渚誇簬閫氱敤瀹炵幇錛屼絾鏄鏈韜鏃犳硶涓鎬у寲鐨勪紭鍖栥

熱點內容
c語言乘積函數 發布:2024-11-26 17:43:23 瀏覽:186
unix與linux的關系 發布:2024-11-26 17:38:37 瀏覽:463
中恆牌密碼鎖初始管理密碼是多少 發布:2024-11-26 17:34:54 瀏覽:295
ios手機怎麼玩安卓游戲 發布:2024-11-26 17:08:23 瀏覽:395
sql記錄執行 發布:2024-11-26 17:08:15 瀏覽:8
deb反編譯 發布:2024-11-26 17:04:12 瀏覽:140
ftp站點如何設置 發布:2024-11-26 16:54:48 瀏覽:849
預設存儲器 發布:2024-11-26 16:47:38 瀏覽:14
如何打開雲伺服器的窗口 發布:2024-11-26 16:42:37 瀏覽:844
怎麼自學編程入門 發布:2024-11-26 16:40:58 瀏覽:760