介绍
决策树一听名字,欸,就是来帮助我们做决策的,同时一个树字也点名我们的结构模型。同时也属于我们监督学习当中的算法之一。举一个很简单的例子,我现在要对某人的贷款是否发放做一个评估,这个时候会有年龄,有无工作,有无房子,信用情况做一个评估,我们就可以通过已有的条件来构造我们的树。
决策树主要用的是ID3算法、C4.5、CART这三种算法,这里我们以ID3为例,一起来学习决策树吧
ID3算法
我们的大致步骤就是初始化我们的特征集合和数据,然后去计算我们的信息熵,条件熵,选择信息增益比大的来作为我们的当前决策的结点,我们在下面着重介绍我们的信息熵,条件熵以及信息增益
信息熵
熵是我们高中化学里面所接触的一个知识,熵越大,越不稳定,这里的信息熵同理,再来看看这烦人的公式
我们直接用我们刚刚的例子来说这个公式
我们去查找的其实就是我们的类别的值,我们将类别所表示的是or否进行一个统计,然后代入公式
信息熵=-(是的概率)log2(是的概率)-(否的概率)log2(否的概率)
信息熵=-(9/15)log2(9/15)-(6/15)log2(6/15)
这样就将我们的信息熵给求出来了,相对于晦涩的公式,直接的用法更为直接
条件熵
条件c其实就有点像我们高中所学的附加条件就是那种p(a|b)的形式,我们还是先来看看公式吧
不要想得那么复杂,其实还是很简单的,就是求我们,在另外的条件下,所导致我们的类别不同的概率
求的就是我们在其他条件下,由于我取值不同,对于类别的影响,这里我们以年龄为例,在我们的年龄之后一共有5名青年,然后有2名青年为是,3名青年为否,然后和我们的信息熵的公式差不多,一样的-(所占比例)log2(所占比例)的和,好的求和 over,其他以此内推
再一次将我们求出的熵他们所占的比列
条件熵=1/5(青年所占比例)*0.971+1/5(中年所占比例)*0.971+1/5(老年所占比例)*0.7219
信息增益
我们的信息增益就很简单啦,直接信息熵-条件熵 over
代码
我们在这里就直接给大家介绍CKlearn的模块
def train_tree(*data): x_train, x_test, y_train, y_test=data #测试集类别 训练集类别 测试集结果 训练集结果 clf=DecisionTreeClassifier()#选择决策树 clf.fit(x_train,y_train)#学习 print("学习模型预测成绩:{:.4f}".format(clf.score(x_train, y_train))) print("实际模型预测成绩:{:.4f}".format(clf.score(x_test, y_test))) #返回学习模型 return clf