【机器学习实战】Ch 6:决策树

训练决策树

Scikit-Learn使用分类和回归树算法来训练决策树
工作原理: 使用单个特征k和阈值tk将训练集分为两个子集, 通过选择(k, tk)最小化成本函数/搜索最纯子集。并重复该过程, 直到到达最大深度或找不到减少不纯度的分割, 停止递归。 其他一些超参数也可以控制停止条件(稍后叙述)

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

iris = load_iris()
X = iris.data[:, 2:]       # petal length and width
y = iris.target

tree_clf = DecisionTreeClassifier(max_depth=2)
tree_clf.fit(X, y)

做出预测和估计概率

tree_clf.predict_proba([[5, 1.5]])
# array([[0.        , 0.90740741, 0.09259259]])

tree_clf.predict([[5, 1.5]])
# array([1])

基尼不纯度或熵

默认使用基尼不纯度进行测量, 但可以将超参数criterion设置为“entropy”选择作为熵作为不纯度的测量方式。

基尼不纯度倾向于从树枝中分裂出最常见的类别,且计算速度略快一些, 而熵倾向于产生更平衡的树。

正则化超参数

决策树是非参数模型:极少对训练数据做出假设, 训练之前没有确定参数的数量。 如果不加限制, 树的结构将跟随训练集变化, 严密拟合, 并且很有可能过拟合。

正则化: 为了避免过拟合, 需要在训练过程中降低决策树的自由度:

max_depth					最大深度,默认None,表示无限制
min_samples_split 			分裂前节点的最小样本数
min_samples_leaf			叶节点必须有的最小样本数量
min_weight_fraction_leaf	与min_samples_leaf一样, 但表现为加权实例总数的占比
max_leaf_nodes				最大叶节点的数量
max_features				分裂每个节点评估的最大特征数量

也可以先不加约束的训练模型,再对不必要的节点进行剪枝(删除)

回归

from sklearn.tree import DecisionTreeRegressor

tree_reg = DecisionTreeRegressor(max_depth=2)
tree_reg.fit(X, y)

与分类树不同, 每个节点预测一个值而不是一个类别; 以最小化MSE的方式拆分训练集而不是以最小化来拆分训练集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值