无监督滤波器特征选择 - 按相关性排序

时间:2014-07-08 16:34:40

标签: matlab machine-learning correlation ranking feature-selection

我有一组功能,我希望根据它们的相关系数相互排名,而不考虑真正的标签(通过监督功能选择,对吧?)。 我的目标是选择第一个特征作为彼此更相关的特征,将其取出等等。

问题是如何测试向量与矩阵(所有其他向量/特征)的相关性?是可以这样做还是我这样做。

PS:我正在使用MATLAB 2013b

谢谢大家

1 个答案:

答案 0 :(得分:1)

假设您有n-by-d矩阵X,其中行是实例,列是要素/维度,那么您只需使用corr或{{ 3}}函数:

% Fisher Iris dataset, 150x4
>> load fisheriris
>> X = meas;

>> C = corr(X)
C =
    1.0000   -0.1176    0.8718    0.8179
   -0.1176    1.0000   -0.4284   -0.3661
    0.8718   -0.4284    1.0000    0.9629
    0.8179   -0.3661    0.9629    1.0000

结果是d-by-d矩阵,其中包含针对所有其他要素的每个要素的corrcoeff。因此,对角线都是1(因为corr(x,x) = 1),矩阵也是对称的(因为corr(x,y) = corr(y,x))。值范围从-11,其中-1表示两个变量之间的反相关,1表示正相关,0表示没有线性相关。

现在因为要删除平均与其他要素最相关的要素,您必须将该矩阵汇总为每个要素的一个数字。一种方法是计算平均值:

% mean
>> mean_corr = mean(C)
mean_corr =
    0.6430    0.0220    0.6015    0.6037

% most correlated feature on average
>> [~,idx] = max(mean_corr)
idx =
     1

% drop that feature
>> X(:,idx) = [];

编辑:

我可能应该采用上面代码中C绝对值的均值,因为我们不关心两个变量是正相关还是负相关,只是有多强相关性是。