如何计算昆兰C4.5算法中数值属性的阈值?



我试图找到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)。

最新更新