认识决策树
决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法
怎么理解这句话?通过一个对话例子
决策树分类原理详解
为了更好理解决策树具体怎么分类的,我们通过一个问题例子?
如何对这些客户进行分类预测?你是如何去划分?
有可能你的划分是这样的
那么我们怎么知道这些特征哪个更好放在最上面,那么决策树的真实划分是这样的
信息和消除不确定性是相联系的
当我们得到的额外信息越多的话,那么我们猜测的代价越小(猜测的不确定性减小)
回到我们前面的贷款案例,怎么去划分?可以利用当得知某个特征(比如是否有房子)之后,我们能够减少的不确定性大小。越大我们可以认为这个特征很重要。那怎么去衡量减少的不确定性大小呢?
这里引入一个信息论的概念,信息增益
信息增益表示得知特征X的信息而息的不确定性减少的程度使得类Y的信息熵减少的程度
这样根据信息增益的大小,对特征进行排列,可以得到我们的决策树.
示例
这里我们读取约会集中的数据,使用决策树进行预测
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np
def tree_demo():
# 读取数据
data=pd.read_csv("datingTestSet2.txt",sep="\t")
# 划分特征值和目标值
feature_names=data.iloc[:,0:3].columns.values
# 标准化
transfer=StandardScaler()
target=data.iloc[:,-1:]
new_data=transfer.fit_transform(data.iloc[:,0:3])
target=np.array(target["target"])
x_train,x_test,y_train,y_test=train_test_split(new_data,target,random_state=20)
print(x_test,x_test.shape)
print(x_train,x_train.shape)
estimator=DecisionTreeClassifier(criterion="entropy")
estimator.fit(x_train,y_train)
print("准确度",estimator.score(x_test,y_test))
#可视化决策树
export_graphviz(estimator,out_file="./dating.dot",feature_names=feature_names)
在线可视化决策树的链接
http://graphviz.herokuapp.com/
将dot文件中的内容拷贝到网站中,效果如下: