这篇文章主要是带来机器学习西瓜书决策书这一章的编程习题。相比机器学习实战中的对应章节有了一定的难度上的提升,主要体现在数据集中加入了连续值,对于连续值的处理不能够和离散值同等对待,否则其不同值各自分为一类显然信息增益最大,但这样在实际的应用中并没有意义甚至适得其反。这就涉及到了对于连续值的处理。
连续值处理
最简单的策略就是采用二分法对于连续值进行处理,这正是C4.5决策树算法中采用的机制。
习题4.3
数据集:
青绿,蜷缩,浊响,清晰,凹陷,硬滑,0.697,0.46,好瓜
乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,0.744,0.376,好瓜
乌黑,蜷缩,浊响,清晰,凹陷,硬滑,0.634,0.264,好瓜
青绿,蜷缩,沉闷,清晰,凹陷,硬滑,0.608,0.318,好瓜
浅白,蜷缩,浊响,清晰,凹陷,硬滑,0.556,0.215,好瓜
青绿,稍蜷,浊响,清晰,稍凹,软粘,0.403,0.237,好瓜
乌黑,稍蜷,浊响,稍糊,稍凹,软粘,0.481,0.149,好瓜
乌黑,稍蜷,浊响,清晰,稍凹,硬滑,0.437,0.211,好瓜
乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,0.666,0.091,坏瓜
青绿,硬挺,清脆,清晰,平坦,软粘,0.243,0.267,坏瓜
浅白,硬挺,清脆,模糊,平坦,硬滑,0.245,0.057,坏瓜
浅白,蜷缩,浊响,模糊,平坦,软粘,0.343,0.099,坏瓜
青绿,稍蜷,浊响,稍糊,凹陷,硬滑,0.639,0.161,坏瓜
浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,0.657,0.198,坏瓜
乌黑,稍蜷,浊响,清晰,稍凹,软粘,0.36,0.37,坏瓜
浅白,蜷缩,浊响,模糊,平坦,硬滑,0.593,0.042,坏瓜
青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,0.719,0.103,坏瓜
对应的代码:
import math
import matplotlib
import matplotlib.pyplot as plt
from numpy import *
def getDataSet():
with open('ex4-3.txt','r') as f:
lines=f.readlines()
DataSet=[]
LabelSet=[]
index=0
for i in lines:
LabelSet.append(i.strip().split(',')[-1])
temp=[];temp.extend(i.strip().split(',')[:-3]);temp.append(float(i.strip().split(',')[-<