2013-04-24 47 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