决策树
2018-11-19 本文已影响0人
61etj
决策树
image将问题分为多个相关联的小问题挨个解决,得到最终结果
为什么取x,y,为什么是2.4和1.8呢?
信息熵
image数据的不确定性, 信息熵越大,不确定性越大
p:信息分类的比例
例:左边有3个分类,每个分类占的比例为1/10,2/10,7/10. 右边为1,0,0分别计算出信息熵如图
image可以看出信息熵越小信息混乱程度越低
利用信息熵构建决策树
思路:遍历每个维度,将维度做排序,然后根据排序取出第一个和第二个中间的值,然后进行划分,大于等于中间的值在左子树,小于在右子树,然后把左子树的元素和右子树的y值分别拿去计算信息熵。如果小于当前信息熵最小值就保存起来。之后取第二个元素和第三个元素中间值,以此类推,寻找出最小的信息熵的值,以及左子树和右子树。当第一轮这样的循环结束后深度为1,如果信息熵过高,就可以在左子树中再进行以上步骤增加决策树的深度。
scikit-learn
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.target
from sklearn.tree import DecisionTreeClassifier
dt_clf = DecisionTreeClassifier(max_depth=2, criterion="entropy", random_state=42) # max_depth最大深度,entropy是信息熵算法
dt_clf.fit(X, y)
y_predict = dt_clf.predict(X)
基尼系数
image也是算信息熵的算法,但是速度比信息熵算法快,DecisionTreeClassifier默认使用
scikit-learn
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.target
from sklearn.tree import DecisionTreeClassifier
dt_clf = DecisionTreeClassifier(max_depth=2, criterion="gini", random_state=42) #gini基尼系数算法
dt_clf.fit(X, y)
DecisionTreeClassifier的超参数
- max_depth 最大深度
- min_samples_split 一个节点至少要有多少个样本数据才继续划分
- min_samples_leaf 叶子节点最少要有多少样本
- max_leaf_nodes 最多叶子节点数
决策树解决回归问题
在回归问题中,同样将样本进行决策树划分,最终结果取划分区域那个子节点的平均数
scikit-learn
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
boston = datasets.load_boston()
X = boston.data
y = boston.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
from sklearn.tree import DecisionTreeRegressor
dt_reg = DecisionTreeRegressor()
dt_reg.fit(X_train, y_train)
dt_reg.score(X_test, y_test)