交易中的机器学习:理论、模型、实践和算法交易 - 页 497

 
交易员博士

但是,为什么你认为如果线性模型使用y=ax+b的公式进行推断,它就能完美地完成,而如果森林使用最近的已知邻居进行推断,它就什么也做不了?这两种算法都有存在的权利。


我没有计算什么,我给你看了一个例子和一堆文章。神行者做得完美与否有什么区别。问题是,射频完全不能推断,建设性地推断,永远不能推断,在任何情况下都不能推断,而LR是为了比较和清晰而给出的。

这就是我所问的,我只要求提供理解的例子,说明你为什么认为这是错误的 :)

 
阿利奥沙



这与 "文章 "有什么关系?你在跟我开玩笑吗?我给你举了一个明斯基的例子,他就像牛顿只是在ML中,他把事情搞砸了,而你却在谈论Habra上的垃圾或R中的脚本(读作:我没有自己建立算法,我只是撸了一些参数)。


如果你自己用C++构建森林,你会猜到要做 "外推法",就像MLP那样,但在R...上帝保佑...


我不知道什么Minsky和Pozharsky,我不明白你的图表上有什么)你需要教RF一些设定,目标从0到10或到100,然后给出一个答案,应该故意超过100,RF应该只给出100。

在这里,作者在文章中。

#  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 2 for 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.")

我不太明白,我只知道从100到150的RF应该像其他模型一样预测出足够的结果,但这并没有发生。


 
阿廖沙

它不应该。它将给出一个最近点的局部插值,就像Knn(准最优分类器),但更粗糙。你只是不知道如何在RF树上旋转基地,而出现 "切块"。


在上一篇文章中,我添加了一个带有截图的代码,那里有什么 "问题"?

 
阿利奥沙

在森林算法中,树以一个特征正交地划分点,如果你旋转基础,你会得到与MLP相同的结果,为此你需要进入森林代码并进行修正或编写你自己的森林)))。


对不起,那将是一个不同的森林。 我是指经典版本。

我正在努力掌握那里的情况,写一些东西...

其结果是,经典的rf不知道如何推断

 
阿利奥沙

在ML中,没有 "经典",有的只是有效和解决问题的东西。掌握别人的各种算法,就像了解kodobase和市场中所有指标的代码一样合理,这是不可能的......

ML中没有太多的基本启发式方法,你必须自己手动掌握,以便 "它从你的手指上滚下来",你晚上醒来,只是从记忆中输入C++的梯度破坏半小时(开玩笑),这并不像它看起来那么难,然后你可以自己从滚刀肉文章中生成100500种算法的变化。


Ohoho...

Dr. Trader 重复了两次,我也重复给你,第三次,他们说上帝和不干净的人想听三次,这意味着什么,在神秘的背景下...

原理空间中的新点,与物理时间的关系不是严格地位于点的平面之外,时间就是时间,在芯片中你就是芯片,好象与物理时间没有线性关系,例如动量或光谱。推断出的 "点 "将在你的特征空间内和外的任何地方。


我没有这么说,我只是说古人的结构是这样的,如果他们被目标的所有训练值所冲撞,那么模型将严格地输出它所冲撞的东西,而没有新的值可以输出......至少这是它在文章中的例子中所说。我将制作我的例子并向你展示我的成果 :)如果你在训练中处于目标值100的极限,它的输出不能超过100......因为所有高于100的值都会进入表100,它纯粹是物理上没有表的值大于100。

 
马克西姆-德米特里耶夫斯基

如果训练时目标的极限值是100,它就不能输出超过100......因为所有超过100的值都会进入100表。

正常化的发明是有原因的。
 
尤里-阿索连科
正常化的发明是有原因的。

是可以理解的,原则问题是关于树木的功能。无论你如何归一化,新数据上的任何异常值,树都不会推断,而会给出它知道的极端值。这就是为什么没有必要对树木的数据进行标准化。

 
马克西姆-德米特里耶夫斯基

是可以理解的,原则问题是关于树木的功能。无论你如何归一化,新数据上的任何异常值,树都不会推断,而会给出它知道的极端值。这就是为什么完全没有必要对树木的数据进行标准化。

对我来说,我还没有看到RF的必要性,但对MLP来说,我不仅要归一化,还要把输入信号通过一个sigmoid - 即输入的动态范围是有限的,离群值并不重要。
 
马克西姆-德米特里耶夫斯基

是可以理解的,原则问题是关于树木的功能。无论你如何归一化,新数据上的任何异常值,树都不会推断,而会给出它知道的极端值。这就是为什么完全没有必要对树木的数据进行标准化。

我认为这种情况下的解决方案很简单--使用反馈。

恭敬地说。

 
安德烈-基塞廖夫

我认为这种情况下的解决方案很简单,引入反馈。

恭敬地说。


我有一个 :) 我不在乎它是否不能推断,也不在乎它是否可以......模型将在已知的集合上进行预测......只是为了普及教育

在lib中存在一些模型误差的错误,集合越小,误差越小,我还不了解rpicol。