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

妇幼能力建设网站如何夸奖一个网站做的好

妇幼能力建设网站,如何夸奖一个网站做的好,淘宝网首页,西安网站建设hyk1231. xgboost算法原理 XGBoost#xff08;Extreme Gradient Boosting#xff09;全名叫极端梯度提升树#xff0c;XGBoost是集成学习方法的王 牌#xff0c;在Kaggle数据挖掘比赛中#xff0c;大部分获胜者用了XGBoost。 XGBoost在绝大多数的回归和分类 问题上表现的十分…1. xgboost算法原理 XGBoostExtreme Gradient Boosting全名叫极端梯度提升树XGBoost是集成学习方法的王 牌在Kaggle数据挖掘比赛中大部分获胜者用了XGBoost。 XGBoost在绝大多数的回归和分类 问题上表现的十分顶尖本节将较详细的介绍XGBoost的算法原理。构建最优模型的⼀般方法是最 小化训练数据的损失函数。 我们用字母 L 表示损失如下式 其中F是假设空间假设空间是在已知属性和属性可能取值的情况下对所有可能满足目标的情 况的⼀种毫无遗漏的假设集合。式1.1称为经验风险最小化训练得到的模型复杂度较高。当 训练数据较小时模型很容易出现过拟合问题。 因此为了降低模型的复杂度常采用下式 。其中J(f)为模型的复杂度式2.1称为结构风险 最小化结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。决策树的生 成和剪枝分别对应了经验风险最小化和结构风险最小化 XGBoost的决策树生成是结构风险最小 化的结果。 2. XGBoost的⽬标函数推导 目标函数即损失函数通过最小化损失函数来构建最优模型。 由前面可知 损失函数应加上表 示模型复杂度的正则项且XGBoost对应的模型包含了多个CART树因此模型的目标函数为 3.1式是正则化的损失函数 其中 y 是模型的实际输 出结果 是模型的输出结果 等式右边第⼀部分是模型的训练误差第⼆部分是正则化项这里 的正则化项是K棵树的正则化项相加而来的。 上图为第K棵CART树确定⼀棵CART树需要确定两部分 第⼀部分就是树的结构这个结构将 输⼊样本映射到⼀个确定的叶子节点上记为f (x); 第⼆部分就是各个叶子节点的值q(x)表示输出 的叶子节点序号w (x)表示对应叶子节点序号的值。 由定义得 XGBoost法对应的模型包含了多棵cart树定义每棵树的复杂度 其中T为叶子节点个数||w||为叶子节点向量的模 。γ表示节点切分的难度λ表示L2正则化系数。 2.1 目标函数推导 根据3.1式共进行t次迭代的学习模型的目标函数为 由前向分布算法可知前t-1棵树的结构为常数 我们知道泰勒公式的⼆阶导近似表示 令ft(xi)为Δx, 则3.5式的⼆阶近似展开 因为为常数所以 其中gi 和hi 分别表示预测误差对当前模 型的⼀阶导和⼆阶导表示前t-1棵树组成的学习模型的预测误差。 当前模型往预测误 差减小的方向进行迭代。 忽略3.8式常数项并结合3.4式得 通过3.2式简化3.9式 3.10式第⼀部分是对所有 训练样本集进行累加 此时所有样本都是映射为树的叶子节点所以我们换种思维从叶子 节点出发对所有的叶子节点进行累加得 令Gj 表示映射为叶子节点 j 的所有输⼊样本的⼀阶导之和同理H 表示 ⼆阶导之和。 得 对于第 t 棵CART树的某⼀个确定结构可用q(x)表示其叶子节点是相互独立的 G 和H 是确 定量因此3.12可以看成是关于叶子节点w的⼀元⼆次函数 。 最小化3.12式得 把3.13带⼊到3.12得到最终的目标函数 3.14也称为打分函数(scoring function)它是衡量树结构 好坏的标准 值越小代表结构越好 。 我们用打分函数选择最佳切分点从而构建CART树。 3. XGBoost的回归树构建方法 在实际训练过程中当建立第 t 棵树时XGBoost采用贪心法进行树结点的分裂从树深为0时开 始对树中的每个叶子结点尝试进行分裂 每次分裂后原来的⼀个叶子结点继续分裂为左右两 个子叶子结点原叶子结点中的样本集将根据该结点的判断规则分散到左右两个叶子结点中新分 裂⼀个结点后我们需要检测这次分裂是否会给损失函数带来增益增益的定义如下 如果增益Gain0即分裂为两个叶子节点后目标函 数下降了那么我们会考虑此次分裂的结果。那么⼀直这样分裂什么时候才会停止呢 3.1 停止分裂条件判断 情况⼀上节推导得到的打分函数是衡量树结构好坏的标准因此可用打分函数来选择最佳切分 点。首先确定样本特征的所有切分点对每⼀个确定的切分点进行切分切分好坏的标准如下 Gain表示单节点obj与切分后的两个节点的树obj之差 遍历所有特征的切分点找到最大Gain的 切分点即是最佳分裂点根据这种方法继续切分节点得到CART树。 若 γ 值设置的过大则 Gain为负表示不切分该节点因为切分后的树结构变差了。 γ 值越大表示对切分后obj下降幅 度要求越严这个值可以在XGBoost中设定。 情况⼆当树达到最大深度时停止建树因为树 的深度太深容易出现过拟合这⾥需要设置⼀个超参数max_depth。 情况三当引入⼀次分裂 后重新计算新生成的左、右两个叶子结点的样本权重和。如果任⼀个叶子结点的样本权重低于某 ⼀个阈值也会放弃此次分裂。这涉及到⼀个超参数最小样本权重和是指如果⼀个叶子节点包 含的样本数量太少也会放弃分裂防止树分的太细这也是过拟合的⼀种措施。  XGBoost与GDBT的区别①XGBoost⽣成CART树考虑了树的复杂度GDBT未考虑GDBT在树 的剪枝步骤中考虑了树的复杂度。 ②XGBoost是拟合上⼀轮损失函数的⼆阶导展开GDBT是拟合 上⼀轮损失函数的⼀阶导展开因此XGBoost 的准确性更高且满足相同的训练效果需要的 迭代次数更少。 ③XGBoost与GDBT都是逐次迭代来提高模型性能但是XGBoost在选取最佳切分 点时可以开启多线程进行大大提高了运行速度。 4. xgboost算法api介绍 官⽹链接https://xgboost.readthedocs.io/en/latest/ pip3 install xgboost xgboost中封装了很多参数主要由三种类型构成通用参数general parametersBooster 参 数booster parameters和学习目标参数task parameters通用参数主要是宏观函数控 制 Booster参数取决于选择的Booster类型用于控制每⼀步的boostertree, regressiong 学习目标参数控制训练目标的表现。 通用参数general parameters 1. booster [缺省值gbtree] 2. 决定使用哪个booster可以是gbtreegblinear或者dart。 gbtree和dart使用基于树的模型(dart 主要多了 Dropout)而gblinear 使用线性函数。 3. silent [缺省值0] 设置为0打印运行信息设置为1静默模式不打印 4. nthread [缺省值设置为最大可能的线程数] 并行运行xgboost的线程数输⼊的参数应该系统 的CPU核心数若是没有设置算法会检测将其设置为CPU 的全部核心数 下面的两个参数不需要设置使用默认的就好了 1. num_pbuffer [xgboost自动设置不需要用户设置] 预测结果缓存大小通常设置为训练实例的 个数。该缓存用于保存最后boosting操作的预测结果。 2. num_feature [xgboost自动设置不需要用户设置] 在boosting中使用特征的维度设置为特征的 最大维度 Booster 参数booster parameters 1. eta [缺省值0.3别名learning_rate] 更新中减少的步长来防止过拟合。 在每次boosting之 后可以直接获得新的特征权值这样可以使得boosting更加鲁棒。 范围[0,1] 2. gamma [缺省值0别名: min_split_loss]分裂最小loss 在节点分裂时只有分裂后损失函 数的值下降了才会分裂这个节点。 Gamma指定了节点分裂所需的最小损失函数下降值。 这个参 数的值越大算法越保守。这个参数的值和损失函数息息相关所以是需要调整的。 范围: [0,∞] 3. max_depth [缺省值6] 这个值为树的最大深度。 这个值也是用来避免过拟合的。max_depth越 大模型会学到更具体更局部的样本。 设置为0代表没有限制范围: [0,∞] 4. min_child_weight [缺省值1] 决定最小叶子节点样本权重和。XGBoost的这个参数是最小样本权 重的和。当它的值较大时可以避免模型学习到局部的特殊样本。 但是如果这个值过高会导致 欠拟合。这个参数需要使用CV来调整。范围: [0,∞] 5. subsample [缺省值1] 这个参数控制对于每棵树随机采样的比例。 减小这个参数的值算法 会更加保守避免过拟合。但是如果这个值设置得过小它可能会导致欠拟合。典型值0.5- 10.5代表平均采样防止过拟合。范围: (0,1] 6. colsample_bytree [缺省值1] 用来控制每棵随机采样的列数的占比(每⼀列是⼀个特征)。 典型 值0.5-1 范围: (0,1] 7. colsample_bylevel [缺省值1] 用来控制树的每⼀级的每⼀次分裂对列数的采样的占比。 我个 ⼈⼀般不太用这个参数因为subsample参数和colsample_bytree参数可以起到相同的作用。但是 如果感兴趣可以挖掘这个参数更多的用处。 范围: (0,1] 8. lambda [缺省值1别名: reg_lambda] 权重的L2正则化项(和Ridge regression类似)。 这个参数 是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数但是这个参数 在减少过拟合上还是可以挖掘出更多用处的。 9. alpha [缺省值0别名: reg_alpha] 权重的L1正则化项。(和Lasso regression类似)。 可以应用 在很高维度的情况下使得算法的速度更快。 10. scale_pos_weight[缺省值1] 在各类别样本十分不平衡时把这个参数设定为⼀个正值可以 使算法更快收敛。通常可以将其设置为负样本的数目与正样本数目的比值。 11. lambda [缺省值0别称: reg_lambda] L2正则化惩罚系数增加该值会使得模型更加保守。 12. alpha [缺省值0别称: reg_alpha] L1正则化惩罚系数增加该值会使得模型更加保守。 13. lambda_bias [缺省值0别称: reg_lambda_bias] 偏置上的L2正则化(没有在L1上加偏置因 为并不重要) 学习目标参数task parameters 1. objective [缺省值reg:linear] i. “reg:linear” – 线性回归 ii. “reg:logistic” – 逻辑回归 iii. “binary:logistic” – ⼆分类逻辑回归输出为概率 iv. “multi:softmax” – 使⽤softmax的多分类器返 回预测的类别(不是概率)。在这种情况下你还需要多设⼀个参数num_class(类别数目) v. “multi:softprob” – 和multi:softmax参数⼀样但是返回的是每个数据属于各个类别的概率。 2. eval_metric [缺省值通过目标函数选择] 可供选择的如下所示 i. “rmse”: 均方根误差 ii. “mae”: 平均绝对值误差 iii. “logloss”: 负对数似然函数值 iv. “error”: ⼆分类错误率。 其值通过错误分类数目 与全部分类数目比值得到。对于预测预测值大于0.5被认为是正类其它归为负类。 v. “errort”: 不同的划分阈值可以通过 ‘t’ 进行设置 vi. “merror”: 多分类错误率计算公式为(wrong cases)/(all cases) vii. “mlogloss”: 多分类log损失 viii. “auc”: 曲线下的面积 3. seed [缺省值0] 随机数的种子设置它可以复现随机数据的结果也可以用于调整参数 5. xgboost案例 案例https://www.kaggle.com/c/titanic/overview 数据http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt import pandas as pd import numpy as np from sklearn.feature_extraction import DictVectorizer from sklearn.model_selection import train_test_split # 1、获取数据 titan pd.read_csv(http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt) x titan[[pclass, age, sex]] y titan[survived] # 缺失值需要处理将特征当中有类别的这些特征进⾏字典特征抽取 x[age].fillna(x[age].mean(), inplaceTrue) x_train, x_test, y_train, y_test train_test_split(x, y, random_state22) # 对于x转换成字典数据x.to_dict(orientrecords) # [{pclass: 1st, age: 29.00, sex: female}, {}] transfer DictVectorizer(sparseFalse) x_train transfer.fit_transform(x_train.to_dict(orientrecords)) x_test transfer.fit_transform(x_test.to_dict(orientrecords)) # 模型初步训练 from xgboost import XGBClassifier xg XGBClassifier() xg.fit(x_train, y_train) xg.score(x_test, y_test) # 针对max_depth进⾏模型调优 depth_range range(10) score [] for i in depth_range: xg XGBClassifier(eta1, gamma0, max_depthi) xg.fit(x_train, y_train) s xg.score(x_test, y_test) print(s) score.append(s)# 结果可视化 import matplotlib.pyplot as plt plt.plot(depth_range, score) plt.show()
http://www.pierceye.com/news/104404/

相关文章:

  • 一个主体如何添加网站室内设计公司的名字
  • 中国建设学会网站洛阳市住房和城乡建设局网站
  • 北京网站优化方式做物流的网站都有什么风险
  • 零基础学做网站页怎么部署wordpress
  • 网站如何做死链接提交筑站网络推广
  • 小说网站开发php网站后台如何修改文字
  • 网站制作是那个带有客户案例的网站
  • 中国纪检监察报数字报湛江关键词优化平台
  • 网站品牌词如何优化东莞公司网站建设营销型网站建设
  • 鞍山网站建设营销想把自己做的网站放到网上
  • 松原公司做网站青岛工程建设管理信息网官方网站
  • 一个空间2个网站网站 手机 app
  • 河北网站建设方案详细磁器口网站建设
  • 怎么做网站树洞wordpress edd 会员
  • 购物网站中加减数目的怎么做仿站违法吗
  • 代理ip访问网站局门户网站的建设
  • 建网站业务如何开展阳江房产信息网官网
  • 企业网站建设套餐费用网站开发完后期维护重要吗
  • 3营销型网站建设湖北短视频seo推荐
  • 鸿运通网站建设未成年怎么在网上卖东西
  • 郑州网站推广排名公司商会小程序开发一个多少钱啊
  • wordpress单页网站在本页跳转心理网站的建设与维护
  • 哪里可以做网站系统企业管理官网登录入口
  • iis7 网站404错误信息官网下载软件
  • 广州建设网站平台广东seo网站推广代运营
  • 网站 优化 关键字qq官网登录
  • 建设银行园区公积金管理中心网站地方门户网站推广
  • 桂林市网站设计wordpress远程数据库
  • 网站建设多钱怎么做网上卖菜网站
  • 响应式电商网站网站设计常见问题