ID3机器学习算法能够处理超过YES / NO类吗?

时间:2014-03-20 19:03:03

标签: machine-learning

我已经花了五天时间睡了一觉,现在我的智慧结束了。事实上,由于睡眠不足,我现在感到不适。

我已经使用两个类实现了ID3,例如YES/NO,现在我的任务是拥有3倍可能结果的数据集。

数据的示例子集:

3.4,5.2,1.4,0.2,BarnOwl
2.3,4.5,1.3,0.3,BarnOwl
3.4,6,4.5,1.6,SnowyOwl
2.9,5.7,4.2,1.3,SnowyOwl
2.8,6.4,5.6,2.1,LongEaredOwl
3.2,6.4,5.3,2.3,LongEaredOwl
2.8,6.2,4.8,1.8,LongEaredOwl
2.3,5,3.3,1,SnowyOwl

我将数据混洗并将前100个条目作为训练数据,以便进行示例分析:

{'SnowyOwl': 32, 'BarnOwl': 35, 'LongEaredOwl': 33}

和计算

Entropy(32SO, 35BO, 33LO) =                                enter image description here

= 1.58395

我编写了代码并检查了熵函数,而不是在范围

中得到结果

Entropy = [0..1]

我得到1.58395

我给出的公式与YES/NO(对不起质量)非常吻合

enter image description here

确认我的功能正在计算正确的结果,尽管我使用的预期范围http://www.wolframalpha.com/

任何人都可以确认这个公式是否正确? 这就是为什么它超出了我的预期范围。

1 个答案:

答案 0 :(得分:5)

n - 值离散随机变量的熵位于[0, log2(n)]范围内。这意味着对于3个结果,范围将为[0, \log2(3)] = [0, 1.58496250072]。答案是肯定的,你的熵公式很好。

(要看到这一点,请注意,当所有结果的概率相同时,熵达到最大值,即1/n。然后-1/n\log2(1/n) - ... -1/n\log2(1/n) = n * 1/n * \log2(n) = log2(n)。另一方面,熵将当其中一个结果以概率1发生并且所有其他结果以概率0 1*log2(1) - 0*log2(0) - ... - 0*log2(0) = 0发生时,取其最小值。这就是范围为[0, log2(n)]的原因。我遗漏了证明熵真正达到最大值的原因注意我设置了0*log2(0):=0,因为log2(0)不存在。实际上,通常会确保总和超过p*log2(p) {{}} p>0 1}}。)