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

 
Dr.Trader:

其中大部分你自己知道并已经做了,但我将写得更全面,以排除任何假设,我们以同样的方式谈论,但做得不同。


所有这些都来自于本论坛的建议,以及经验。

谢谢你。

我将逐点回答。

有必要有一个精心磨练的健身函数来估计模型参数。如果该函数以高分评估特定的模型参数和选定的预测器--在新数据的测试中应该有好的结果。
(对于任何估计,我都会记住,越高越好)

有这样一个功能。我不需要R^2(尽管一开始我的出发点是确认市场在回归方面是愚蠢的可预测性)。我使用一个书面的函数来估计MO和与传播的点的总和。这个函数在CV循环内运行,选择最佳参数来训练模型。

健身函数在一个周期内至少应重复50次。
1)将数据分为两部分,50%/50%。既要有带样本的随机抽样,也要有顺序抽样(用于训练的那块在中间某个地方,用于验证的那块在原始数据的开头和结尾处)。包括极端的版本,即在前半部分进行训练,在后半部分进行验证,反之亦然。 我认为既要有顺序采样的样本,也要有随机采样的训练。在图片中,你可以更清楚地看到一些随机和顺序分区的例子,绿色的线是用于训练,黄色的是用于验证。

这一点其实并不清楚。我只是不明白你指的是什么重复。

我同样有99套训练教材(每套10年)。每一组例子都是独一无二的,但它们都取自同一个 "之前 "的时间段。

在每一组中,我都运行一个有2到10个犯规的CV(我也会循环使用)。

但我严格地将所有的犯规按时间分开。我认为这是一个不可侵犯的正确方法。

因此,99 * CV参数组合的数量(数百)=数百个训练有素的模型,这些模型在验证犯规上显示出最佳的质量指标。

然后从 "之后 "的时间框架(也就是5年)抽取相同数量的延迟样本。它们也是独一无二的。我做了一个嵌套的CV:我把每个产生的模型与递延样本的CV经验进行检查。我得到两个质量度量值的向量:关于CV和关于递延样本。

向行家们提问。

如果我有恒定的数据和一个合适的模型(包),我期望在推迟的样本上得到什么?

回答:延迟样本的质量指标(QM)应与验证性犯规的质量指标相关联。

在现实中,实现这一点是一个大问题。

我为什么需要它?这样,我就可以自信地选择最佳模型,只需依靠我的交叉验证。因为我已经验证过,它给出的结果与未来一致。

委员会和其他顶级模型也需要在那个没有经过任何训练的延迟样本上通过适应性测试。

 
Dr.Trader:


2)在训练样本上训练模型(所使用的模型参数和预测器在整个周期都是一样的,就是你要估计的那些),然后用这个模型预测这个非常的数据,并给预测打分--准确率、r^2或其他。例如,我把回归结果四舍五入到类,并使用Cohen's Kappa函数进行估计,它来自caret,我喜欢它比分类准确性或回归准确性更好。但它只对两个班级有效。对于三个班级,我觉得很难提出什么建议,重要的是估计时要分别考虑到每个班级的准确性,并在此基础上给出一些总体估计。
3)应用训练好的模型来预测验证样本的数据,用同样的函数估计预测结果。
4)两个估计值(训练和验证)应相互接近,并尽可能地高。我使用这个代码来计算最终得分 - (min(score1,score2) - (max(score1,score2)-min(score1,score2))- 从最小值中减去他们的delta。

在每个迭代结束时,我们将得到一些分数,由于数据的随机分割,它可能从-1到1不等(或在另一个区间,取决于使用的函数)。我们计算它们的平均值,并将其作为健身函数的结果返回。此外,我从每个使用的预测器的健身值中减去一个小数字(0.0001),以惩罚模型的所需数据集过大。


请澄清一下,培训是指对交叉验证犯规的评估吗?

训练和验证估计的接近性--是否意味着延迟采样与交叉验证结果的相关性?

如果是这样的话,那么我们就很接近了。

 
阿列克谢-伯纳科夫

请澄清一下,培训是指对交叉验证犯规的评估吗?

训练和验证估计的接近性--是否意味着延迟采样与交叉验证结果的相关性?

如果是这样的话,那么我们就很接近了。

"相关 "是什么意思?"+1"?"-1"?什么与什么?

以下是我能理解的50个运行结果。在50个结果中,你已经可以应用统计学,计算平均值、偏差,以及最重要的置信区间....

 
mytarmailS:

我可以看到昨天的交易结果吗?

Ү 不完美,但仍有80%的模型是通用的....

 
桑桑尼茨-弗门科

"相关 "是什么意思?"+1"?"-1"?什么与什么?

以下是我能理解的50个运行结果。在50个结果中,你已经可以应用统计学,计算平均值、方差,以及最重要的置信区间....

不,你没有得到它,CC。

递延样本上的质量指标与交叉验证上的质量指标的相关性(比如,评估训练后的模型的测试样本)。如果我们有数百个训练有素的模型,我们会得到两个质量指标的向量。

例如:交叉验证的分类精度为57%,延迟采样的分类精度为50%。而这样的价值有几百(几千)个。但有成百上千的训练有素的模型。因此,问题出现了。

 
阿列克谢-伯纳科夫

请澄清一下,培训是指对交叉验证犯规的评估吗?

训练和验证估计的接近性--是否意味着延迟采样与交叉验证结果的相关性?

如果是这样的话,那么我们就很接近了。

在代码中,它是这样的。

fitness <- function(inputTestPredictors, inputTestModelParams) {
    allScores <- c()
    for(i in 1:50){
        rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5))
        rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain)
        #ещё  нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample

        model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2)
        #вместо  TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ...

        predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors])
        predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors])

        score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"]))
        score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"]))
        score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2))
        allScores <- c(allScores, score_final)
        # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа
    }
    predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001
    return(mean(allScores) - predictorCountPenalty)
} 
 
机器学习的要素在实践中不是应用于从交易历史中学习,而是从机器人自己的交易时段内使用一组信号/选项的历史中学习,以关联到 "真实 "市场中特定配置/市场条件/信号的触发。
 
Dr.Trader:

在代码中,它是这样的。

是的,只是用文字告诉我,你在比较哪些样本?有训练,就有测试(多次训练和测试=交叉验证)。有验证(延迟采样)。

我有三栏。

培训所有。---- 测试犯了交叉验证的错误。----- 待观察

0.7 0.65 0.55

... .... ....

训练与测试相关的事实是无稽之谈,因为所选择的模型,作为结果,是在整个集合上训练的,其中的部分被包括在测试中。

但测试估计与推迟估计相关的事实对我来说很重要。

 

用你的话说,我在比较训练和测试。
训练模型时,我没有验证(延迟)样本。我的待定样本将是模型在训练后要交易的新数据。

训练与测试相关的事实是无稽之谈

这就是为什么我做了多个数据分区和多个模型的重新训练。如果模型参数不成功,那么测试样本的平均结果会比训练样本的平均结果低很多

 
Dr.Trader:

用你的话说,我是在比较训练和测试。
事实证明,在训练模型时,我没有验证(延迟)采样。训练后,模型将与之交易的新数据将被延迟采样。

这就是为什么我对数据进行了多次分割,并对模型进行了多次训练。如果模型参数不成功,那么测试样本的平均结果会比训练样本的平均结果低很多

你所做的事是有滋有味的。

然而,你也应该尝试延迟采样。这是一个经典之作。训练、测试、验证。

并使程序更加复杂。对于每个在训练和测试方面效果很好的模型,我们称之为模型X,在延迟的数据上做验证。因此,你可以了解你是否选择了正确的模型,只使用训练和测试。用不同的参数做许多模型,选择最好的(10、100、1000)。失败。你会明白,你的 "最佳 "指标是否反映在未来的数据中。只有在这之后,你才会进入战斗状态。

原因: