我试图找到C4.5算法如何确定数值属性的阈值。我查了一下,不太明白,在大多数地方我都找到了这样的信息:
训练样本首先根据所考虑的属性Y的值进行排序。这些值的数量有限,因此我们将它们按顺序表示为{v1,v2,…,vm}。任何位于vi和vi+1之间的阈值都将具有相同的效果,即将情况分为属性Y的值在{v1, v2,…,vi}和属性Y的值在{vi+1, vi+2,…,vm}的情况。因此,Y上只有m-1个可能的分裂,所有这些都应该被系统地检查以获得最优分裂。
通常选择每个区间的中点:(vi+ vi+1)/2作为代表性阈值。C4.5为每个区间{vi, vi+1}选择一个较小的值vi作为阈值,而不是中点本身。
我正在研究一个Play/don Play(值表)的例子,不明白当状态是晴天时,属性湿度是如何得到数字75(生成的树)的,因为晴天状态的湿度值是{70,85,90,95}。
有人知道吗?
正如您生成的树图像所示,您按顺序考虑属性。你的例子属于outlook = sunny branch。如果你根据outlook = sunny过滤你的数据,你会得到下表:
outlook temperature humidity windy play
sunny 69 70 FALSE yes
sunny 75 70 TRUE yes
sunny 85 85 FALSE no
sunny 80 90 TRUE no
sunny 72 95 FALSE no
可以看到,湿度的阈值是"<75"
j4.8继承了ID3算法。它利用信息增益和熵来决定最佳分割。根据维基百科
The attribute with the smallest entropy
is used to split the set on this iteration.
The higher the entropy,
the higher the potential to improve the classification here.
我不完全确定J48,但假设它基于C4.5,它将计算所有可能分割的增益(即,基于功能的可能值)。对于每个分割,它计算信息增益,并选择具有最多信息增益的分割。在{70,85,90,95}的情况下,它将计算{70|85,90,95}与{70,85|90,95}和{70,85,90|95}的信息增益,并选择最佳的一个。
昆兰关于C4.5的书是一个很好的起点(https://goo.gl/J2SsPf)。