CART决策树回归

不同于分类决策树,回归决策树返回预测值
以CART决策树为例,ID3,C4.5的决策树是不能用于回归的,只能用于分类。

决策树回归的原理:

M S E = 1 m ∑ i = 1 n ( y i − y ^ i ) 2 MSE=\frac{1}{m}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 MSE=m1i=1n(yiy^i)2(mean square error)损失函数采用这个,通过不断计算每个分类下的相应分类结果后,实际值与预测值的相差平方的平均

行程的结果树
最终结果树
在这里插入图片描述
参数细节
参数设置:

dtree2 = tree.DecisionTreeRegressor(max_depth=4,# 最大的挖掘深度
                                  min_samples_leaf=200, # 最小叶子数目
                                  min_samples_split=20 # 决策树划分前,父节点最小样本个数
                                  )

对应上图的结果,mse为损失函数,samples为样本数,value为最后的预测值。
上述代码告诉计算机,当分层数达到4层,或者叶子中的样本数小于200,最小的父节点的样本分层前小于20,决策树都会停止生长,是前剪枝的过程。

参数调整对比

参数调整设置对比:

dtree2 = tree.DecisionTreeRegressor(max_depth=5,# 最大的挖掘深度
                                  min_samples_leaf=400, # 最小叶子数目
                                  min_samples_split=600 # 决策树划分前,父节点最小样本个数
                                  )

在这里插入图片描述
在这里插入图片描述
叶子生长5层,停止的生长的叶子节点要根据min_samples_leaf,min_samples_split来决定,实际这两个效果是相同的,叶子节点数目和父节点的分裂样本数这个参数都可以应用于一个叶子。导致参数停止。

import toad
import pandas as pd
import numpy as np
import pydotplus
from IPython.display import Image
from sklearn.externals.six import StringIO
import os
from sklearn import tree
import pydot

pd.set_option('display.max_columns', None)
c = pd.read_csv(path)
anlysis = c[['ever0', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7']]

anlysis.columns = ['target', 'col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8']
dtree2 = tree.DecisionTreeRegressor(max_depth=5,# 最大的挖掘深度
                                  min_samples_leaf=400, # 最小叶子数目
                                  min_samples_split=600 # 决策树划分前,父节点最小样本个数
                                  )
# 选定x和y变量
anlysisx = anlysis.drop('target', axis=1)

anlysisy = anlysis['target']
combiner2 = toad.transform.Combiner() # 分箱操作

combiner2.fit(anlysisx, anlysisy, method='chi', min_samples=0.05)  # 设定方差,分箱中的数目占比

anlysisx_bin = combiner2.transform(anlysisx)
from toad.plot import bin_plot

bin_plot(anlysisxdf_bin,x='col1',target='target')

toad为厚本金融团队内部孵化的制作评分卡的一个金融包

dtree2 = dtree2.fit(anlysisx_bin, anlysisy)
# 
anlysisxdf_bin = anlysisx_bin.copy()

anlysisxdf_bin['target'] = anlysisy
with open("./anlysisxdf.dot", 'w') as f:
    tree.export_graphviz(dtree2, out_file=f)
dot_data2 = StringIO()
tree.export_graphviz(dtree2, out_file=dot_data2,
                    feature_names=anlysisx_bin.columns,
                    class_names=['target'],
                    filled=True, rounded=True,
                    special_characters=True)
graph2 = pydotplus.graph_from_dot_data(dot_data2.getvalue())

graph2 = graph2.create_png()

Image(graph2)

数据地址:数据集
提取码:zqme

注意点:提前安装Graphviz图形工具,并且调取pydot包进行图形修饰
CART决策树在GBDT(梯度提升迭代决策树)应用

CART决策树是GBDT的基本组成单元,
GBDT在做变量筛选时,每个特征j在单棵决策树的重要性 J j 2 ^ ( T ) = ∑ t = 1 L − 1 i t 2 ^ 1 ( v t = j ) \hat{J_j^2}(T)=\sum_{t=1}^{L-1}\hat{i_t^2}1(v_t=j) Jj2^(T)=t=1L1it2^1(vt=j)
其中L是单棵决策树每个分支的深度,即每个分支叶子结点的个数,L-1是非叶子几点的结点数,T的意思是决策树。
变量在M棵决策树的重要性,
J j 2 ^ = 1 M ∑ m = 1 M J j 2 ^ ( T m ) r \hat{J_j^2}=\frac{1}{M}\sum_{m=1}^{M}\hat{J_j^2}(T_m)r Jj2^=M1m=1MJj2^(Tm)r
T m T_m Tm代表第 m m m棵树r代表调参系数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值