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

 
Mihail Marchukajtes:
是的,我在做滞后,因为在以前的版本中,它们会增加包络能力,现在随着预取算法的改进,我认为不需要了,所以我试图在没有它们的情况下进行训练。我正努力在没有他们的情况下进行训练。我将在以后报告我的结果。

如果我失败了,也就是说,通用性不会无滞后地增加,那么第13版和第14版很可能是一些非通用的方向,旨在为一个狭窄的任务范围?

在这种情况下,你必须滚回GIT,以不同的、更普遍的方式移动jPrediction。

虽然有第二个假设:样本中的滞后期的存在是一个狭窄的、非普遍的方向,对于这一点,以前的版本是磨练出来的?

 
尤里-雷舍托夫

如果这一招失败了,即无滞后性的通用性没有提高,那么很可能第13和第14版是一些非通用的方向,为狭窄的任务范围而锐化的?

在这种情况下,我们将不得不滚回GIT,以不同的、更普遍的方式来移动jPrediction。

虽然有第二个假设:样本中的滞后期的存在是一个狭窄的、非普遍的方向,对于这一点,以前的版本是磨练出来的?

好吧,让我们看看是怎么回事......我一练习就马上报告......
 
Dr.Trader:

那我就在这里回答。

#пара строк из той таблицы, не буду я всё текстом копировать, потом первая строка повторена ещё дважды
dat <- data.frame(cluster1=c(24,2,13,23,6), cluster2=c(5,15,13,28,12), cluster3=c(18,12,16,22,20), cluster4=c(21,7,29,10,25), cluster5=c(16,22,24,4,11), target.label=c(1,1,0,1,0))
dat <- rbind(dat, dat[1,], dat[1,])
#результат последней строки поменян на 0 для эксперимента
dat[7,"target.label"]=0

library(sqldf)
#для sqldf точек в названиях колонок быть не должно
colnames(dat)[6] <- "target"

dat1 <- sqldf( "select cluster1, cluster2, cluster3, cluster4, cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1, cluster2, cluster3, cluster4, cluster5" )
dat1
dat1[ dat1$target_count>=10 & dat1$target_avg>0.63 , ]
dat1[ dat1$target_count>=10 & ( dat1$target_avg<0.37 | dat1$target_avg>0.63 ), ] #на случай если оба "0" или "1" встречаются чаще 70%

谢谢你,非常紧凑的解决方案!!。

请帮助解决字符串中的另一个细微差别


dat1 <- sqldf( "select cluster1, cluster2, cluster3, cluster4, cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1, cluster2, cluster3, cluster4, cluster5" )

我如何用一个变量来代替选择性的群组名称呢?

colnames_dat <- colnamed(dat) [-"target"]
dat1 <- sqldf( "select colnames_dat, avg(target) as target_avg, count(target) as target_count from dat group by colnames_dat" )

因为在现实生活中会有500个甚至1000个集群,手工写每个集群的名字是不现实的,而且这个方案也不能迎刃而解。

 
Mihail Marchukajtes:
好吧,让我们看看情况如何......我一试就告诉你......

问题是,在第13版之前,那些更接近样本开始的预测因子被处理的概率更高。而那些处于样本末端的人(更接近目标变量)被处理的概率较低。也就是说,如果事先将最重要的预测因子放在样本的左边,而将最不重要的预测因子放在右边,我们就能获得良好的概括能力。如果反之亦然,那就差了。问题是,这需要事先知道哪些预测因子是最重要的,也就是说,在样本中按重要性预先排定。但在这种情况下,预测器选择算法本身的效率并不高。

在第14版中,所有预测器的处理概率大致相同。但这又产生了另一个问题。毕竟,预测器拟合算法是以梯度搜索法运作的,每次都会朝着提高概括性的方向转变一步。同时,像其他梯度方法一样,它也有 "卡 "在局部极值的非零风险。在第12版之前,这种风险通过对样本中的预测因素进行预排序而得到缓解。

一般来说,第一和第二版本的算法存在问题,我们需要对其进行分析,以消除这些问题。例如,在算法中引入一些从当前状态向不同方向的随机跳跃的步骤,以便 "跳 "过 "沟壑"。

 
mytarmailS:

> clusternames <- paste(colnames(dat)[-ncol(dat)], collapse=",")
>
clusternames
[1] "cluster1,cluster2,cluster3,cluster4,cluster5"
> sql_query <- paste0("select ", clusternames, ", avg(target) as target_avg, count(target) as target_count from dat group by ", clusternames)
>
sql_query
[1] "select cluster1,cluster2,cluster3,cluster4,cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1,cluster2,cluster3,cluster4,cluster5"
> dat1 <- sqldf( sql_query )
>
dat1

 
尤里-雷舍托夫

来 "跳 "过 "沟壑"。

有时L-BFGS优化被内置到神经元中,它允许爬出沟壑。例如,nnet神经包。

那里有很多数学知识,我不知道它是如何运作的,但想法是不沿梯度下降,而是沿梯度下降(导数的导数)。

 
蜴_
1)正确的理解和原始的例子(如果网络或等无处可寻,就开始 "编造"))。
2)只是为什么要寻找70%,当你能找到并使用100时(当然不是为了价格)。

1)是的,是的,他们有这种罪过))我在关于 "我的 "方法的优点的段落中描述了它。

2)我会在反转上寻找组合,这不仅仅是蜡烛的方向或颜色,而是向上、向下的反转,不是反转。

我最初的观察结果比我需要的要少得多,但如果一切顺利,我对40%的结果感到满意,我甚至不需要70%,因为我的目标风险将是1比5。

Dr.Trader:

非常感谢,我会慢慢准备数据,然后进行聚类,然后寻找模式,我会让你知道结果。

 
Dr.Trader:

有时L-BFGS优化被内置到neuronki中,它允许爬出沟壑。例如,nnet神经键包。

BFGS及其衍生物,如L-BFGS,是为了解决jPrediction已经解决的问题,即寻找局部极值。也就是说,这些算法允许沿着最近的极值方向 "爬出""沟壑",而不是 "跳过 "沟壑,以寻找替代极值。

我们需要算法 "跳跃者"。而且,他们最好不要随意 "跳跃",而是朝着一些有潜力的方向跳跃。理论上,这可以通过遗传学来实现,这种 "跳跃 "是通过突变实现的。但遗传算法 非常缓慢,更适合那些可以用最少的时间消耗来测试潜在后代的任务。训练一个神经元钥匙来计算它的泛化能力是很耗时的,所以遗传学在这里会太慢。

好吧,由于缺乏更好的方法,我目前正在测试一个带有随机 "跳跃 "的变体。

 

另一本R书。我把它钉在这里,因为不清楚还有什么地方可以去。让它成为

S.E. Mastitsky, V.K. Shitikov

用R进行统计分析和数据可视化

附加的文件:
 

如果你以mytarmailS的身份搜索模式,按条形滑动,每个模式都会包含每个条形上的值可以有多少间隔的信息。模式越多,每个小节设置的间隔就越少。

粗略地说,为了使某个有新数据的窗口被包括在先前发现的某个模式中,它应该落入每个模式所固有的这种政治限制。

如果你去找1000个图案,每个图案的 "通道 "宽度都会很小。而由于新数据总是与训练数据略有不同--将很难进入这样一个狭窄的通道,它将导致错误。

我会以奥卡姆-布列塔尼的观点为指导--如果你能减少模式的数量,并在不恶化的情况下获得相同的结果,你最好这样做。