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

 
把这段代码写进一个脚本,运行了几次,一次次得到的结果略有不同......
 
蜴_

set.seed(1234)

它是什么,我应该把它放在哪里?

 
Mihail Marchukajtes:

那是超过一半的战斗...就是这样....

90%,而模型是一个技术问题,caret在适当的捆绑下充满了这种东西。

 

这里也有一个用vtreat的例子。

一般来说,这是数据预处理,但可以作为每个预测器相对于目标的估计。我不喜欢这个软件包不考虑预测因子的相互作用,只有在你有足够的能力相对于目标一个一个地估计预测因子时才使用这个代码。

forexFeatures <- read.csv2("Qwe.txt", dec=".")
forexFeatures <- forexFeatures[,-1]

library(vtreat)


#designTreatmentsC  подходит только для классификации с двумя классами
treatmentsC <- designTreatmentsC(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия  колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)], #названия  колонок с таргетом (тут - последняя колонка)
                                 outcometarget = "1") #текст  или цифра одного из классов
#обработка,  сортировка результата
treatmensC_scores <- treatmentsC$scoreFrame[order(treatmentsC$scoreFrame$sig),]
treatmensC_scores <- treatmensC_scores[!duplicated(treatmensC_scores$origName),]
treatmensC_scores <- treatmensC_scores[,c("origName","sig")] 
treatmensC_scores$is_good <- treatmensC_scores$sig <= 1/nrow(forexFeatures)
treatmensC_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо 


#designTreatmentsN подходит для регрессии или если больше двух классов. Если всего два класса то предпочтительнее использовать C функцию, она вроде как и коррелирующие предикторы убирает заодно.
treatmentsN <- designTreatmentsN(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)]) #названия колонок с таргетом (тут - последняя колонка)
#обработка, сортировка результата
treatmensN_scores <- treatmentsN$scoreFrame[order(treatmentsN$scoreFrame$sig),]
treatmensN_scores <- treatmensN_scores[!duplicated(treatmensN_scores$origName),]
treatmensN_scores <- treatmensN_scores[,c("origName","sig")] 
treatmensN_scores$is_good <- treatmensN_scores$sig <= 1/nrow(forexFeatures)
treatmensN_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо

 
Mihail Marchukajtes:
它是什么,我应该把它放在哪里?

set.seed设置随机数发生器的 初始种子。如果在执行代码前将其设置为相同的状态(如1234),那么在所有情况下,以下代码将以相同的方式执行。

read.csv2(...等。
set.seed(1234)
Boruta(TargetProf...等)

但是,也许算法需要更多的迭代(例如maxRuns = 1000000),它不适合默认的这么小的数字,所以中途停止。

 

我一直在考虑回归....
金融市场的回归不是一个平滑的函数,而是一个有1点增量的阶梯函数。(对教师和预报来说都是如此)。例如,如果我们将运动限制在+/-100pt,那么就可以类比为200级的分类。所以在输出中我们预测最可能的等级--例如+22pt。
这不意味着为了获得好的结果,回归的模型结构/复杂度(神经元数量)应该大200倍吗?好吧,如果我们把步数增加到5pt,那么40次就会更经济一些,代价是准确性降低。

 
通过vtreat运行文件,诚然,不是很多。只选择了4个输入。谢谢你的提示.....,我将继续旋转....。
 
Vizard_

现在回忆一下博列表,对输入做一些处理,然后再次运行。

在这两种情况下,set.seed参数是相同的。

你想让我怎么处理这些投入?

是啊.....,我承认我对自己的投入有更好的期望。总之,我以为会有更重要的,当然不是100个中的4个。有了这么多的输入,模型就会变得太小,尽管我从实践中注意到,模型越简单,效果越好。看看这个模型,再做做自己的测试,我明白这个小家伙是非常好的.....。现在下结论还为时过早,还需要更多的测试。继续挖掘....

 
我所去过的每一个地方
forexFeatures <- read.csv2("Qwe.txt")

你实际上必须这样做。
forexFeatures <- read.csv2("Qwe.txt", dec=".")

对不起,误判了你文件中的格式。我将纠正旧的帖子。重新运行代码,结果应该更好,否则所有带小数的数字都处理错了。
 
Mihail Marchukajtes:

如何处理这些投入?

例如,jPrediction将数据扩展到区间[-1;1],并在这些数字上进行学习。在评估输入之前,你也可以在R中扩展到相同的区间。

forexFeatures <- read.csv2("Qwe.txt", dec=".")

for(i in 1:(ncol(forexFeatures)-1)){
  forexFeatures[,i] <- (forexFeatures[,i] - min(forexFeatures[,i]))/(max(forexFeatures[,i])-min(forexFeatures[,i]))*2-1
}

vtreat, Boruta, etc,...

基于树木的估计方法可能不会改变结果,森林并不真正关心数据来自哪个区间,但最好检查一下。vtreat对间隔时间也不挑剔。


但总的来说,他说的是输入的非线性转化,甚至在输入到神经元之前。神经元对输入非常敏感,如果你以某种特殊方式处理输入数据,其结果可能会有所改善。例如,我听说过这样一个技巧--通过sigmoid转换输入。