决策树

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)

基尼系数

也是算信息熵的算法,但是速度比信息熵算法快,DecisionTreeClassifier默认使用

image

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的超参数

  1. max_depth 最大深度
  2. min_samples_split 一个节点至少要有多少个样本数据才继续划分
  3. min_samples_leaf 叶子节点最少要有多少样本
  4. 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)
上一篇下一篇

猜你喜欢

热点阅读