问题标签 [boosting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
machine-learning - 在xgboost中使用scale_pos_weight参数时,不知道为什么会这样?
我必须解决二进制分类问题。(标签 0 和 1 之间的训练数据大小比率为 4.7:1)因此,我使用 xgboost 算法创建了模型。结果相当不错。
- AUC:0.989
- 精度(0/1):0.998 / 0.938
- 召回率(0/1):0.992 / 0.986
- F 分数(0/1):0.995 / 0.962
但我想提高标签 1 的精度(0.938 )。因此,我尝试调整 xgboost 中的参数。特别是,我对调整 Scale_pos_weight 参数感到好奇。首先,我按照 xgboost 文档中的建议应用了这个值。(num(negative) / num(positive)=4.7)
scale_pos_weight=4.7
- AUC: 0.973
- Precision(0/1): 0.999 / 0.807
- Recall(0/1): 0.971 / 0.994
- F 分数(0/1): 0.985 / 0.891
label 1 的精度降低了,Recall 提高了。与此相反,我应用了 4.7 的倒数
- AUC:0.988
- 精度(0/1):0.992 / 0.956
- 召回率(0/1):0.995 / 0.937
- F 分数(0/1):0.993 / 0.946
结果就是我想要的。我不知道为什么会出现这些结果...请解释这种情况..
python - 如何使用单个估计器从 Sklearn Gradient Boosting Classifier 获得预测概率?
我试图找出 sklearn 的梯度提升分类器如何从不同的估计器中进行预测。
我想将 sklearn 模型翻译成基础 python 来执行预测。我知道如何从模型中获取单个估计器,但我不知道如何从这些单个估计器分数中得到集成模型做出的最终概率预测。我相信有一个 sigmoid 函数或其他东西,但我不知道是什么。
这将返回概率:array([[0.23084247, 0.76915753]])
但是当我运行时:
它返回array([1.34327168])
将 scipy 的 expit 应用于输出
我得到:
我相信.init_
估计器有助于预测,但还没有发现如何。我也将不胜感激有关如何使用 > 1 n_estimators 进行预测的任何迹象 - 如果它有所不同。
谢谢 :)
python - XGBoost plot_importance() 中的绘图编号格式
我已经训练了一个 XGBoost 模型并使用 plot_importance() 来绘制在训练模型中哪些特征是最重要的。虽然,情节中的数字有几个十进制值,这会淹没情节并且不适合情节。
我已经搜索了绘图格式化选项,但我只找到了如何格式化轴(尝试格式化 X 轴,希望它也会格式化相应的轴)
我在 Jupyter Notebook 中工作(如果这有什么不同的话)。代码如下:
有什么我想念的吗?是否有要传递的格式化函数或参数?
我希望能够格式化特征重要性分数,或者至少去掉小数部分(例如“25”而不是“25.66521”)。在下面附上当前的图。
python-3.x - 为什么 xgboost 在使用整个数据集时会为特征产生相同的预测和 nan 值?
概括
我正在使用 Python v3.7 和 xgboost v0.81。从 2015 年到 2019 年,我每周都有美国州级的连续数据 (y)。我试图将以下特征回归到 y:年、月、周、地区(编码)。我将火车设置为 2018 年 8 月及之前,测试时间为 2018 年 9 月及之后。当我以这种方式训练模型时,会发生两件奇怪的事情:
- feature_importances 都是 nan
- 预测都是一样的 (0.5, 0.5....)
我试过的
将任何特征固定到单个变量可以使模型进行适当的训练,并且之前遇到的两个奇怪的问题都消失了。前任。年份==2017 或地区==28
代码
(我知道这是一个时间问题,但这种一般情况也显示出问题)
结果 - 一些预测和特征重要性
adaboost - AdaBoost.MM 与 SAMME/SAMME.R 相比如何?
我想知道在论文“A Theory of Multiclass Boosting” (第 8 节)中提出的 AdaBoost.MM 和“Multi-class AdaBoost”中提出的 SAMME/SAMME.R两种多类 AdaBoost 算法之间是否有经验比较的工作”。
第一篇论文《A Theory of Multiclass Boosting》对SAMME做了一些理论分析,但是论文的数值实验部分并没有对这两种方法进行比较。我做了文献研究,没有找到任何有用的结果。
我可以对它们都进行编码并在来自 UCI 机器学习存储库的数据集上对其进行测试,但是对由现实问题引起的更大且不太常用的数据集进行实验更受欢迎。
machine-learning - 关于 XGBoost 的问题
我正在尝试了解 XGBoost 算法并围绕它有一些问题。
我读过各种博客,但似乎都在讲述不同的故事。下面是我正在使用的代码片段(仅供参考)。
以下是我的 4 个问题:
1)XGBoost 似乎使用梯度下降通过改变系数来最小化成本函数。我知道它可以用于使用线性回归的 gblinear 模型。
但是,对于 gbtree 模型,XGboost 如何应用梯度体面,因为基于树的模型中没有系数可供模型更改。或者有吗?
2) 类似地,gbtree 模型使用参数 lambda 进行 L2 正则化,使用 alpha 进行 L1 正则化。我知道正则化对系数施加了一些限制,但是 gbtree 模型又没有系数。那么它如何对其施加约束呢?
3)目标函数的工作是什么。例如 reg:linear。据我了解,分配目标函数只会告诉模型使用哪个评估指标。但是,它有一个单独的 eval_metric 参数。那么为什么我们需要目标函数呢?
4) 简单来说,min_child_weight 是什么?我以为这只是最低限度的没有。叶节点中的观察值。但我认为这与粗麻布指标等有关,我不太了解。
因此,如果有人能以简单易懂的方式对这些内容进行更多了解,我将不胜感激?
python - 在构建模型时使用 datetime64 特征类型?
我有一个包含大约 50 个功能的数据框。在我的实验中,我遇到了一个分类问题,所以我想通过“GradientBoostingClassifier”来训练模型。数据框(mydata)被视为训练集。这 50 个特征之一(feature20)是日期,我也需要在我的训练集中考虑这个特征,所以我尝试将日期转换为 datetime64,如下所示:
现在,当我尝试使用分类器训练模型时,它给了我以下错误:
有什么想法可以解决这个问题吗?
python - 使用加权类处理 GradientBoostingClassifier 中的不平衡数据?
我有一个非常不平衡的数据集,我需要在此基础上构建一个模型来解决分类问题。该数据集有大约 30000 个样本,其中大约 1000 个样本标记为 -1,其余为 0。我通过以下几行构建模型:
由于这是一个不平衡的数据,所以像上面的代码那样简单地构建模型是不正确的,所以我尝试使用类权重如下:
现在,我不知道如何使用 class_weights
(基本上包括 0.5 和 9.10 值)使用GradientBoostingClassifier
.
任何想法?如何使用加权类或其他技术处理这些不平衡数据?
python - ValueError("x 和 y 的大小必须相同")
执行上述代码时会发生此错误。
"raise ValueError("x 和 y 的大小必须相同")"
我有.csv
1398 行和 2 列的文件。我已将 40% 作为 y_test 集,因为它在上面的代码中可见。
python - 5 种不同模型的低训练 (~64%) 和测试准确率 (~14%)
我正在努力寻找一种适用于我的数据集的学习算法。
我正在处理一个典型的回归量问题。我关心的数据集中有 6 个特征。我的数据集中大约有 800 个数据点。特征和预测值具有很高的非线性相关性,因此这些特征并不是无用的(据我所知)。预测值具有双峰分布,因此我很快就忽略了线性模型。
所以我尝试了 5 种不同的模型:随机森林、额外树、AdaBoost、梯度提升和 xgb 回归器。训练数据集返回准确率,测试数据返回 11%-14%。这两个数字吓到我了哈哈。我尝试调整随机森林的参数,但似乎没有什么特别大的区别。
参数调整函数
评估模型的功能
我希望输出至少可以接受,但我得到的训练数据是 64%,测试数据是 12-14%。看到这个数字真的很恐怖!