我想对一个数值数据集进行属性选择。我的目标是找出最佳属性,稍后将在线性回归中使用这些属性来预测数值。
为了测试,我使用了从这里(datasets-numeric.jar)获取的autoPrice.arff文件。使用ReliefFAttributeEval后,我得到了以下结果:
Ranked attributes: **0.05793 8 engine-size** **0.04976 5 width** 0.0456 7 curb-weight 0.04073 12 horsepower 0.03787 2 normalized-losses 0.03728 3 wheel-base 0.0323 10 stroke 0.03229 9 bore 0.02801 13 peak-rpm 0.02209 15 highway-mpg 0.01555 6 height 0.01488 4 length 0.01356 11 compression-ratio 0.01337 14 city-mpg 0.00739 1 symboling
而使用InfoGainAttributeEval(在应用数值到名义过滤器后)则留下了以下结果:
Ranked attributes:6.8914 7 curb-weight5.2409 4 length5.228 2 normalized-losses5.0422 12 horsepower4.7762 6 height4.6694 3 wheel-base4.4347 10 stroke4.3891 9 bore**4.3388 8 engine-size****4.2756 5 width**4.1509 15 highway-mpg3.9387 14 city-mpg3.9011 11 compression-ratio3.4599 13 peak-rpm2.2038 1 symboling
我的问题是:如何证明这两个结果之间的矛盾?如果两种方法使用不同的算法来实现相同的目标(揭示属性对类的相关性),为什么一个说例如engine-size很重要,而另一个却说不那么重要!?
回答:
没有理由认为RELIEF和信息增益(IG)应该给出相同的结果,因为它们测量的是不同的东西。
IG 查看的是没有属性和在属性条件下的熵的差异;因此,相对于类变量而言,具有高度信息量的属性将被排在最前面。
然而,RELIEF 查看的是随机数据实例,并通过与“附近”的数据实例进行比较来测量特征区分类的效果。请注意,RELIEF 是一种更启发式(即更随机)的方法,你得到的值和顺序取决于多个参数,这与IG不同。
因此,我们不会期望优化不同量的算法给出相同的结果,尤其是一个是依赖参数的。然而,我认为你的结果实际上是相当相似的:例如,curb-weight
和horsepower
在两种方法中都非常接近顶部。