标签: boosting

如何在xgboost中访问单个决策树的权重?

我正在使用xgboost进行排名

param = {'objective':'rank:pairwise', 'booster':'gbtree'}
Run Code Online (Sandbox Code Playgroud)

据我所知,通过计算学习决策树的加权和来实现梯度增强.如何访问分配给每个学习助推器的权重?我想在训练后尝试对加权进行后处理,以加快预测步骤,但我不知道如何获得单独的权重.使用时dump_model(),可以在创建的文件中看到不同的决策树,但不存储加权.在API中我没有找到合适的功能.或者我可以用收缩参数手动计算重量eta吗?

python decision-tree boosting xgboost

13
推荐指数
1
解决办法
3507
查看次数

如何在R中使用XGBoost算法进行回归?

我正在尝试使用XGBoost技术进行预测.由于我的因变量是连续的,我使用XGBoost进行回归,但是各种门户中可用的大多数参考都是用于分类.虽然我知道通过使用

objective = "reg:linear"
Run Code Online (Sandbox Code Playgroud)

我们可以进行回归,但我仍然需要对其他参数进行一些清晰度.如果有人可以提供R片段​​,这将是一个很大的帮助.

r machine-learning gbm boosting xgboost

13
推荐指数
1
解决办法
3万
查看次数

如何在弹性搜索函数得分中提高字段长度范数?

我知道,弹性搜索在计算查询检索到的文档的分数时会考虑字段的长度.场越短,重量越大(参见场长标准).

我喜欢这样的行为:当我搜索iphone我更感兴趣的是iphone 6Crappy accessories for: iphone 5 iphone 5s iphone 6.

现在,我想尝试提升这些东西,让我们说我想要加倍它的重要性.

我知道可以使用功能分数修改分数,我想我可以通过脚本分数达到我想要的效果.

我试图在这个分数中添加另一个字段长度范数:

    {
     "query": {
       "function_score": {
         "boost_mode": "replace",
         "query": {...},
         "script_score": {
             "script": "_score + norm(doc)"
         }
       }
     }
   }
Run Code Online (Sandbox Code Playgroud)

但是我失败了,得到了这个错误: [No parser for element [function_score]]

编辑:

我的第一个错误是我没有将功能分数包装在"查询"中.现在我编辑了上面的代码.我的新错误说

GroovyScriptExecutionException[MissingMethodException
[No signature of method: Script5.norm() is applicable for argument types:
(org.elasticsearch.search.lookup.DocLookup) values: 
[<org.elasticsearch.search.lookup.DocLookup@2c935f6f>]
Possible solutions: notify(), wait(), run(), run(), dump(), any()]]
Run Code Online (Sandbox Code Playgroud)

编辑:我提供了第一个答案,但我希望有一个更好的答案

elasticsearch boosting

10
推荐指数
1
解决办法
2231
查看次数

将XGBClassifier模型转储为文本

我使用XGBBoost训练多标签分类模型,并希望在另一个系统中编写此模型.

是否可以在XGB Booster中将我的XGBClassifier模型的文本输出视为dump_model.

编辑:我发现model._Booster.dump_model(outputfile)返回一个转储文件,如下所示.但是,没有任何内容可以指定类.在我的模型中,有10个类,但是在dumpfile中只有一个助推器.所以,我不确定它是所有类的模型还是只是其中之一.

booster[0]:
0:[101<0.142245024] yes=1,no=2,missing=1
    1:[107<0.102833837] yes=3,no=4,missing=3
        3:[101<0.039123565] yes=7,no=8,missing=7
            7:leaf=-0.0142603116
            8:leaf=0.023763923
        4:[101<0.0646461397] yes=9,no=10,missing=9
            9:leaf=-0.0345750563
            10:leaf=-0.0135767004
    2:[107<0.238691002] yes=5,no=6,missing=5
        5:[103<0.0775454491] yes=11,no=12,missing=11
            11:leaf=0.188941464
            12:leaf=0.0651629418
        6:[101<0.999929309] yes=13,no=14,missing=13
            13:leaf=0.00403384864
            14:leaf=0.236842111
booster[1]:
0:[102<0.014829753] yes=1,no=2,missing=1
    1:[102<0.00999682024] yes=3,no=4,missing=3
        3:[107<0.0966737345] yes=7,no=8,missing=7
            7:leaf=-0.0387153365
            8:leaf=-0.0486520194
        4:[107<0.0922582299] yes=9,no=10,missing=9
            9:leaf=0.0301927216
            10:leaf=-0.0284226239
    2:[102<0.199759275] yes=5,no=6,missing=5
        5:[107<0.12201979] yes=11,no=12,missing=11
            11:leaf=0.093562685
            12:leaf=0.0127987256
        6:[107<0.298737913] yes=13,no=14,missing=13
            13:leaf=0.227570012
            14:leaf=0.113037519
Run Code Online (Sandbox Code Playgroud)

python multilabel-classification boosting xgboost

10
推荐指数
1
解决办法
758
查看次数

R:实现我自己的梯度提升算法

我正在尝试编写自己的梯度提升算法。我知道有像这样的现有包gbmxgboost,但我想通过编写自己的包来了解算法的工作原理。

我正在使用iris数据集,我的结果是Sepal.Length(连续)。我的损失函数是mean(1/2*(y-yhat)^2)(基本上是前面有 1/2 的均方误差),所以我对应的梯度就是残差y - yhat。我将预测初始化为 0。

library(rpart)
data(iris)

#Define gradient
grad.fun <- function(y, yhat) {return(y - yhat)}

mod <- list()

grad_boost <- function(data, learning.rate, M, grad.fun) {
  # Initialize fit to be 0
  fit <- rep(0, nrow(data))
  grad <- grad.fun(y = data$Sepal.Length, yhat = fit)

  # Initialize model
  mod[[1]] <- fit

  # Loop over a total of M iterations
  for(i in 1:M){

    # Fit base learner (tree) …
Run Code Online (Sandbox Code Playgroud)

r machine-learning gradient-descent gbm boosting

10
推荐指数
1
解决办法
369
查看次数

如何使用AdaBoost增强基于Keras的神经网络?

假设我符合以下神经网络的二进制分类问题:

model = Sequential()
model.add(Dense(21, input_dim=19, init='uniform', activation='relu'))
model.add(Dense(80, init='uniform', activation='relu'))
model.add(Dense(80, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(x2, training_target, nb_epoch=10, batch_size=32, verbose=0,validation_split=0.1, shuffle=True,callbacks=[hist])
Run Code Online (Sandbox Code Playgroud)

如何使用AdaBoost增强神经网络?keras有没有这方面的命令?

python neural-network adaboost keras boosting

9
推荐指数
2
解决办法
7893
查看次数

需要帮助在 lightGBM(零膨胀对数正态损失)中实现自定义损失函数

我试图基于 lightGBM 中的这篇论文来实现这个零膨胀对数正态损失函数(https://arxiv.org/pdf/1912.07753.pdf)(第 5 页)。但是,不可否认,我只是不知道怎么做。我不明白如何获取这个函数的梯度和粗麻布,以便在 LGBM 中实现它,而且我过去从来不需要实现自定义损失函数。

\n

本文作者开源了他们的代码,该函数在tensorflow中可用(https://github.com/google/lifetime_value/blob/master/lifetime_value/zero_inflated_lognormal.py),但是我\xe2\x80\x99m无法将其转换为适合 LightGBM 中自定义损失函数所需的参数。LGBM 如何接受自定义损失函数\xe2\x80\x94 对数似然损失的示例将写为:

\n
def loglikelihood(preds, train_data):\n    labels = train_data.get_label()\n    preds = 1. / (1. + np.exp(-preds))\n    grad = preds - labels\n    hess = preds * (1. - preds)\n    return grad, hess\n
Run Code Online (Sandbox Code Playgroud)\n

同样,我需要定义一个自定义评估指标来配合它,例如:

\n
def binary_error(preds, train_data):\n    labels = train_data.get_label()\n    preds = 1. / (1. + np.exp(-preds))\n    return \'error\', np.mean(labels != (preds > 0.5)), False\n
Run Code Online (Sandbox Code Playgroud)\n

上面两个例子都取自以下存储库:

\n

https://github.com/microsoft/LightGBM/blob/e83042f20633d7f74dda0d18624721447a610c8b/examples/python-guide/advanced_example.py#L136

\n

我将不胜感激对此的任何帮助,特别是详细的指导,以帮助我学习如何自己做到这一点。

\n

根据自定义损失函数的 LGBM 文档: …

python machine-learning boosting loss-function lightgbm

8
推荐指数
1
解决办法
4800
查看次数

对于GBM模型,"有效的偏差"是纳米,这意味着什么以及如何摆脱这种情况?

我正在使用渐变增强进行分类.虽然结果有所改善,但我在有效率方面获得了NaN.

Model = gbm.fit(
  x= x_Train ,
  y = y_Train ,
  distribution = "bernoulli",
  n.trees = GBM_NTREES ,
  shrinkage = GBM_SHRINKAGE ,
  interaction.depth = GBM_DEPTH ,
  n.minobsinnode = GBM_MINOBS ,
  verbose = TRUE
  )
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

如何调整参数以获得有效的参数.

r machine-learning gbm boosting xgboost

7
推荐指数
1
解决办法
3034
查看次数

LightGBM 忽略关于“boost_from_average”的警告

我使用 LightGBM 模型(版本 2.2.1)。它在火车上显示下一个警告:

[LightGBM] [警告] 从 2.1.2 版本开始,“binary”目标中“boost_from_average”参数的默认值为true。与以前版本的 LightGBM 相比,这可能会导致明显不同的结果。如果您的旧模型产生不好的结果,请尝试设置 boost_from_average=false

我找到了它的内容:github link

但是我不使用任何旧模型或遗留代码(它是在 LightGBM 2.2.1 版本上创建的新项目),所以我不需要每次都看到这个警告。

我也知道我可以更改verbose和关闭所有警告。但这并不是很好 - 另一个可能有用!

所以我的问题是:是否可以仅关闭(隐藏)此警告?

python warnings boosting data-science lightgbm

6
推荐指数
1
解决办法
1855
查看次数

从 LatLonType 升级到 LatLonPointSpatialField

我正在使用 Solr 6.5.1

LatLonType 现在已弃用 ( https://lucene.apache.org/solr/guide/6_6/spatial-search.html ),我正在尝试使用 LatLonPointSpatialField。我还需要它具有多重价值。

我的字段定义如下:

<fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/>

之前我曾经在我的 LatLonType 字段上提升:

boost=recip(geodist(sfield,45.15,-93.12),3 ,10000,3000) (我正在使用 eDisMax)。

更改空间数据类型后,出现此错误:

A ValueSource isn't directly available from this field. Instead try a query using the distance as the score. 我不明白。

该文档没有说明将geodist函数与 edismax 一起使用以在boost=参数中使用它。相反,它只是建议使用函数值进行排序:https : //lucene.apache.org/solr/guide/6_6/spatial-search.html#SpatialSearch-geodist

但是这对我不起作用,我不需要按距离排序,我希望geodist()函数与分数相乘以改变结果分数。

solr spatial geospatial boosting

5
推荐指数
1
解决办法
1048
查看次数