2013-04-24 52 views
0

我有一個40X3249嘈雜的數據集和40X1結果集。我想在Matlab中執行簡單的順序特徵選擇。 Matlab的例子很複雜,我無法遵循它。即使在SoF上的一些例子也沒有幫助。我想使用決策樹作爲分類器來執行特徵選擇。有人可以請簡單解釋一下。
這也是一個問題,我的數據集與特徵數相比觀察次數非常少?
我下面這個例子:Sequential feature selection Matlab和我收到的錯誤是這樣的:Matlab中的簡單順序特徵選擇

訓練的彙集協方差矩陣必須是正定的。

回答

1

該錯誤來自使用該函數中的classify函數,該函數執行LDA。當數據缺乏秩序時(或者換句話說,某些功能幾乎完全相關),會發生此錯誤。爲了克服這個問題,你應該把數據投影到一個較低維的子空間。主成分分析可以爲您做到這一點。有關如何在Matlab的統計工具箱中使用pca函數的更多詳細信息,請參見here

[basis, scores, ~] = pca(X); % Find the basis functions and their weighting, X is row vectors 
indices = find(scores > eps(2*max(scores))); % This is to find irrelevant components up to machine precision of the biggest component .. with a litte extra tolerance (2x) 
new_basis = basis(:, indices); % This gets us the relevant components, which are stored in variable "basis" as column vectors 
X_new = X*new_basis; % inner products between the new basis functions spanning some subspace of the original, and the original feature vectors 

這應該讓你自動投影到相關的子空間。請注意,您的功能與以前沒有相同的含義,因爲它們將是舊功能的加權組合。

需要特別注意的是:如果你不想改變你的特徵表示,那麼你需要使用一些適用於等級不足的數據。您可以推出自己版本的懲罰性判別分析(非常簡單),使用支持向量機或其他分類函數,這些函數不會像LDA那樣破壞相關特徵(由於需要協方差估計的矩陣求逆)。

編輯:我沒有測試過這個,因爲我已經在Matlab中推出了我自己的PCA版本。

3

我已經解釋了您在回答之前的問題時得到的錯誤消息。

一般來說,這是一個問題,你有更多的變量比樣本。這會阻止您使用某些技術,例如您嘗試的判別式分析,但無論如何這都是一個問題。事實是,如果變量與樣本的比例很高,則很可能某些變量組合將完全歸類數據集,即使它們都是隨機數。如果您構建一個決策樹模型,那麼這是事實,如果您使用特徵選擇方法顯式搜索變量組合,則更是如此。

我建議你嘗試某種降維方法。如果所有變量都是連續的,您可以按照@ user1207217的建議嘗試PCA。或者,您可以使用潛在變量方法進行模型構建,例如PLS(MATLAB中的plsregress)。

如果您仍然希望使用此數據集上的決策樹進行順序特徵選擇,那麼您應該能夠修改您鏈接到的問題中的示例,將其中一個的調用替換爲classregtree

+0

在Matlab文檔中給出的示例中:http://www.mathworks.in/help/stats/examples/selecting-features-for-classifying-high-dimensional-data.html,它們減少了它們特徵的暗淡程度組。他們的數據集是216X4000,這也太多了。爲什麼我不能像他們一樣進行暗淡減少?我試過了,但是我得到了和上面一樣的錯誤。 – MaxSteel 2013-04-25 10:02:32

+0

您可以嘗試按照與此處給出的示例相同的方式進行降維。但是,他們的數據集比您的樣本數量更多,功能更少。它不是4000,而是150,因爲他們在應用'sequentialfs'之前應用了一個過濾器。他們還使用'sequentialfs'的'nfeatures'參數限制它選擇最多50個要素,這些要素比樣本數量要少,因此它們不會看到你所看到的錯誤。也許很快你會相信我,將sequentialfs和LDA應用於大小爲40x3249的數據集並不是一個好主意。按照您的建議嘗試PCA。 – 2013-04-25 13:05:28