我有一组功能,我希望根据它们的相关系数相互排名,而不考虑真正的标签(通过监督功能选择,对吧?)。 我的目标是选择第一个特征作为彼此更相关的特征,将其取出等等。
问题是如何测试向量与矩阵(所有其他向量/特征)的相关性?是可以这样做还是我这样做。
PS:我正在使用MATLAB 2013b
谢谢大家
答案 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)
)。值范围从-1
到1
,其中-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
的绝对值的均值,因为我们不关心两个变量是正相关还是负相关,只是有多强相关性是。