我目前正在使用一个包含10个特征和3个类别的数据集进行监督学习实验,但有一个问题出现了:我应该使用哪种特征选择算法来找出哪个特征对哪个类别影响最大,或者哪些特征的组合会导致哪个类别。
例如,假设有一个数据集,包含睡眠时间和学习时间,这可能会导致通过或失败的结果。
我想知道学习时间如何影响通过类别,以及如何影响失败类别,同样的,睡眠时间如何影响通过或失败的结果。
哪种特征选择方法可以告诉我睡眠时间对失败有x影响,对通过有y影响,同样的,学习时间也有相应的影响?
回答:
一种方法是观察在根据某个属性的值对类别值进行分区后,类别标签分布的熵如何变化。熵减少最大的属性就是“最佳”属性。(这种方法仅适用于离散属性;你需要将属性离散化才能使用这种方法;例如,将hoursSlept>7
转换为sleptAlot
;将5 <=hoursSlept<=7
转换为sleptEnough
;将hoursSlept<5
转换为sleepDeprived
。)
离散分布(p1,p2,...,pk)
的熵H
定义为
H = -p1*log_2 p1 - p2*log_2 p2 - ... - pk*log_2 pk
它大致衡量了分布的杂质。先验上你对结果了解得越少,熵就越高;先验上你对结果了解得越多,熵就越低。实际上,分布pi=1/k
对于所有i
(所有结果的可能性相等)具有最高可能的熵(值为log_2 k
);而分布pi=1
对于某个i
具有最低可能的熵(值为0
)。
定义pi=ni/n
,其中n
是样本数,ni
是第i
类值的样本数。这会诱导一个离散分布(p1,p2,...,pk)
,其中k
是类值的数量。
对于具有可能值a1,a2,...,ar
的属性A
,定义Si
为那些属性A
值等于ai
的样本集。每个Si
集都会诱导一个离散分布(定义方式与之前相同)。设|Si|
为Si
集中的样本数。相应的熵记为H(Si)
。
现在计算
Gain(A) = H - |S1|/n * H(S1) - ... - |Sr|/n * H(Sr)
并选择使Gain(A)
最大化的属性。直觉上,这个属性最大化了这个差异,使得在大多数Si
中,样本具有相似的标签(即熵较低)。
直观上,Gain(A)
的值告诉你属性A
对类别标签的了解程度。
供你参考,这种方法在决策树学习中广泛使用,该度量被称为信息增益。例如,参见这些幻灯片;这个Math.SE上的解释非常好(尽管是在决策树学习的背景下)。