实现机器学习的循序渐进指南IX ——树回归
目录
介绍
回归模型
特征选择
回归树的生成
回归
结论与分析
可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表。
介绍
在现实世界中,一些关系不是线性的。因此,应用线性回归分析这些问题是不合适的。为了解决这个问题,我们可以采用树回归。树回归的主要思想是将问题分成较小的子问题。如果子问题是线性的,我们可以结合所有子问题模型来获得整个问题的回归模型。
回归模型
树回归类似于决策树,它由特征选择,回归树的生成和回归组成。
特征选择
在决策树中,我们根据信息增益选择特征。但是,对于回归树,预测值是连续的,这意味着回归标签对于每个样本几乎是唯一的。因此,经验熵缺乏表征能力。因此,我们利用平方误差作为特征选择的标准,即
其中R m是由回归树除以的空间,f(x)由下式给出
因此,无论样本的特征是什么,相同空间中的输出都是相同的。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
像决策树一样,假设我们选择了最佳特征及其对应的值(j,s),那么我们将数据溢出
并且每个二进制文件的输出是
回归树的生成与决策树的生成几乎相同,此处不再赘述。您可以阅读实现机器学习的循序渐进指南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 ——树回归相关推荐
- 实现机器学习的循序渐进指南IV——逻辑回归
目录 介绍 逻辑回归模型 参数估计 优化算法 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 逻辑回归是统计学习中的经典方法,它计算条件概率P(Y|X)并 ...
- 实现机器学习的循序渐进指南系列汇总
之前曾尝试翻译了机器学习中的KNN和决策树,最近这段时间陆续看到这个系列的相关文章,并尝试翻译分析.由于此系列文章直接相对零散,所以有了这篇简单的汇总文章,以帮助有兴趣的小伙伴迅速找到想看的文章. 具 ...
- 实现机器学习的循序渐进指南VIII——线性回归
目录 介绍 回归模型 线性回归 局部加权线性回归 岭回归 套索(Lasso)回归 逐步线性回归 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 通常存在变量之间 ...
- 实现机器学习的循序渐进指南II——决策树
目录 介绍 决策树模型 特征选择 决策树的生成 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 决策原则并不复杂.从根节点开始,将节点中存储的特征值与测试 ...
- 实现机器学习的循序渐进指南I——KNN
目录 介绍 KNN模型 距离计算 选择K 分类 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 K-最近邻(KNN)是一种简单的机器学习算法,其原理是计算测试对 ...
- 实现机器学习的循序渐进指南XII——Apriori
目录 介绍 Apriori模型 频繁项集 关联规则 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 Apriori是一种学习频繁项集和关联规则的算法.Aprio ...
- 实现机器学习的循序渐进指南XI——DBSCAN
目录 介绍 DBSCAN模型 开始 聚类算法 参数估计 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 基于密度的噪声应用空间聚类(DBSCAN)是一种基于密度 ...
- 实现机器学习的循序渐进指南X——KMeans
目录 介绍 KMeans模型 KMEANS 平分KMeans KMEANS ++ 结论与分析 可访问 实现机器学习的循序渐进指南系列汇总,获取本系列完成文章列表. 介绍 KMeans是一种简单的聚类算 ...
- 实现机器学习的循序渐进指南VII——Blending Stacking
目录 介绍 混合(Blending)模型 混合(Blending)架构 混合(Blending)实现 混合(Blending)分类 堆叠(Stacking)模型 堆叠(Stacking)架构 堆叠(S ...
最新文章
- 普元EOS开发积累第一篇(常见错误解决方法) 持续更新
- fineUI表格控件各属性说明
- Index of Java
- 入门基础-VC网络编程入门
- java猜数字代码,我写的猜数字游戏的java代码!
- IO流基本知识总结【字节输入输出流、字符输入输出流、转换流、对象流】
- 用计算机计算勾股定理,勾股定理公式计算器(勾股定理计算工具)V2018.1.0 官方版...
- linux ping结果中mdev,ping之mdev值
- 尚硅谷 VUE 尚品汇项目实战问题解决方式整理(Vue3 版)
- python合并音频Couldn‘t find ffprobe or avprobe解决办法
- Python中%是什么意思?如何使用?
- 剑灵盛世服务器位置,剑灵盛世再临活动网址 剑灵周年回归礼包领取地址
- sa结构组网方式_SA和NSA这两种组网模式?哪个才是5G最佳选择?
- 香港进入5G时代!多功能智能灯柱试验计划为5G建设作配合
- 从基础出发,带你深入了解Synchronized ,Synchronized 相 关 问 题讲解
- 我在北京这几年(全)
- WiFi、WiMAX、WBMA与3G的比较
- Boosting分类器
- 机器学习的数学基础:向量篇
- 完美支持--WIN11--Crack--LightningChart-10.3.2.2
热门文章
- html5 ocr图片识别,OCR识别控件LEADTOOLS HTML5案例:整页OCR识别
- 清屏函数 mysql,mysql中的常用函数总结
- 电商设计师(美工)必备的素材网站|优图!
- 感恩节活动促销海报模板,摆好借势感恩节的姿势
- UI设计摘要背景素材|简单分层PSD格式化模板,为项目增加背景
- JavaScript提升(Hoisting)---借鉴自W3CSchool
- tcmalloc内存分配器分析笔记:基于gperftools-2.4
- Open vSwitch(OVS)文档
- Tensorflow c api
- 服务器维护需要log日志,什么是服务器日志?服务器日志要怎么看?