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

 
fxsaber #:

这是逐行计算矩阵的核心。

我在想,如果我们用快速 Algibov 算法 PearsonCorrM 计算一个矩阵和同一个矩阵会怎样?谁会更快呢?
PearsonCorrM 比 Algibov 的逐行算法快 40-50 倍,即使是快速的自制工具可能也无法克服这样的速度差距。
 
Forester #:
我想知道,如果计算一个矩阵,并用快速 Algibov 算法 PearsonCorrM 计算同一个矩阵。谁会更快呢?PearsonCorrM 比 Algibov 的逐行算法快 40-50 倍,即使是快速的自制算法可能也无法克服这样的速度差距。

下面是 PearsonCorrM 自制算法滞后的两倍。

 

我比较了用 python 和通过命令行进行CatBoost 训练的速度:

- 从启动到保存模型,包括读取样本,速度提高了 20

- 学习过程本身快 12

在同一模型上测试 - 训练结果完全相同。

当然,命令行更快。

 
Aleksey Vyazmikin CatBoost 训练的速度:

- 从启动到保存模型,包括读取样本,速度提高了 20

- 学习过程本身快 12

在同一模型上测试 - 训练结果完全相同。

当然,命令行速度更快。

您还在使用命令行运行 EXE 吗?
您可以通过 WinExec 运行 EXE,甚至可以在测试器中对其进行优化。

#import "kernel32.dll"
   int WinExec(uchar &Path[],int Flag);
   int SleepEx(int msec, bool Alertable=false);//SleepEx(1000,false); - для простого таймера
#import 
...
string CommonPath = TerminalInfoString(TERMINAL_COMMONDATA_PATH)+ "\\Files\\";
string RAM_dir="RAM\\";//использую диск в памяти для скорости
string agent_dir=RAM_dir+"0000";//при запуске в терминале
string p=MQLInfoString(MQL_PROGRAM_PATH);// C:\Users\User\AppData\Roaming\MetaQuotes\Tester\ххххххххххххххххххххххх\Agent-127.0.0.1-3000\MQL5\Experts\testEXE.ex5
int agent_pos=StringFind(p,"Agent-");// при оптимизации запустится в папке с номером агента
if(agent_pos!=-1){agent_pos=StringFind(p,"-",agent_pos+6);agent_dir = RAM_dir+StringSubstr(p,agent_pos+1,4);}//выдаст 3001, 3002... по номеру папки в котором тестер запустился
FolderCreate(agent_dir,FILE_COMMON);
...
sinput string PathExe="С:\\your.exe";//path to exe file
uchar ucha[];
StringToCharArray(PathExe_+" --dir "+CommonPath+agent_dir+"\\",ucha);//string to train
int visible=0;
FileDelete(agent_dir+"\\model.bin",FILE_COMMON); //сначала удалить старый
int x=WinExec(ucha,visible); //visible=0 - work in hidden window, 1 - work in opened exe window - can be closed by user. Better to use 0, to run proces up to finish.
while(true){if(FileIsExist(agent_dir+"\\model.bin",FILE_COMMON)){break;}SleepEx(1000);}// используем SleepEx из DLL (Sleep() от MQL не работает в оптимизаторе, будет грузить проц на 100% проверками файла. Через DLL 1%.). Файл с моделью появился - расчет закончен.
//модель обучена, читаем файл модели и используем

我还没试过 Catboost,但我想你可以做一些事情。
最困难的是确定训练结束的时间。我的方法是每秒检查一次 agent_dir+"\model.bin" 文件夹中模型文件的外观。我不知道 Catboost 把模型文件放在哪里,可能要到别处去找。

另一个可能的问题是,如果模型文件很大,可能需要很长时间才能写入,即文件已经存在,但没有写到最后。可能需要暂停文件或检查文件是否被写入过程关闭....。
 
Forester #:

您还在使用命令行运行 EXE 吗?
您可以通过 WinExec 运行 EXE,甚至可以在测试器中对其进行优化。

我运行的是 bat 文件--到目前为止,这是当前任务中最方便的选择。

到目前为止,只有一个任务可以在获得样本后自动启动训练--侦察搜索。我计划稍后为它制作一个自动 bat 文件。

Forester#:

我还没试过 Catboost,但我想我们能想到办法。

最困难的是确定训练结束的时刻。我的方法是每秒检查一次 agent_dir+"\model.bin" 文件夹中模型文件的外观。我不知道 Catboost 会把模型文件放在哪里,可能要到别处去找。

另一个可能的问题是,如果模型文件很大,可能需要很长时间才能写入,即文件已经存在,但没有写到最后。您可能需要暂停文件或检查文件是否被写入过程关闭....。

你的解决方案很有趣--我会看看,也许我会把它用于应用。

但我认为有可能从可执行程序中获得结束响应 - 我想使用这种方法。

文件选项--如果您运行 bootnik,那么同样--您可以在任务结束时创建一个新文件。

 
Aleksey Vyazmikin #:

也许-1 和 0 变体的相对成功率与列车的样本量有关,因此应该减少?一般来说,Recall 似乎会对此做出反应。

在你看来,在我们的情况下,这种组合的结果是否应该具有可比性?还是说数据已经无法挽回地过时了?

我把训练样本分成了三份,分别对变体-1 和变体 0 进行了三组训练,也只对原始训练样本进行了三组训练。

这就是我的结果。

我做了这样的归纳:PR=(精确度-0.5)*召回率

看来训练是以牺牲训练样本的第二和第三部分为代价的--现在我把它们合并起来并进行训练--让我们看看会发生什么。

尽管如此,这似乎仍不失为一种估算训练随机性的方法。理想情况下,每个部分的训练都应该相对成功,否则不能保证模型明天就会停止工作。

 
Aleksey Vyazmikin #:

看起来训练是以牺牲样本列车的第二和第三部分为代价的--我现在把它们合并起来并进行训练--我们看看会发生什么。

不过,这似乎也不失为一种评估训练随机性的好方法。理想情况下,每个部分的训练都应该相对成功,否则不能保证模型明天就会停止工作。

下面是结果--最后两列

结果确实有所改善。我们可以假设,样本越大,训练结果越好。

我们应该尝试在训练样本的第一部分和第二部分上进行训练,如果结果并不比第二部分和第三部分差多少,那么就可以认为样本新鲜度的因素不如样本量重要。

 

我曾多次写过关于 "预测因子预测能力 "的文章。

我发现了一个计算距离的工具列表:

library(proxy)
pr_DB$get_entry_names()
##  [1] "Jaccard"         "Kulczynski1"    
##  [3] "Kulczynski2"     "Mountford"      
##  [5] "Fager"           "Russel"         
##  [7] "simple matching" "Hamman"         
##  [9] "Faith"           "Tanimoto"       
## [11] "Dice"            "Phi"            
## [13] "Stiles"          "Michael"        
## [15] "Mozley"          "Yule"           
## [17] "Yule2"           "Ochiai"         
## [19] "Simpson"         "Braun-Blanquet" 
## [21] "cosine"          "angular"        
## [23] "eJaccard"        "eDice"          
## [25] "correlation"     "Chi-squared"    
## [27] "Phi-squared"     "Tschuprow"      
## [29] "Cramer"          "Pearson"        
## [31] "Gower"           "Euclidean"      
## [33] "Mahalanobis"     "Bhjattacharyya" 
## [35] "Manhattan"       "supremum"       
## [37] "Minkowski"       "Canberra"       
## [39] "Wave"            "divergence"     
## [41] "Kullback"        "Bray"           
## [43] "Soergel"         "Levenshtein"    
## [45] "Podani"          "Chord"          
## [47] "Geodesic"        "Whittaker"      
## [49] "Hellinger"       "fJaccard"

除了标准工具外,它还有自己的距离集

stats::dist() 
 
Aleksey Vyazmikin #:

结果如下--最后两列

结果确实有所改善。我们可以假设,样本越多,训练结果就越好。

我们有必要尝试在训练样本的 1 部分和 2 部分上进行训练--如果结果并不比 2 部分和 3 部分差多少,那么样本新鲜度的因素就可以被认为没有样本量那么重要了。

库托,我们又一次陷入了对垫子统计的无知。
我有个想法,可以从不同侧面对 matstat 进行监测。
 
СанСаныч Фоменко #:

我曾多次写过关于 "预测因子的预测能力 "的文章。

我发现了一个计算距离的工具列表:

除了标准工具外,它还有自己的距离集

您能举例说明如何使用它吗?