当前位置: 首页 > news >正文

福州网站建设吧网站建设比较牛的企业

福州网站建设吧,网站建设比较牛的企业,微信公众平台注册官网,wordpress搭建视频站目录 前言 一、GBDT算法概述 1.决策树 2.Boosting 3.梯度提升 使用梯度上升找到最佳参数 二、GBDT算法原理 1.计算原理 2.预测原理 三、实例算法实现 1.模型训练阶段 1#xff09;初始化弱学习器 2#xff09;对于建立M棵分类回归树​#xff1a; 四、Python实现 …目录 前言 一、GBDT算法概述 1.决策树 2.Boosting 3.梯度提升 使用梯度上升找到最佳参数 二、GBDT算法原理 1.计算原理 2.预测原理 三、实例算法实现 1.模型训练阶段 1初始化弱学习器 2对于建立M棵分类回归树​ 四、Python实现 1.原始决策树累积 2.sklearn 前言 上篇文章内容已经将Adaboost模型算法原理以及实现详细讲述实践了一遍但是只是将了Adaboost模型分类功能还有回归模型没有展示下一篇我将展示如何使用Adaboost模型进行回归算法训练。首先还是先回到梯度提升决策树GBDT算法模型上面来GBDT模型衍生的模型在其他论文研究以及数学建模比赛中十分常见例如XGBoostLighGBMcatboost。其实将这些算法重要的点拿出来就更容易理解了主要是五个方向的变动改进: 算法差异点GBDTXGBoostLightGBMCatBoost弱学习器CART回归树 1.CART回归树 2.线性学习器 3.Dart树 Leaf-wise树对称树寻找分裂点贪心算法近似算法直方图算法预排序算法稀疏值处理无稀疏感知算法EFB(互斥特征捆绑)无类别特征不直接支持可自行编码后输入模型同GBDT直接支持GS编码直接支持Ordered TS编码并行支持不可以可以可以可以 本篇主讲GBDT算法模型以及应用先把大体框架熟悉之后的算法只需要填补功能就好了。本篇并不会提及太多专业公式以及推论公式数学基础薄弱的不用担心大家可以放心学习我会尽可能简单易懂的讲明白算法原理主要是实战以及运用和相关代码的使用。 一、GBDT算法概述 在开篇Boosting算法中有过讲到回顾下Adaboost我们是利用前一轮迭代弱学习器的误差率来更新训练集的权重这样一轮轮的迭代下去。GBDT也是迭代使用了前向分布算法但是弱学习器限定了只能使用CART回归树模型同时迭代思路和Adaboost也有所不同。 GBDT的思想可以用一个通俗的例子解释假如有个人30岁我们首先用20岁去拟合发现损失有10岁这时我们用6岁去拟合剩下的损失发现差距还有4岁第三轮我们用3岁拟合剩下的差距差距就只有一岁了。如果我们的迭代轮数还没有完可以继续迭代下面每一轮迭代拟合的岁数误差都会减小。 1.决策树 那么GBDT算法肯定有其对应的弱学习器也就是CART回归树。 这里如果大家之前并没有了解过决策树的概念可以去看我的这篇文章 一文速学数模-分类模型(二)决策树(Decision Tree算法详解及python实现 那么这个CART指的是Classification and Regression Tree的意思 这里我大体讲述一下该决策树算法决策树是一个预测模型他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象而每个分叉路径则代表的某个可能的属性值而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。 2.Boosting Boosting的思路则是串行的每一次训练一个模型都是建立在前一个模型的学习基础上不断去通过新模型去减少之前的错误。 这点思路在讲AdaBoosting算法模型时候已经讲的很明确了一图就可了解 3.梯度提升 在梯度提升中每个弱学习器的训练都是基于前一个弱学习器的预测误差通过梯度下降的方式来最小化误差。具体来说对于回归问题我们可以选择平方损失函数作为损失函数。 关于梯度提升算法我之前在Logistic原理详解和遗传算法里面也有详解讲过此类最优算法最核心的一点就是对于残差的使用。而损失函数就是衡量调整每一次迭代模型算法的权重的参考功能。 损失函数loss function为了评估模型拟合的好坏通常用损失函数来度量拟合的程度。损失函数极小化意味着拟合程度最好对应的模型参数即为最优参数。在线性回归中损失函数通常为样本输出和假设函数的差取平方。比如对于样本,采用线性回归损失函数为 对于分类问题则可以选择交叉熵损失函数。在每次迭代中我们都会训练一个新的弱学习器使得它能够最大程度地减少当前模型的误差。然后将这个新的学习器加入到当前的模型中从而不断提升整个模型的预测能力。 使用梯度上升找到最佳参数 使用梯度上升找到最佳参数可以假设为爬山运动我们总是往向着山顶的方向攀爬当爬到一定角度以后也会驻足停留下观察自身角度是否是朝着山顶的角度上攀爬。并且我们需要总是指向攀爬速度最快的方向爬。 要找到某函数的最大值最好的方法就是沿着该函数的梯度方向搜寻。我们假设步长为用向量来表示的话梯度上升算法的迭代公式如下 。该公式停止的条件是迭代次数达到某个指定值或者算法达到某个允许的误差范围。 梯度提升的一个重要特点是它可以应用于各种类型的弱学习器例如决策树、线性模型、神经网络等。然而决策树是梯度提升中最常用的弱学习器之一因为它们可以很好地处理非线性特征和交互作用同时也可以通过剪枝等技术来避免过拟合。 二、GBDT算法原理 1.计算原理 GBDT算法的原理如下 初始化。将所有样本的权重设置为相等的值建立一个初始模型作为基准模型可以设置为简单的平均值或者是中位数。例如建立一个弱分类器,c即为平均值。 迭代训练。在每一轮迭代中GBDT算法会先根据当前模型的预测结果计算每个样本的残差。对于回归问题残差就是实际输出值与模型预测值之间的差异对于分类问题残差就是样本的实际类别与模型预测类别之间的差异。然后GBDT会训练一个新的决策树模型来学习如何预测这些残差。对于建立M棵CART树m1,2,...M: 对i1,2,...,N, 计算第m棵树对应的响应值(损失函数的负梯度) 对于i 1,2,...N,利用CART回归树拟合数据得到第m棵回归树其对应的叶子节点区域为其中j1,2,...,且为第m棵回归叶子节点的个数。 对于个叶子节点区域j1,2,...,,计算最佳拟合值 更新强学习器:   添加新模型。新模型的预测结果会被加入到当前模型的输出中使得模型的预测结果逐步趋近于真实值。可以将每个模型的输出进行加权求和得到最终模型的输出。 终止条件。当模型的准确率达到一定阈值或者迭代次数达到预设的最大值时算法停止迭代。最后得到强学习器表达式: GBDT算法通过不断训练新的决策树模型并将它们的预测结果累加到当前模型的输出中来逐步提升整个模型的预测能力。与传统的决策树算法相比GBDT算法可以减少过拟合的风险并且具有较强的鲁棒性。 2.预测原理 上述模型生成原理的数学推论和公式是绕不开的其他算法模型也是一样在所有的机器学习以及其他算法模型中来说没有不存在数学公式的模型。但是预测原理我们可以尽可能简化这里参考GBDT的原理和应用的举例比较形象 假设我们要预测一个人是否会喜欢电脑游戏特征包括年龄性别是否为男是否每天使用电脑。标记label为是否喜欢电脑游戏假设训练出如下模型 该模型又两棵树组成 tree1使用 age 15 和 is male 作为内节点叶子节点是输出的分数。 tree2使用是否每日使用电脑作为根节点。假设测试样本如下 最后对某样本累加它所在的叶子节点的输出值例如 单独的使用GBDT模型容易出现过拟合在实际应用中往往使用 GBDTLR的方式做模型训练。 三、实例算法实现 首先我们以一组数据作为训练集 编号车辆速度道路等级拥堵状态02015130242603237042测试数据如下表所示 编号车辆速度道路等级拥堵状态05031.模型训练阶段 参数设置 学习率learning_rate 0.3 迭代次数n_trees 6 树的深度max_depth 3 1初始化弱学习器 损失函数为平方损失因为平方损失函数是一个凸函数可以直接求导令导数等于零得到: 令导数等于0 所以初始化时取值为所有训练样本标签值的均值。 ,此时得到的初始化学习器为 2对于建立M棵分类回归树 由于我们设置了迭代次数n_trees6这就是设置了M6。 首先计算负梯度根据上文损失函数为平方损失时负梯度就是残差也就是与上一轮得到的学习器的差值 现将残差的计算结果列表如下 编号真实值残差053.251.75143.250.75223.25-1.25323.25-1.25此时将残差作为样本的真实值来训练弱学习器即下表数据 编号车辆速度道路等级拥堵状态02011.7513020.752603-0.253704-1.25遍历每个特征的每个可能取值。从车辆速度为20开始到道路等级特征为4结束分别计算分裂后两组数据的平方损失Square Error 为左节点的平方损失 为右节点的平方损失找到使平方损失和 最小的那个划分节点即为最佳划分节点。 例如以车辆速度为30划分节点将小于30的样本划分为左节点大于等于30的样本划分为右节点。 划分点小于划分点的样本大于等于划分点的样本车辆速度20/0,1,2,305.255.25车辆速度3001,2,302.18752.1875车辆速度600,12,3...车辆速度700,1,23道路等级1/0,1,2,3道路等级201,2,3道路等级30,12,3道路等级40,1,233.67562503.675625以上划分点的总平方损失最小有两个划分点车辆速度30和道路等级3.所以随机选一个作为划分点这里我们选车辆速度30 我们设置的参数中树的深度max_depth3现在树的深度只有2需要再进行一次划分这次划分要对左右两个节点分别进行划分  此时我们的树深度满足了设置还需要做一件事情给这每个叶子节点分别赋一个参数来拟合残差。 这里其实和上面初始化弱学习器是一样的对平方损失函数求导令导数等于零化简之后得到每个叶子节点的参数其实就是标签值的均值。这个地方的标签值不是原始的而是本轮要拟合的标残差。 此时可更新强学习器需要用到参数学习率learning_rate0.1用表示。更新公式为 为什么要用学习率呢这是Shrinkage的思想,如果每次都全部加上拟合值 即学习率为1很容易一步学到位导致GBDT过拟合。 重复此步骤最后生成5棵树。 得到最后的强学习器 四、Python实现 1.原始决策树累积 如果安装我们上一步这样原生计算推论的话那么代码应该这样写 from sklearn.tree import DecisionTreeRegressor import numpy as np from sklearn.ensemble import GradientBoostingRegressor import pandas as pd import pydotplus from pydotplus import graph_from_dot_data from sklearn.tree import export_graphviz import os os.environ[Path] os.pathsep D:/Graphviz/bindata_1[[20,1,5],[30,2,4],[60,3,2],[70,4,2]] datapd.DataFrame(data_1,columns[speed,kind,state])Xnp.array(data.iloc[:,:-1]).reshape((-1,2)) ynp.array(data.iloc[:,-1]).reshape((-1,1)) tree_reg1 DecisionTreeRegressor(max_depth4,random_state10) tree_reg1.fit(X, y) y2 y - np.array([3.25]*4).reshape((-1,1)) tree_reg2 DecisionTreeRegressor(max_depth4,random_state10) tree_reg2.fit(X, y2) y3 y2 - 0.1*np.array(tree_reg2.predict(X)).reshape((-1,1)) tree_reg3 DecisionTreeRegressor(max_depth4,random_state10) tree_reg3.fit(X, y3) y4 y3 - 0.1*np.array(tree_reg3.predict(X)).reshape((-1,1)) tree_reg4 DecisionTreeRegressor(max_depth4,random_state10) tree_reg4.fit(X, y4) y5 y4 - 0.1*np.array(tree_reg4.predict(X)).reshape((-1,1)) tree_reg5 DecisionTreeRegressor(max_depth4,random_state10) tree_reg5.fit(X, y5) y6 y5 - 0.1*np.array(tree_reg5.predict(X)).reshape((-1,1)) tree_reg6 DecisionTreeRegressor(max_depth4,random_state10) tree_reg6.fit(X, y6)2.sklearn 使用sklearn的话 estimatorGradientBoostingRegressor(random_state10) estimator.fit(data.iloc[:,:-1],data.iloc[:,-1]) dot_data export_graphviz(estimator.estimators_[5,0], out_fileNone, filledTrue, roundedTrue, special_charactersTrue, precision4) graph pydotplus.graph_from_dot_data(dot_data) 二者树不同是因为参数学习率以及树的深度迭代次数不一致导致无碍。 那么我们现在拿预测样本来使用 predict_datapd.DataFrame({speed:50,kind:3},index[0]) estimator.predict(predict_data) 至此模型建立完毕那么让我们总结一下GBDT模型特性 AdaBoost和GBDT都是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。不同的是AdaBoost是通过调整错分数据点的权重来改进模型GBDT是通过计算负梯度来改进模型。因此相比AdaBoost, GBDT可以使用更多种类的目标函数而当目标函数是均方误差时计算损失函数的负梯度值在当前模型的值即为残差。 GBDT的求解过程就是梯度下降在函数空间中的优化过程。在函数空间中优化每次得到增量函数这个函数就是GBDT中一个个决策树负梯度会拟合这个函数。要得到最终的GBDT模型只需要把初始值或者初始的函数加上每次的增量即可。
http://www.w-s-a.com/news/264482/

相关文章:

  • 照片管理网站模板高端网站开发哪家好
  • 黄冈网站制作wordpress为什么不能显示域名
  • 做网站设计怎么进企业电子商务网站建设与管理教材
  • 设计广告公司网站建设网站开发技术选择
  • 个人网站教程个人网站有必要备案吗
  • 网站建设推广好做吗黄浦企业网站制作
  • 怎样做28网站代理中山网站建设方案外包
  • vs2010做网站前台搭建小网站
  • 做视频必须知道的一些网站wordpress 标签鼠标滑过_弹出的title 代码美化
  • 怎么做室内设计公司网站电商运营培训视频课程
  • 昆明网站策划天津市建筑信息平台
  • 三亚放心游app官方网站wordpress 个人主题
  • 做简单的网站备案平台新增网站
  • 中国建设网站银行网络营销推广方案整合
  • 网站域名列表dede网站白屏
  • 站长工具一区品牌建设卓有成效
  • 电子商务网站建设案例wordpress批量编辑
  • 想代理个网站建设平台100个最佳市场营销案例
  • 钟表东莞网站建设石家庄做网站时光
  • 织梦 图片网站源码成都建设工程安监局网站
  • 做兼职的网站策划书湖北省建设工程造价信息网
  • 企业网站网址长期做网站应该购买稳定的空间
  • 网站静态化设计html5手机网站制作
  • 深圳最简单的网站建设家居网站建设全网营销
  • 如何取消网站备案佛山网站优化公司
  • 网站开发 成都广水网站设计
  • 音乐网站建设目标合同管理系统
  • jq网站特效插件如何知道网站是否被k
  • 自己的网站怎么接广告网站搭建收费
  • 宁波大型网站制作建立一个网站 优帮云