决策树---ID3算法的理解

ID3(Iterative Dichotomiser 3)算法是由罗斯昆(J. Ross Quinlan)于1975年在悉尼大学提出的一种分类预测算法,算法的核心是“信息熵”(information entropy)。这个算法是通过计算出每个属性的信息增益,来选取信息增益(information gain)最高的属性来作为决策树划分的属性和标准。为什么要选取信息增益最高的属性来划分,我们来看一下下面这个公式:

Info_Gain=EntropyiIpiEntropyi I n f o _ G a i n = E n t r o p y − ∑ i ∈ I p i ⋅ E n t r o p y i

这个公式中,Entropy表示父节点的熵,pi表示子节点的数据量占父节点数据量的比例,Entropyi表示第i个子节点的熵,该公式的第二项中子节点的熵越小,就表示子节点的信息量越小,子节点就越纯,分类的效果就越好。所以整体的来看,这个公式的第二项越小,那么整个的信息增益就越大,离我们预期的效果就越接近。


好了,有了这个理论的基础,我们一起来看一个例子,很多人炒股票,我们来用一个股票的例子来看看这个ID3算法,通过今天某只股票的涨跌来预测明天这只股票的涨跌,当然这些数据是我自己瞎编的。

今日股票涨跌 上证指数 涨跌幅 明日股票涨跌
+ 2983 +1.2 -
- 2962 -6.6 +
+ 3008 +7.0 -
- 2966 -3.2 -
+ 3018 +5.7 +
- 2995 -2.2 +
+ 2899 +1.7 -
- 3065 -0.6 +
+ 2888 +0.2 -
- 3112 -9.3 +

这里有10组我自己编的某只股票数据,同时有当天的上证指数和涨跌幅,当然有点常识的人都知道,用上证指数和涨跌幅来预测第二天的股票走势是毫无道理的,我这里只是强行把股票数据作为一个栗子来讲解这个ID3算法而已。好了,我们一起来看看这组数据,到底是将上证指数作为预测的根据还是当日涨跌幅作为预测的根据还是今日股票涨跌作为预测的根据。

1.今日股票的涨跌对明日股票涨跌的影响

因为在这10组初始数据中有5组涨5组跌,所以可以知道父节点的熵是:

Entropy=2×(510)log2(510)=1 E n t r o p y = − 2 × ( 5 10 ) log 2 ( 5 10 ) = 1

接着,我们可以按照如图分析:
决策树---ID3算法的理解_第1张图片
由数据和图可以看出,今日股票可以分成涨和跌两类,然后在今日股票涨的情况下第二天股票有1组涨和4组跌,今日股票跌的情况下有4组涨和一组跌。那么由上述的信息增益公式我们可以计算得到:
Info_Gain=2×(12)log2(12)2×12×(15log2(15)45log2(45))=0.278 I n f o _ G a i n = − 2 × ( 1 2 ) log 2 ( 1 2 ) − 2 × 1 2 × ( − 1 5 log 2 ( 1 5 ) − 4 5 log 2 ( 4 5 ) ) = 0.278

2.上证指数对明日股票涨跌的影响

我们再来看上证指数对明日股票涨跌的影响,有的朋友看到这样的上证指数就会懵逼了,都是这样的离散数据我们如何处理呢,大致的可以看出我们的上证指数都在3000点左右徘徊,我们可以将上证指数分为大于3000点和小于3000点。我们将数据整理如图所示:
决策树---ID3算法的理解_第2张图片
由数据和图中所知,在上证指数大于3000点的时候第二天这支股票有3天是涨的一天是跌的,上证指数小于3000点的时候,第二天股票有两天是涨的,四天是跌的。所以同理我们可以计算出上证指数这个属性的信息增益:

Info_Gain=410log2(410)610log2(610)+410(34log2(34)+14log2(14))+610(26log2(26)+46log2(46))=0.095 I n f o _ G a i n = − 4 10 log 2 ( 4 10 ) − 6 10 log 2 ( 6 10 ) + 4 10 ( 3 4 log 2 ( 3 4 ) + 1 4 log 2 ( 1 4 ) ) + 6 10 ( 2 6 log 2 ( 2 6 ) + 4 6 log 2 ( 4 6 ) ) = 0.095

3.今日股票的涨跌幅对明日股票涨跌的影响

同理,有了上述的经验,我们可以将涨跌幅分成四个区间:[-10.0,-5.0),[-5.0,0),[0,+5.0],(+5.0,+10.0]。所以我们可以统计一下,如图所示:
决策树---ID3算法的理解_第3张图片
由上述的图片可以计算出用今日股票涨跌幅作为属性的信息增益计算为:

Info_Gain=2×210log22102×310log2310+210×(22log222+02log202)+310×(23log223+13log213)+310×(03log203+33log233)+210×(12log212+12log212)=2×210log22102×310log2310+310×(23log223+13log213)+210×(12log212+12log212)=1.495 I n f o _ G a i n = − 2 × 2 10 log 2 2 10 − 2 × 3 10 log 2 3 10 + 2 10 × ( 2 2 log 2 2 2 + 0 2 log 2 0 2 ) + 3 10 × ( 2 3 log 2 2 3 + 1 3 log 2 1 3 ) + 3 10 × ( 0 3 log 2 0 3 + 3 3 log 2 3 3 ) + 2 10 × ( 1 2 log 2 1 2 + 1 2 log 2 1 2 ) = − 2 × 2 10 log 2 2 10 − 2 × 3 10 log 2 3 10 + 3 10 × ( 2 3 log 2 2 3 + 1 3 log 2 1 3 ) + 2 10 × ( 1 2 log 2 1 2 + 1 2 log 2 1 2 ) = 1.495

所以综上所述,因为将涨跌幅作为属性的信息增益最大,所以将今日涨跌幅作为根节点的分裂属性是最佳的。当然在现实生活中股票的涨跌是很多复杂因素在一起所决定的,在这篇博文中只是作为一个例子来阐述ID3算法而已,仅供参考。这就是我们在决策树中用到的ID3算法,这是我对此算法的一些理解,希望对各位朋友有所帮助,由于本人实力有限,若有纰漏,请轻喷,欢迎指正,若有转载,也请标明出处,谢谢各位朋友。

你可能感兴趣的:(Machine,Learning)