# set up functionality for modelling down the track
library(xgboost) # extreme gradient boosting
library(nnet) # neural network
library(ranger) # for random forests
library(rpart) # for demo single tree
library(rpart.plot)
library(viridis) # for palette of colours
library(grid) # for annotations
# sample data - training set
set.seed(134) # for reproducibility
x <- 1:100 + rnorm(100)
y <- 3 + 0.3 * x + rnorm(100)
# extrapolation / test set, has historical data plus some more extreme values
extrap <- data.frame(x = c(x, 1:5 * 10 + 100))
mod_lm <- lm(y ~ x)
mod_nn <- nnet(y ~ x, size = 8, linout = TRUE)
# XG boost. This is a bit more complicated as we need to know how many rounds
# of trees to use. Best to use cross-validation to estimate this. Note -
# I use a maximum depth of 2for the trees which I identified by trial and error
# with different values of max.depth and cross-validation, not shown
xg_params <- list(objective = "reg:linear", max.depth = 2)
mod_cv <- xgb.cv(label = y, params = xg_params, data = as.matrix(x), nrounds = 40, nfold = 10) # choose nrounds that gives best value of root mean square error on the training set
best_nrounds <- which(mod_cv$test.rmse.mean == min(mod_cv$test.rmse.mean))
mod_xg <- xgboost(label = y, params = xg_params, data = as.matrix(x), nrounds = best_nrounds)
mod_rf <- ranger(y ~ x)
p <- function(title) {
plot(x, y, xlim = c(0, 150), ylim = c(0, 50), pch = 19, cex = 0.6,
main = title, xlab = "", ylab = "", font.main = 1)
grid()
}
predshape <- 1
par(mfrow = c(2, 2), bty = "l", mar = c(7, 4, 4, 2) + 0.1)
p("Linear regression")
points(extrap$x, predict(mod_lm, newdata = extrap), col = "red", pch = predshape)
p("Neural network")
points(extrap$x, predict(mod_nn, newdata = extrap), col = "blue", pch = predshape)
p("Extreme gradient boosting")
points(extrap$x, predict(mod_xg, newdata = as.matrix(extrap)), col = "darkgreen", pch = predshape)
p("Random forest")
fc_rf <- predict(mod_rf, data = extrap)
points(extrap$x, fc_rf$predictions, col = "plum3", pch = predshape)
grid.text(0.5, 0.54, gp = gpar(col = "steelblue"),
label = "Tree-based learning methods (like xgboost and random forests)\nhave a particular challenge with out-of-sample extrapolation.")
grid.text(0.5, 0.04, gp = gpar(col = "steelblue"),
label = "In all the above plots, the black points are the original training data,\nand coloured circles are predictions.")
但是,为什么你认为如果线性模型使用y=ax+b的公式进行推断,它就能完美地完成,而如果森林使用最近的已知邻居进行推断,它就什么也做不了?这两种算法都有存在的权利。
我没有计算什么,我给你看了一个例子和一堆文章。神行者做得完美与否有什么区别。问题是,射频完全不能推断,建设性地推断,永远不能推断,在任何情况下都不能推断,而LR是为了比较和清晰而给出的。
这就是我所问的,我只要求提供理解的例子,说明你为什么认为这是错误的 :)
这与 "文章 "有什么关系?你在跟我开玩笑吗?我给你举了一个明斯基的例子,他就像牛顿只是在ML中,他把事情搞砸了,而你却在谈论Habra上的垃圾或R中的脚本(读作:我没有自己建立算法,我只是撸了一些参数)。
如果你自己用C++构建森林,你会猜到要做 "外推法",就像MLP那样,但在R...上帝保佑...
我不知道什么Minsky和Pozharsky,我不明白你的图表上有什么)你需要教RF一些设定,目标从0到10或到100,然后给出一个答案,应该故意超过100,RF应该只给出100。
在这里,作者在文章中。
我不太明白,我只知道从100到150的RF应该像其他模型一样预测出足够的结果,但这并没有发生。
它不应该。它将给出一个最近点的局部插值,就像Knn(准最优分类器),但更粗糙。你只是不知道如何在RF树上旋转基地,而出现 "切块"。
在上一篇文章中,我添加了一个带有截图的代码,那里有什么 "问题"?
在森林算法中,树以一个特征正交地划分点,如果你旋转基础,你会得到与MLP相同的结果,为此你需要进入森林代码并进行修正或编写你自己的森林)))。
对不起,那将是一个不同的森林。 我是指经典版本。
我正在努力掌握那里的情况,写一些东西...
其结果是,经典的rf不知道如何推断
在ML中,没有 "经典",有的只是有效和解决问题的东西。掌握别人的各种算法,就像了解kodobase和市场中所有指标的代码一样合理,这是不可能的......
ML中没有太多的基本启发式方法,你必须自己手动掌握,以便 "它从你的手指上滚下来",你晚上醒来,只是从记忆中输入C++的梯度破坏半小时(开玩笑),这并不像它看起来那么难,然后你可以自己从滚刀肉文章中生成100500种算法的变化。
Ohoho...
Dr. Trader 重复了两次,我也重复给你,第三次,他们说上帝和不干净的人想听三次,这意味着什么,在神秘的背景下...
原理空间中的新点,与物理时间的关系不是严格地位于点的平面之外,时间就是时间,在芯片中你就是芯片,好象与物理时间没有线性关系,例如动量或光谱。推断出的 "点 "将在你的特征空间内和外的任何地方。
我没有这么说,我只是说古人的结构是这样的,如果他们被目标的所有训练值所冲撞,那么模型将严格地输出它所冲撞的东西,而没有新的值可以输出......至少这是它在文章中的例子中所说。我将制作我的例子并向你展示我的成果 :)如果你在训练中处于目标值100的极限,它的输出不能超过100......因为所有高于100的值都会进入表100,它纯粹是物理上没有表的值大于100。
如果训练时目标的极限值是100,它就不能输出超过100......因为所有超过100的值都会进入100表。
正常化的发明是有原因的。
是可以理解的,原则问题是关于树木的功能。无论你如何归一化,新数据上的任何异常值,树都不会推断,而会给出它知道的极端值。这就是为什么没有必要对树木的数据进行标准化。
是可以理解的,原则问题是关于树木的功能。无论你如何归一化,新数据上的任何异常值,树都不会推断,而会给出它知道的极端值。这就是为什么完全没有必要对树木的数据进行标准化。
是可以理解的,原则问题是关于树木的功能。无论你如何归一化,新数据上的任何异常值,树都不会推断,而会给出它知道的极端值。这就是为什么完全没有必要对树木的数据进行标准化。
我认为这种情况下的解决方案很简单--使用反馈。
恭敬地说。
我认为这种情况下的解决方案很简单,引入反馈。
恭敬地说。
我有一个 :) 我不在乎它是否不能推断,也不在乎它是否可以......模型将在已知的集合上进行预测......只是为了普及教育
在lib中存在一些模型误差的错误,集合越小,误差越小,我还不了解rpicol。