决策树

决策树分类器:

DecisionTreeClassifier既能执行二分类(标签为[0,1]),也能执行多分类(标签为[0,1,...,k-1])

DecisionTreeClassifier采用输入两个数组:数组X,用 [n_samples, n_features] 的方式来存放训练样本。整数值数组Y,用 [n_samples] 来保存训练样本的类标签:

from sklearn import tree
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)

执行通过之后,可以使用该模型来预测样本类别:

clf.predict([[2., 2.]])

也可以预测每个类的概率,这个概率是叶中相同类的训练样本的分数

clf.predict_proba([[2., 2.]])

经过训练,我们可以使用 export_graphviz 导出器以 Graphviz 格式导出决策树:

决策树回归器:

DecisionTreeClassifier决策树通过使用 DecisionTreeRegressor 类也可以用来解决回归问题。如在分类设置中,拟合方法将数组X和数组y作为参数,只有在这种情况下,y数组预期才是浮点值

多值输出问题:

构建能够同时预测所有n个输出的单个模型。

这需要以下更改:

1、叶中存储n个输出值,而不是一个

2、通过计算所有n个输出的平均减少量来作为分类标准

该模块通过在 DecisionTreeClassifierDecisionTreeRegressor 中实现该策略来支持多输出问题。如果决策树与大小为 [n_samples, n_outputs] 的输出数组Y向匹配,则得到的估计器:

1、predict是输出n_output的值

2、在predict_proba上输出n_output数组列表

Python代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
# Create a random dataset
rng = np.random.RandomState(1)
X = np.sort(200*rng.rand(100,1) - 100, axis = 0)
#axis = 0 为列维度
y = np.array([np.pi * np.sin(X).ravel(),np.pi * np.cos(X).ravel()]).T
#ravel()将多维数组转为一维数组,返回的是视图,如果修改会修改原始矩阵,.T为求数组的转置数组
y[::5,:] += (0.5 - rng.rand(20,2))

#fit regression model
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_3 = DecisionTreeRegressor(max_depth=8)
regr_1.fit(X,y)
regr_2.fit(X,y)
regr_3.fit(X,y)

#predict
X_test = np.arange(-100.0,100.0,0.01)[:,np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
y_3 = regr_3.predict(X_test)

#plot the result
plt.figure()
s = 25
plt.scatter(y[:,0],y[:,1],c="navy",s=s,edgecolor='black',label='data')
plt.scatter(y_1[:, 0], y_1[:, 1], c="cornflowerblue", s=s,edgecolor="black", label="max_depth=2")
plt.scatter(y_2[:, 0], y_2[:, 1], c="red", s=s,edgecolor="black", label="max_depth=5")
plt.scatter(y_3[:, 0], y_3[:, 1], c="orange", s=s,edgecolor="black", label="max_depth=8")

plt.xlim([-6,6])
plt.ylim([-6,6])
#限定x轴、y轴上下限制
plt.xlabel("target 1")
plt.ylabel("target 2")
plt.title("Multi-output Decision Tree Regression")
plt.legend(loc = "best")
plt.show()

figure:

该决策树用于同时预测给定单一潜在特征的圆的噪声x和y观测值。因此,它学习近似圆的局部线性回归。我们可以看到,如果树的最大深度(由max_depth参数控制)设置得过高,决策树就会学习到训练数据的过于精细的细节,并从噪声中学习,即过度拟合。

决策树算法

ID3(Iterative Dichotomiser 3)由 Ross Quinlan 在1986年提出。该算法创建一个多路树,找到每个节点(即以贪心的方式)分类特征,这将产生分类目标的最大信息增益。决策树发展到其最大尺寸,然后通常利用剪枝来提高树对未知数据的泛化能力。

C4.5 是 ID3 的后继者,并且通过动态定义将连续属性值分割成一组离散间隔的离散属性(基于数字变量),消除了特征必须被明确分类的限制。C4.5 将训练的树(即,ID3算法的输出)转换成 if-then 规则的集合。然后评估每个规则的这些准确性,以确定应用它们的顺序。如果规则的准确性没有改变,则需要决策树的树枝来解决。

C5.0 是 Quinlan 根据专有许可证发布的最新版本。它使用更少的内存,并建立比 C4.5 更小的规则集,同时更准确。

CART(Classification and Regression Trees (分类和回归树))与 C4.5 非常相似,但它不同之处在于它支持数值目标变量(回归),并且不计算规则集。CART 使用在每个节点产生最大信息增益的特征和阈值来构造二叉树。

scikit-learn 使用 CART 算法的优化版本。

算法具体思想再找时间补写博文。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值