2013-04-07 46 views
1

我在63 * 2308矩陣上進行了PCA,得到了一個分數和一個係數矩陣。得分矩陣爲63 * 2308,並且係數矩陣的維數爲2308 * 2308。如何選擇pca後最相關的前100個特徵(子集)?

我如何提取最重要的前100個特徵的列名,以便我可以對它們執行迴歸?

+0

你可以展示一個你想要表演的短期研究案例嗎?這會讓你的問題更清楚。 – fpe 2013-04-07 17:23:42

+0

我有一個基因數據集,包含63個病人的2308個基因。進行PCA縮小尺寸。減少維度後,我想選擇前100個功能對其執行邏輯迴歸。那有意義嗎? – user1403848 2013-04-07 18:45:31

+0

我試着給出答案,如果我正確地理解了「頂級功能」的含義。 – fpe 2013-04-07 18:56:53

回答

0

有你

B = sort(your_matrix,2,'descend'); 
C = B(:,1:100); 
+0

your_matrix代表什麼?它是指分數矩陣嗎? – user1403848 2013-04-07 21:20:33

+0

我還有一個問題。變量C將檢索100個維度。有沒有辦法知道這100個尺寸究竟是什麼?我使用B = sort(score,2,'descend')對得分矩陣進行排序,然後使用C = B(:,1:100),根據得分給出前100列。我將如何從原始矩陣中選擇100個維度? – user1403848 2013-04-07 21:29:46

4

試圖PCA應該給你倆一組特徵向量(您共同有效的矩陣)和特徵向量(1×2308),通常被稱爲拉姆達)。您可能會在matlab中使用不同的PCA函數來獲取它們。

特徵值表示每個特徵向量解釋了多少數據。選擇特徵的簡單方法是選擇具有最高特徵值的100個特徵。這爲您提供了一組解釋數據中大部分差異的功能。

如果您需要證明您的寫作方法的合理性,您可以實際計算每個特徵向量解釋的方差量以及at的減少量,例如95%的方差解釋。

請記住,僅基於特徵值進行選擇可能與您的迴歸最重要的一組特徵無關,所以如果您沒有獲得您期望的性能,您可能需要嘗試其他特徵選擇方法,例如作爲遞歸功能選擇。我建議使用谷歌學者找一些類似的文章,看看他們使用什麼方法。


一個快速matlab示例使用PCA獲取前100個主要組件。

[eigenvectors, projected_data, eigenvalues] = princomp(X); 
[foo, feature_idx] = sort(eigenvalues, 'descend'); 
selected_projected_data = projected(:, feature_idx(1:100)); 
+0

我得到了特徵值。有沒有辦法找到這些特徵值對應的原始數據中的哪些列?這將有助於從2308功能中選擇列並對數據執行迴歸。 – user1403848 2013-04-07 21:36:46

+0

在做PCA時,您可以轉換數據,以便不再使用原始功能,而是通過組合它們組成新功能。當您進行功能選擇時,您可以從這些新功能中進行選擇。雖然可以使用特徵向量從新特徵映射回舊特徵,但這樣做並非微不足道,除非您有這樣的理由,否則可能不是您想要做的。我已經修改了我的答案,其中包含一些用於選擇迴歸前100個投影功能的示例matlab代碼,這正是您以前的樣子。 – Alan 2013-04-07 23:21:03

+0

感謝噸清楚!這正是我所期待的。 – user1403848 2013-04-08 02:57:02

0

小心!

只有63個觀察值和2308個變量,您的PCA結果將毫無意義,因爲數據爲未指定。你應該至少有(經驗法則)尺寸* 3觀察。

使用63個觀察值,您最多可以定義62維超空間!