简单梯度提升算法

我正在尝试在R中实现一个简单的用于回归的梯度提升算法。目前我已经有了以下代码,但错误没有像我预期的那样达到平稳状态。有什么建议吗?

data("OrchardSprays")niter  <- 10learn  <- 0.05y      <- OrchardSprays$decreaseyhat   <- rep(0,nrow(OrchardSprays))weight <- rep(1,nrow(OrchardSprays))loss   <- function(y,yhat) (y - yhat)^2for (i in seq(niter)){    model  <- lm(decrease~.,weights=weight,data=OrchardSprays)    yhat   <- yhat + weight * (predict(model) - yhat) / i    error  <- mean(loss(y,yhat))    weight <- weight + learn * (loss(y,yhat) - error) / error    cat(i,"error:",error,"\n")}

输出:

1 error: 319.5881 2 error: 318.6175 3 error: 317.9368 4 error: 317.6112 5 error: 317.6369 6 error: 317.9772 7 error: 318.5833 8 error: 319.4047 9 error: 320.3939 10 error: 321.5086 

回答:

我承认很久没有编写过权重优化器了,所以我的建议可能不太准确。我建议你从记录每次迭代的yhat向量开始。看看这些值是否在振荡或趋向于零(因为我不知道你通过除以i是在帮助还是在损害)。
同样,查看每次lm()迭代的R^2值。如果这些值非常接近1,你可能只是遇到了lm()当前规定的灵敏度限制。

如果你能提供你的算法来源,我们可以将代码与你实现的方程进行对比,这将很有帮助。

更新:快速查阅维基百科显示如下信息:“有几个开源的R包可用:gbm,[6] mboost,gbev。”我强烈建议你研究这些包,包括它们的源代码,看看它们是否能满足你的需求。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注