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

chr*_*ane 1 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
Run Code Online (Sandbox Code Playgroud)

我将数据混洗并将前100个条目作为训练数据,因此示例细分:

{'SnowyOwl': 32, 'BarnOwl': 35, 'LongEaredOwl': 33}
Run Code Online (Sandbox Code Playgroud)

并计算

Entropy(32SO, 35BO, 33LO) = 在此输入图像描述

= 1.58395

我编写了代码并检查了熵函数,而不是在范围内得到结果

Entropy = [0..1]

我明白了 1.58395

我已经给出了公式,并与YES/NO(对不起质量)完美配合

在此输入图像描述

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

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

bla*_*azs 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).