1、决策树之信息论基础
决策树思想来源非常朴素,程序设计中的条件分支结构(if-else),最早的决策树就是利用这类结构分割数据的一种分类学习方法。
例:
银行贷款例子(使用决策树划分是否贷款),此处特征为两个:房子,工作:
香农,信息论创始人,1948年发表论文-通信的数学原理,奠定了现代信息论的基础。
信息的单位:比特
信息熵和消除不确定性相关联。
2、决策树的划分及案例
(1)决策树划分依据
信息增益:
示例:贷款申请如下表:
(2)常见决策树使用的算法
ID3:信息在增益最大的准则
C4.5:信息增益比 最大的准则
CART:
回归树:平方误差最小
分类树:基尼系数最小的准则,在sklearn中可以选择划分的默认原则
(3)sklearn决策树API:
sklearn.tree.DecisionTreeClassifier
示例:
数据: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
处理流程:
实现代码:
from sklearn.tree import DecisionTreeClassifier , export_graphviz
from sklearn.feature_extraction import DictVectorizer
# from sklearn.cross_validation import train_test_split # 已经更新为下边api
from sklearn.model_selection import train_test_split
import pandas as pd
def dicision():
'''
对泰坦尼克号预测生死
数据地址:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
:return None
'''
# 读取数据
titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
# 处理数据,找出特征值和目标值
x = titan[["pclass", 'age', 'sex']] #特征值
y = titan[['survived']] # 目标值
# print(x)
# 缺失值处理
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)
# 进行处理(特征工程)特征->类别-> one-hot编码
dict = DictVectorizer(sparse=False)
x_train = dict.fit_transform(x_train.to_dict(orient='records'))
print(dict.get_feature_names())
x_test = dict.fit_transform(x_test.to_dict(orient='records'))
# print (x_train)
# 使用决策树进行预测
dec = DecisionTreeClassifier(max_depth=8) # 树深度影响预测结果
dec.fit(x_train, y_train)
# 预测准确率
print("预测的准确率: ", dec.score(x_test, y_test))
# 导出决策树的结构
export_graphviz(dec, out_file="C:\\Users\\Administrator\\Desktop\\机器学习\\tree.dot", feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=女性', 'sex=男性'])
return None
if __name__== "__main__":
dicision()
执行结果:
['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male'] 预测的准确率: 0.7963525835866262 |
安装:graphviz 观察树的结构
下载地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html
Windows下安装参考:https://www.cnblogs.com/onemorepoint/p/8310996.html
进入windows命令行界面,cd 切换到tree.dot
所在的路径,执行
dot -Tpng tree.dot -o tree.png
C:\Users\Administrator\Desktop\机器学习>F:\Graphviz\bin\dot.exe -Tpng tree.dot -o tree.png
C:\Users\Administrator\Desktop\机器学习> |
转化后树的结构如图:
(4)决策树的优缺点及改进
优点:简单的理解和解释,树木可视化;需要很少的数据准备,其他技术通常需要数据归一化。
缺点:决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合
改进:减枝cart算法(决策树API中已经实现);随机森林。