决策树回归模型和集合算法

1. 决策树概述

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率 ——百度百科

决策树就是我们通常所说的多叉树
决策树回归模型的核心思想:相似的输入必会产生相似的输出
决策树每层对应一个样本特征
使用树结构,对于海量数据可以提高检索效率

2. 构建决策树回归模型的基本思想

构建决策树的基本步骤:a、从训练样本矩阵中选择第一个特征进行子表划分,是每个字表中的该特征的值全部相同;b、在每一个字表中选择下一个特征按照同样的规则继续划分更小的子表;c、不断重复步骤b直到所有的特征全部使用完毕,此时便得到叶级子表,每个叶级子表种的特征值完全相同
预测样本根据决策树不同层级的特征值进行查找,选择对应的叶级子表,用该叶级子表的输出,通过平均(回归)、或投票(分类)为带预测样本提供输出
随着子表的不断划分,信息熵(信息的混乱程度)越来越小,信息越来越纯净,数据越来越有序

3. 决策树回归模型api

api:sklearn.tree
import sklearn.tree as st
#创建决策树回归器模型,其中max_depth表示树的深度/层数
model = st.DecisionTreeRegressor(max_depth=)

代码示例:

import sklearn.datasets as sd
import sklearn.utils as su
import numpy as np
import sklearn.tree as st
import sklearn.metrics as sm
import sklearn.ensemble as se
import matplotlib.pyplot as plt# 加载波士顿地区房屋价格数据集
boston = sd.load_boston()
"""
print(boston.feature_names)  输入集特征名称
['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO' 'B' 'LSTAT']
[犯罪率 住宅用地比例 商业用地比例 是否靠河 空气质量 房屋数 年限 距中心区距离 路网密度 房产税 师生比 黑人比例 低地位人口比例]
print(boston.data.shape)  输入集大小
print(boston.target.shape)  输出集大小
"""
# 打乱输入数据集,对训练集和测试集进行拆分
x, y = su.shuffle(boston.data, boston.target, random_state=7)  # random_state 随机种子 作用:使用相同的随机种子,多次随机打乱的结果相同
train_size = int(len(x)*0.8)
train_x, test_x, train_y, test_y = x[:train_size], x[train_size:], y[:train_size], y[train_size:]
# 构建决策树模型
model = st.DecisionTreeRegressor(max_depth=4)
# 模型训练
model.fit(train_x, train_y)
# 模型测试
res_y = model.predict(test_x)
# 模型评分
print("R2得分:", sm.r2_score(test_y, res_y))
print("平均绝对值误差:", sm.mean_absolute_error(test_y, res_y))

输出结果
R2得分: 0.8202560889408635
平均绝对值误差: 2.76709759407969

4. 集合算法

特征工程的优化不必用尽所有特征,叶级子表种允许混杂不同的特征值,以此降低决策树的层数,在精度牺牲可接受的情况下提高模型的性能通常情况下可以优先选择使信息熵减少量最大的特征特征作为划分子表的依据

1. 概念
根据多种不同模型的预测结果,利用平均(回归)或投票(分类)的方式得到最终的预测结果
2. 正向激励
首先为样本矩阵中的样本随机分配初始权重,构建一颗带权重的决策树,在由该决策树预测输出时,通过加权平均或加权投票的方式产生预测值。
将训练样本带入模型,预测其输出,对那些预测值和实际值偏差加大的样本,提高其权重,形成第二个决策树。重复以上过程,形成若决策树。
api:sklearn.ensemble.AdaBoostRegressor
代码示例:

# 正向激励
# 构建决策树
model2 = st.DecisionTreeRegressor(max_depth=4)
"""
自适应增长决策树回归模型
n_estimators 指定构建的决策树模型的数量 具体数字根据实际情况设定
random_state 随机数种子
"""
model3 = se.AdaBoostRegressor(model2, n_estimators=400, random_state=7)
# 训练
model3.fit(train_x, train_y)
# 测试
res_y3 = model3.predict(test_x)
# 评分
print("R2:", sm.r2_score(test_y, res_y3), '\n', sm.mean_absolute_error(test_y, res_y3))

输出结果
R2: 0.9083427831010076
2.163353134343898
结果较之前有一定的优化
3. 特征重要性
特征重要性是决策树训练过程中的副产品,根据每个特征划分子表前后的信息熵减少量决定了特征的重要程度
每个特征重要性存储在训练得到的模型对象的属性feature_importances_中
api: model.feature_importances_

下边绘制普通决策树和正向激励的特征重要性柱状图

# 获取模型的特征重要性
fi = model.feature_importances_
fi3 = model3.feature_importances_
# 画图
x = np.arange(fi.size)
features = boston.feature_names
plt.figure('Feature Importances', facecolor='lightgray')
plt.subplot(211)
plt.title('DT festure importances', fontsize=16)
plt.ylabel('feature importance', fontsize=14)
plt.grid(linestyle=':', axis='both')
# 重要性排序
sort_indicts = fi.argsort()[::-1] # 下标排序
fi = fi[sort_indicts]
plt.bar(x, fi, 0.8, color='dodgerblue', label='DT festure importances')
plt.xticks(x, features[sort_indicts]) # 修改x轴刻度
plt.legend()
plt.tight_layout()plt.subplot(212)
plt.title('AB festure importances', fontsize=16)
plt.ylabel('feature importance', fontsize=14)
plt.grid(linestyle=':', axis='both')
sort_indicts3 = fi3.argsort()[::-1]
fi3 = fi3[sort_indicts3]
plt.bar(x, fi3, 0.8, color='orangered', label='AB festure importances')
# 调整x轴刻度
plt.xticks(x, features[sort_indicts3])plt.legend()
plt.tight_layout()
plt.show()


4. 随机森林
自助聚合
以又放回的随机抽样的方式,从原始样本中又放回的随机抽取部分样本构建决策树,形成多课包含不同样本的决策树,
削弱某些强势样本对模型预测结果的影响,提高模型的泛化特性
没有api,需要自己根据逻辑手写代码
随机森林
随机森林是在以自助聚合为基础,每次构建决策树模型,不仅随机选取部分样本,而且还随机选取部分特征,
这样的集合算法不仅削弱强势样本对预测结果的影响,还削弱了强势特征对预测结果的影响,是模型的预测更加泛化
api:sklearn.ensemble.RandomForestRegressor
代码示例:

"""
RandomForestRegressor:随机森林api
参数:
max_depth 决策树的最大深度
n_estimators 随机森林的决策树的数量
min_samples_split 决策树最小的样本数量
"""
model4 = se.RandomForestRegressor(max_depth=10, n_estimators=10000, min_samples_split=2)
model4.fit(train_x, train_y)
res_y4 = model4.predict(test_x)
print(sm.r2_score(test_y, res_y4), '\n', sm.mean_absolute_error(test_y, res_y4))

输出结果:
0.9269176455289898
1.8766746146314175
与正向激励比较,得分更高,误差更小

机器学习(五)—— 决策树回归模型和集合算法相关推荐

  1. 【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型

    [火炉炼AI]机器学习006-用决策树回归器构建房价评估模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplo ...

  2. Python实现决策树回归模型(DecisionTreeRegressor算法)并应用网格搜索算法调优项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 决策树除了能进行分类分析,还能进行回归分析,即预测连续变量,此时 ...

  3. 【干货】机器学习中的五种回归模型及其优缺点

    http://blog.itpub.net/31542119/viewspace-2199810/ 线性和逻辑斯蒂(Logistic)回归通常是是机器学习学习者的入门算法,因为它们易于使用和可解释性. ...

  4. 机器学习分类与回归模型

    一.KNN算法 1.既可用于分类也可用于回归 2.主要思想是找到预测样本中最近的K个邻居(一般通过欧式距离或者曼哈顿距离公式计算),用K个邻居的目标值中占多数的目标代表预测样本的目标 分类:K个邻居投 ...

  5. 【机器学习】决策树(下)——CART算法及剪枝处理

    前言:上篇博文已经介绍了ID3.C4.5生成决策树的算法.由于上文使用的测试数据以及建立的模型都比较简单,所以其泛化能力很好.但是,当训练数据量很大的时候,建立的决策树模型往往非常复杂,树的深度很大. ...

  6. 机器学习 | 关于决策树分类模型,你学得怎么样了?

    这是一篇关于决策树分类模型的详解,身边的朋友看完的都说:这回透彻了! 目录 0 写在前面 1 决策树分类模型 1.1 信息熵 1.2 基尼系数 2 决策树分类模型的建立 3 总结一下 0 写在前面 机 ...

  7. 【机器学习基础】深入讨论机器学习 8 大回归模型的基本原理以及差异!

    作者 | 台运鹏 几乎每个机器学习从业者都知道回归,其中一些人可能认为这没什么大不了的,只是从参数之间的切 换罢了.本文将阐明每种回归算法的细节,以及确切的区别.包括 : OLS Weighted L ...

  8. r语言svr模型_使用R语言建立一个决策树回归模型

    决策树是一种简单但使用广泛的分类算法,根据目标变量的类型,决策树分为分类决策树(目标变量为因子型)与回归决策树(目标变量为连续数值型).在这里,我们使用R建议一个回归决策树模型. 决策树简单介绍 对于 ...

  9. 机器学习之逻辑回归模型

    文章目录 分类思想 逻辑回归模型公式 公式推导 sigmoid函数 避免过拟合 降低模型复杂度 加入L1/L2正则项 正则化的作用 增加训练数据 使用逻辑回归模型进行多分类的几种方式 One vs O ...

最新文章

  1. linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
  2. 捕捉SQL2005的Bug!
  3. linux 自动启动shell 和 init概述
  4. 我早年在Google学到的10条经验
  5. [云炬mysql数据库笔记] Work2
  6. UNIX再学习 -- 用户 ID 和组 ID
  7. JavaScript call()函数的应用
  8. diolog js_js组件-js插件-jquery插件-dialog对话框弹层
  9. 利用python绘制雪景图_用AI绘制冬季雪景森林场景插画图片
  10. linux 一次对一个用户限制存取
  11. 【UML】UML基础教程之顺序图、协作图、状态图、活动图、构件图、部署图
  12. 深圳市商务局2022年度中央资金(跨境电子商务企业市场开拓扶持事项)申报指南
  13. 将iTunes降级到12.6版本
  14. 基于springboot开发的停车场管理系统-计算机毕业设计
  15. Visual Basci中的几个函数split(),ubound(),lbound(),instr(),mid().
  16. 国产操作系统能不能完全替代windows,普及大众?
  17. linux 打包压缩文件夹命令/压缩文件
  18. SyntaxHighlighter行号显示错误及代码太长无法换行解决办法
  19. SVN关于previous operation has not finished问题的解决
  20. Win11下安装PSReadLine终端自动补全

热门文章

  1. 0基础学会 守护进程(内附C语言源码)
  2. ST-LINK无法识别;固件升级/降级方法
  3. 游戏进入“冰河世纪”?有了出海和RTC就不怕啦!
  4. 微星主板黑苹果_微星黑科技配电脑省钱秘籍?一招让你的硬件功耗下降更安静凉快...
  5. 瑞芯微推出RV1126性能/案例大评测
  6. 崇左市2021年各校高考成绩查询,2021年广西崇左各高中中考分数线及录取时间结果查询安排...
  7. 使用 dockerfile 构建 WordPress 环境
  8. 仿Windows记事本简要分析 (Java)
  9. stm32f103系列SysTick定时器
  10. moment 获取常用时间范围(本月、上月、本季度、本周、昨天、距离截止时间剩余...等)