利用ID3算法实现从数据集归纳出决策树。
背景:
张三想要买一套房,可能左右他是否愿意购买这套房主要有四个方面的因素,这四种因素及可能出现的值如下表所示:
院子 | 车库数 | 楼层数 | 地理位置 |
---|---|---|---|
大/小 | 1/2/3 | 2/3 | 城郊/市中心 |
张三看了14套房子,以下是这些房子具备的属性以及张三对于购买这些房子的意愿:
院子 | 车库数 | 楼层数 | 地理位置 | 是否愿意购买 |
---|---|---|---|---|
大 | 3 | 2 | 城郊 | 是 |
小 | 2 | 3 | 市中心 | 是 |
小 | 1 | 3 | 市中心 | 否 |
小 | 2 | 3 | 城郊 | 是 |
大 | 3 | 3 | 市中心 | 是 |
大 | 2 | 3 | 市中心 | 是 |
小 | 2 | 2 | 市中心 | 否 |
小 | 3 | 3 | 城郊 | 是 |
大 | 1 | 2 | 市中心 | 是 |
大 | 1 | 3 | 城郊 | 是 |
小 | 3 | 2 | 城郊 | 是 |
大 | 2 | 2 | 城郊 | 否 |
大 | 1 | 2 | 城郊 | 是 |
小 | 1 | 2 | 城郊 | 否 |
在这14套房中,张三愿意购买的有10套,不愿意购买的有4套。由此可得原表格的熵为:
H ( S ) = − 4 14 l o g 2 4 14 − 10 14 l o g 2 10 14 H(S)=-\frac{4}{14} log_{2}\frac{4}{14}-\frac{10}{14} log_{2}\frac{10}{14} H(S)=−144log2144−1410log21410
每个因素的信息增益:
院子 | 愿意 | 不愿意 |
---|---|---|
大 | 6 | 1 |
小 | 4 | 3 |
G ( S , 院 子 ) = H ( S ) − ∣ S 大 ∣ ∣ S ∣ H ( S 大 ) − ∣ S 小 ∣ ∣ S ∣ H ( S 小 ) = 0.072 G(S,院子)=H(S)-\frac{|S_{大}|}{|S|}H(S_{大})-\frac{|S_{小}|}{|S|}H(S_{小})=0.072 G(S,院子)=H(S)−∣S∣∣S大∣H(S大)−∣S∣∣S小∣H(S小)=0.072
车库数 | 愿意 | 不愿意 |
---|---|---|
1 | 3 | 2 |
2 | 3 | 2 |
3 | 4 | 0 |
G ( S , 车 库 数 ) = H ( S ) − ∣ S 1 ∣ ∣ S ∣ H ( S 1 ) − ∣ S 2 ∣ ∣ S ∣ H ( S 2 ) − ∣ S 3 ∣ ∣ S ∣ H ( S 3 ) = 0.166 G(S,车库数)=H(S)-\frac{|S_{1}|}{|S|}H(S_{1})-\frac{|S_{2}|}{|S|}H(S_{2})-\frac{|S_{3}|}{|S|}H(S_{3})=0.166 G(S,车库数)=H(S)−∣S∣∣S1∣H(S1)−∣S∣∣S2∣H(S2)−∣S∣∣S3∣H(S3)=0.166
楼层数 | 愿意 | 不愿意 |
---|---|---|
2 | 4 | 3 |
3 | 6 | 1 |
G ( S , 楼 层 数 ) = H ( S ) − ∣ S 2 ∣ ∣ S ∣ H ( S 2 ) − ∣ S 3 ∣ ∣ S ∣ H ( S 3 ) = 0.072 G(S,楼层数)=H(S)-\frac{|S_{2}|}{|S|}H(S_{2})-\frac{|S_{3}|}{|S|}H(S_{3})=0.072 G(S,楼层数)=H(S)−∣S∣∣S2∣H(S2)−∣S∣∣S3∣H(S3)=0.072
地理位置 | 愿意 | 不愿意 |
---|---|---|
市中心 | 4 | 2 |
郊区 | 6 | 2 |
G ( S , 地 理 位 置 ) = H ( S ) − ∣ S 市 中 心 ∣ ∣ S ∣ H ( S 市 中 心 ) − ∣ S 郊 区 ∣ ∣ S ∣ H ( S 郊 区 ) = 0.003 G(S,地理位置)=H(S)-\frac{|S_{市中心}|}{|S|}H(S_{市中心})-\frac{|S_{郊区}|}{|S|}H(S_{郊区})=0.003 G(S,地理位置)=H(S)−∣S∣∣S市中心∣H(S市中心)−∣S∣∣S郊区∣H(S郊区)=0.003
显然,车库数的信息增益远大于其他三项,且当车库数为3时所有结果均为愿意,因此初始决策树如下图所示:
对于只有1个车库的房子,房子具备的属性以及张三对于购买这些房子的意愿如下所示:
院子 | 楼层数 | 地理位置 | 是否愿意购买 |
---|---|---|---|
小 | 3 | 市中心 | 否 |
大 | 2 | 市中心 | 是 |
大 | 3 | 城郊 | 是 |
大 | 2 | 城郊 | 是 |
小 | 2 | 城郊 | 否 |
此表格的熵为:
H ( S ) = − 3 5 l o g 2 3 5 − 2 5 l o g 2 2 5 = 0.971 H(S)=-\frac{3}{5} log_{2}\frac{3}{5}-\frac{2}{5} log_{2}\frac{2}{5}=0.971 H(S)=−53log253−52log252=0.971
其中每个属性的信息增益:
G ( S , 院 子 ) = H ( S ) − ∣ S 大 ∣ ∣ S ∣ H ( S 大 ) − ∣ S 小 ∣ ∣ S ∣ H ( S 小 ) = 0.971 G(S,院子)=H(S)-\frac{|S_{大}|}{|S|}H(S_{大})-\frac{|S_{小}|}{|S|}H(S_{小})=0.971 G(S,院子)=H(S)−∣S∣∣S大∣H(S大)−∣S∣∣S小∣H(S小)=0.971
G ( S , 楼 层 数 ) = H ( S ) − ∣ S 2 ∣ ∣ S ∣ H ( S 2 ) − ∣ S 3 ∣ ∣ S ∣ H ( S 3 ) = 0.020 G(S,楼层数)=H(S)-\frac{|S_{2}|}{|S|}H(S_{2})-\frac{|S_{3}|}{|S|}H(S_{3})=0.020 G(S,楼层数)=H(S)−∣S∣∣S2∣H(S2)−∣S∣∣S3∣H(S3)=0.020
G ( S , 地 理 位 置 ) = H ( S ) − ∣ S 市 中 心 ∣ ∣ S ∣ H ( S 市 中 心 ) − ∣ S 郊 区 ∣ ∣ S ∣ H ( S 郊 区 ) = 0.020 G(S,地理位置)=H(S)-\frac{|S_{市中心}|}{|S|}H(S_{市中心})-\frac{|S_{郊区}|}{|S|}H(S_{郊区})=0.020 G(S,地理位置)=H(S)−∣S∣∣S市中心∣H(S市中心)−∣S∣∣S郊区∣H(S郊区)=0.020
于是决策树可以以“院子大小”为标准,进一步划分,如下所示:
对于只有2个车库的房子,房子具备的属性以及张三对于购买这些房子的意愿如下所示:
院子 | 楼层数 | 地理位置 | 是否愿意购买 |
---|---|---|---|
小 | 3 | 市中心 | 是 |
小 | 3 | 城郊 | 是 |
大 | 3 | 市中心 | 是 |
小 | 2 | 市中心 | 否 |
大 | 2 | 城郊 | 否 |
此表格的熵为:
H ( S ) = − 3 5 l o g 2 3 5 − 2 5 l o g 2 2 5 = 0.971 H(S)=-\frac{3}{5} log_{2}\frac{3}{5}-\frac{2}{5} log_{2}\frac{2}{5}=0.971 H(S)=−53log253−52log252=0.971
其中每个属性的信息增益:
G ( S , 院 子 ) = H ( S ) − ∣ S 大 ∣ ∣ S ∣ H ( S 大 ) − ∣ S 小 ∣ ∣ S ∣ H ( S 小 ) = 0.020 G(S,院子)=H(S)-\frac{|S_{大}|}{|S|}H(S_{大})-\frac{|S_{小}|}{|S|}H(S_{小})=0.020 G(S,院子)=H(S)−∣S∣∣S大∣H(S大)−∣S∣∣S小∣H(S小)=0.020
G ( S , 楼 层 数 ) = H ( S ) − ∣ S 2 ∣ ∣ S ∣ H ( S 2 ) − ∣ S 3 ∣ ∣ S ∣ H ( S 3 ) = 0.971 G(S,楼层数)=H(S)-\frac{|S_{2}|}{|S|}H(S_{2})-\frac{|S_{3}|}{|S|}H(S_{3})=0.971 G(S,楼层数)=H(S)−∣S∣∣S2∣H(S2)−∣S∣∣S3∣H(S3)=0.971
G ( S , 地 理 位 置 ) = H ( S ) − ∣ S 市 中 心 ∣ ∣ S ∣ H ( S 市 中 心 ) − ∣ S 郊 区 ∣ ∣ S ∣ H ( S 郊 区 ) = 0.020 G(S,地理位置)=H(S)-\frac{|S_{市中心}|}{|S|}H(S_{市中心})-\frac{|S_{郊区}|}{|S|}H(S_{郊区})=0.020 G(S,地理位置)=H(S)−∣S∣∣S市中心∣H(S市中心)−∣S∣∣S郊区∣H(S郊区)=0.020
由此易得完整的决策树,如下所示: