我将使用哪种特征选择算法来找出哪个特征对每个 class 的影响最大?

What feature selection algorithm would I use to find out which feature impacts each class the most?

我目前正在试验一个数据集,使用具有 10 个特征和 3 个 classes 的监督学习,但出现了一个问题,即我将使用哪种特征选择算法来找出哪个特征影响哪个class最多,或者哪个特征组合会导致什么class。

例如,获取睡眠时间和研究时间的数据集,这可能会导致通过或失败。

我想知道小时研究如何影响通过 class 以及它如何影响失败 class 以及睡眠时间研究如何影响通过或失败。

哪种特征选择方法会告诉我睡眠时间对失败有 x 影响,对通过有 y 影响,对学习时间也有同样的影响?

一种方法是根据给定属性的属性值对 class 值进行分区后,观察 class 标签分布的熵如何变化。提供最大熵减少的属性是 "best" 属性。 (这仅适用于离散属性;您必须离散化属性才能使用此方法;例如,将 hoursSlept>7 转换为 sleptAlot;将 5 <=hoursSlept<=7 转换为 sleptEnough ; 和 hoursSlept<5sleepDeprived.)

离散分布(p1,p2,...,pk)的熵H定义为

H = -p1*log_2 p1 - p2*log_2 p2 - ... - pk*log_2 pk

粗略地说,它衡量的是分布的不纯性。你对先验结果的了解越少,熵就越高;您对先验结果的了解越多,熵就越小。事实上,所有 i 的分布 pi=1/k(所有结果的可能性均等)具有最高可能的熵(值 log_2 k);和分布,其中 pi=1 对于某些 i 具有最低可能的熵(值 0)。

定义 pi=ni/n,其中 n 是样本数,ni 是第 i 个 class 值的样本数。这会导致离散分布 (p1,p2,...,pk),其中 k 是 class 值的数量。

对于具有可能值 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) 的值告诉您关于 class 标签的属性 A 的信息量。

供您参考,这在决策树学习中被广泛使用,该度量称为信息增益。看到,例如,these slides; this explanation on Math.SE 真的很棒(尽管它是在决策树学习的背景下)。