目录

介绍

回归模型

特征选择

回归树的生成

回归

结论与分析


可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表。

介绍

在现实世界中,一些关系不是线性的。因此,应用线性回归分析这些问题是不合适的。为了解决这个问题,我们可以采用树回归。树回归的主要思想是将问题分成较小的子问题。如果子问题是线性的,我们可以结合所有子问题模型来获得整个问题的回归模型。

回归模型

树回归类似于决策树,它由特征选择,回归树的生成和回归组成。

特征选择

在决策树中,我们根据信息增益选择特征。但是,对于回归树,预测值是连续的,这意味着回归标签对于每个样本几乎是唯一的。因此,经验熵缺乏表征能力。因此,我们利用平方误差作为特征选择的标准,即

其中R m是由回归树除以的空间,fx由下式给出

因此,无论样本的特征是什么,相同空间中的输出都是相同的。R m 的输出是空间中所有样本的回归标签的平均值,即

回归树的特征选择类似于决策树,旨在最小化损失函数,即

回归树的生成

我们首先定义一个数据结构来保存树节点

class RegressionNode():    def __init__(self, index=-1, value=None, result=None, right_tree=None, left_tree=None):self.index = indexself.value = valueself.result = resultself.right_tree = right_treeself.left_tree = left_tree

像决策树一样,假设我们选择了最佳特征及其对应的值js,那么我们将数据溢出

并且每个二进制文件的输出是

回归树的生成与决策树的生成几乎相同,此处不再赘述。您可以阅读实现机器学习的循序渐进指南II——决策树以获取更多详细信息。

def createRegressionTree(self, data):# if there is no featureif len(data) == 0:self.tree_node = treeNode(result=self.getMean(data[:, -1]))return self.tree_nodesample_num, feature_dim = np.shape(data)best_criteria = Nonebest_error = np.infbest_set = Noneinitial_error = self.getVariance(data)# get the best split feature and valuefor index in range(feature_dim - 1):uniques = np.unique(data[:, index])for value in uniques:left_set, right_set = self.divideData(data, index, value)if len(left_set) < self.N or len(right_set) < self.N:continuenew_error = self.getVariance(left_set) + self.getVariance(right_set)if new_error < best_error:best_criteria = (index, value)best_error = new_errorbest_set = (left_set, right_set)if best_set is None:self.tree_node = treeNode(result=self.getMean(data[:, -1]))return self.tree_node# if the descent of error is small enough, return the mean of the dataelif abs(initial_error - best_error) < self.error_threshold:self.tree_node = treeNode(result=self.getMean(data[:, -1]))return self.tree_node# if the split data is small enough, return the mean of the dataelif len(best_set[0]) < self.N or len(best_set[1]) < self.N:self.tree_node = treeNode(result=self.getMean(data[:, -1]))return self.tree_nodeelse:ltree = self.createRegressionTree(best_set[0])rtree = self.createRegressionTree(best_set[1])self.tree_node = treeNode(index=best_criteria[0], value=best_criteria[1], left_tree=ltree, right_tree=rtree)return self.tree_node

回归

回归原理就像二进制排序树,即将节点中存储的特征值与测试对象的相应特征值进行比较。然后,递归转向左子树或右子树 ,如下所示:

def classify(self, sample, tree):if tree.result is not None:return tree.resultelse:value = sample[tree.index]if value >= tree.value:branch = tree.right_treeelse:branch = tree.left_treereturn self.classify(sample, branch)

结论与分析

分类树和回归树可以组合为分类和回归树(CART)。实际上,在生成树后生成树时存在修剪过程。我们跳过它们是因为它有点复杂而且并不总是有效。最后,让我们将回归树与Sklearn中的树进行比较,检测性能如下所示:

Sklearn树回归性能:

我们的树回归性能:

我们的树回归需要比sklearn更长的时间。

可以在MachineLearning中找到本文中的相关代码和数据集  。

有兴趣的小伙伴可以查看上一篇和下一篇。

原文地址:https://www.codeproject.com/Articles/5061172/Step-by-Step-Guide-to-Implement-Machine-Learning-7

实现机器学习的循序渐进指南IX ——树回归相关推荐

  1. 实现机器学习的循序渐进指南IV——逻辑回归

    目录 介绍 逻辑回归模型 参数估计 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 逻辑回归是统计学习中的经典方法,它计算条件概率P(Y|X)并 ...

  2. 实现机器学习的循序渐进指南系列汇总

    之前曾尝试翻译了机器学习中的KNN和决策树,最近这段时间陆续看到这个系列的相关文章,并尝试翻译分析.由于此系列文章直接相对零散,所以有了这篇简单的汇总文章,以帮助有兴趣的小伙伴迅速找到想看的文章. 具 ...

  3. 实现机器学习的循序渐进指南VIII——线性回归

    目录 介绍 回归模型 线性回归 局部加权线性回归 岭回归 套索(Lasso)回归 逐步线性回归 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 通常存在变量之间 ...

  4. 实现机器学习的循序渐进指南II——决策树

    目录 介绍 决策树模型 特征选择 决策树的生成 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 决策原则并不复杂.从根节点开始,将节点中存储的特征值与测试 ...

  5. 实现机器学习的循序渐进指南I——KNN

    目录 介绍 KNN模型 距离计算 选择K 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 K-最近邻(KNN)是一种简单的机器学习算法,其原理是计算测试对 ...

  6. 实现机器学习的循序渐进指南XII——Apriori

    目录 介绍 Apriori模型 频繁项集 关联规则 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 Apriori是一种学习频繁项集和关联规则的算法.Aprio ...

  7. 实现机器学习的循序渐进指南XI——DBSCAN

    目录 介绍 DBSCAN模型 开始 聚类算法 参数估计 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 基于密度的噪声应用空间聚类(DBSCAN)是一种基于密度 ...

  8. 实现机器学习的循序渐进指南X——KMeans

    目录 介绍 KMeans模型 KMEANS 平分KMeans KMEANS ++ 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 KMeans是一种简单的聚类算 ...

  9. 实现机器学习的循序渐进指南VII——Blending Stacking

    目录 介绍 混合(Blending)模型 混合(Blending)架构 混合(Blending)实现 混合(Blending)分类 堆叠(Stacking)模型 堆叠(Stacking)架构 堆叠(S ...

最新文章

  1. 普元EOS开发积累第一篇(常见错误解决方法) 持续更新
  2. fineUI表格控件各属性说明
  3. Index of Java
  4. 入门基础-VC网络编程入门
  5. java猜数字代码,我写的猜数字游戏的java代码!
  6. IO流基本知识总结【字节输入输出流、字符输入输出流、转换流、对象流】
  7. 用计算机计算勾股定理,勾股定理公式计算器(勾股定理计算工具)V2018.1.0 官方版...
  8. linux ping结果中mdev,ping之mdev值
  9. 尚硅谷 VUE 尚品汇项目实战问题解决方式整理(Vue3 版)
  10. python合并音频Couldn‘t find ffprobe or avprobe解决办法
  11. Python中%是什么意思?如何使用?
  12. 剑灵盛世服务器位置,剑灵盛世再临活动网址 剑灵周年回归礼包领取地址
  13. sa结构组网方式_SA和NSA这两种组网模式?哪个才是5G最佳选择?
  14. 香港进入5G时代!多功能智能灯柱试验计划为5G建设作配合
  15. 从基础出发,带你深入了解Synchronized ,Synchronized 相 关 问 题讲解
  16. 我在北京这几年(全)
  17. WiFi、WiMAX、WBMA与3G的比较
  18. Boosting分类器
  19. 机器学习的数学基础:向量篇
  20. 完美支持--WIN11--Crack--LightningChart-10.3.2.2

热门文章

  1. html5 ocr图片识别,OCR识别控件LEADTOOLS HTML5案例:整页OCR识别
  2. 清屏函数 mysql,mysql中的常用函数总结
  3. 电商设计师(美工)必备的素材网站|优图!
  4. 感恩节活动促销海报模板,摆好借势感恩节的姿势
  5. UI设计摘要背景素材|简单分层PSD格式化模板,为项目增加背景
  6. JavaScript提升(Hoisting)---借鉴自W3CSchool
  7. tcmalloc内存分配器分析笔记:基于gperftools-2.4
  8. Open vSwitch(OVS)文档
  9. Tensorflow c api
  10. 服务器维护需要log日志,什么是服务器日志?服务器日志要怎么看?