一、决策树的基本认识
决策树是一种需要监督学习分类方法:在已知样本属性和分类结果的情况下,通过利用if-then结构(画出分类节点),对样本的属性增加条件以进行样本分类。 画决策树,关键点就是在于如何找出能够使分类错误率最小的分类节点?具体来说,有以下几个问题。问题①:如何确定属性的先后顺序?问题②:如何不要过拟合?
二、信息论基础
(一)信息熵
-
定义:熵是不确定性的量度,信息熵可以理解为信息混乱的程度 -
如何计算信息熵: 在完全不知道属性的情况下,猜测32支球队,哪一支将会是冠军? 使用二分法进行猜测,最多猜5次一定能猜中冠军球队。log2(32)=5,我们说信息熵等于5比特。 如果开放一些属性,比如获胜球队有十年以上的经验。那么根据信息论,只需要小于5的次数,就能猜中冠军球队。这是因为获取的信息帮助我们减少了分类的不确定性,系统混乱程度降低,信息熵减小,猜测的次数随之变少。
由此我们可以解答问题①:如果得知某些属性可以更多地减少不确定性,那么就应该先把这些属性放在前面。
(二)信息增益
信息增益:得知某些特征后,信息熵减少的程度。 信息增益是选择属性的关键指标
(三)常见使用的算法
- ID3:信息增益最大的准则
- C4.5:信息增益比最大的原则。信息增益比=信息增益x(1/惩罚参数)。如果特征少,惩罚参数就小,信息增益比就大。可以防止过拟合。
- CART分类树:使用了基尼系数
(四)决策树的API
决策树有很多API,这里介绍的是DecisionTreeClassifier class sklearn.tree.DecisionTreeClassifier(criterion=‘gini’,max_depth=None,random_state=None)
- criterion默认是gini系数,也可以选择信息增益的熵entropy
- max_depth:树的深度大小
- random_state:随机数种子
(五)决策树的结构、本地保存
1.sklearn.tree.export_graphviz()该函数能够导出DOT格式 tree.export_graphviz(estimator,out_file=‘tree.dot’,features_names=[","]) 2.在网页上下载graphviz.exe:(能够将dot文件转换为pdf、png) 3.在cmd中运行命令:$dot-Tpng tree.dot -o tree.png
三、决策树的生成
例子:根据泰坦尼克号上乘客年龄、房间、票价、性别等信息,预测他们是否存活。其中age数据存在缺失。 数据:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,export_graphviz
import pandas as pd
def decision():
"""
用决策树对泰坦尼克号进行生死预测
:return:None
"""
titan=pd.read_csv()
x=titan[['pclass','age','sex']]
y=titan[['survived']]
x['age'].fillna(x['age'].mean(),inplace=True)
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
dict=DictVectorizer(sparse=False)
x_train=dict.fit_transform(x_train.to_dict(orient='records'))
x_test=dict.fit_transform(x_test.to_dict(orient='records'))
dec=DecisionTreeClassifier()
dec.fit(x_train,y_train)
print("预测的准确率:",dec.score(x_test,y_test))
export_graphviz(dec,out_file='./tree.dot',feature_names=['年龄','Pclass=1st', 'Pclass=2nd', 'Pclass=3rd', 'female', 'male'])
return None
if __name__=='__main__':
decision()
四、决策树的优缺点
优点:
- 理解简单,数目可视化
- 需要很少的数据准备,其他技术通常需要归一化
缺点: - 可能过拟合,也就是树过于复杂
改进: - 减枝cart算法(决策树API中已经实现,随机森林有介绍)
|