我有一组特征,我希望根据它们之间的相关系数进行排名,而不考虑真实的标签(这将通过监督特征选择,对吗?)。 我的目标是选择第一个特征作为与其他特征更相关的特征,将其删除等等。
问题是如何测试向量与矩阵(所有其他向量/特征)的相关性?是否可以这样做,或者我这样做是否正确。
PS:我使用的是 MATLAB 2013b
谢谢大家
最佳答案
假设您有一个 n-by-d
矩阵X
其中行是实例,列是特征/维度,那么您可以简单地使用 corr
计算相关系数矩阵或 corrcoeff
功能:
% 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
矩阵包含 correlation coefficients每个功能与其他功能的比较。因此,对角线全为 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
的绝对值的平均值在上面的代码中,因为我们不关心两个变量是正相关还是负相关,只关心相关性有多强。
关于matlab - 无监督过滤器特征选择 - 按相关性排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637125/