트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 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을 통해 실행할 수 있으며 테스터에서 최적화할 수도 있습니다.

#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%.). Файл с моделью появился - расчет закончен.
//модель обучена, читаем файл модели и используем

캣부스트를 사용해 보지는 않았지만 뭔가 할 수 있을 것 같습니다.
가장 어려운 것은 훈련이 끝나는 순간을 결정하는 것입니다. 저는 1초에 한 번씩 agent_dir+"\model.bin" 폴더에 있는 모델 파일의 모양을 확인하여 이를 수행합니다. Catboost가 모델 파일을 어디에 두는지는 모르겠지만 다른 곳에서 찾아야 할 수도 있습니다.

또 다른 가능한 문제는 모델 파일이 큰 경우 작성하는 데 시간이 오래 걸릴 수 있습니다. 즉, 파일은 이미 존재하지만 끝까지 작성되지 않은 경우입니다. 파일을 일시 중지하거나 쓰기 프로세스에서 파일이 읽기에서 닫히지 않았는지 확인해야 할 수 있습니다....
 
Forester #:

아직도 명령줄을 사용하여 EXE를 실행하나요?
WinExec을 통해 실행하고 테스터에서 최적화할 수도 있습니다.

저는 박쥐 파일을 실행합니다. 지금까지는 현재 작업에 가장 편리한 옵션입니다.

지금까지 샘플을 얻은 후 훈련을 자동으로 실행하는 작업은 정찰 검색 하나뿐입니다. 나중에 자동 박쥐 파일을 만들 계획입니다.

포레스터 #:

캣부스트를 사용해 보지는 않았지만 뭔가 생각해 볼 수 있을 것 같습니다.

가장 어려운 것은 훈련이 끝나는 순간을 결정하는 것입니다. 저는 초당 1 회 agent_dir + "\ model.bin"폴더에있는 모델 파일의 모양을 확인하여이를 수행합니다. Catboost가 모델 파일을 어디에 두는지는 모르겠지만 다른 곳에서 찾아야 할 수도 있습니다.

또 다른 가능한 문제는 모델 파일이 큰 경우 작성하는 데 시간이 오래 걸릴 수 있습니다. 즉, 파일은 이미 존재하지만 끝까지 작성되지 않은 경우입니다. 파일을 일시 중지하거나 쓰기 프로세스에서 읽기가 닫히지 않았는지 확인해야 할 수 있습니다.....

당신의 해결책은 흥미 롭습니다 - 나는 그것을 적용하기 위해 그것을 취할 것입니다.

하지만 실행 프로그램에서 종료 응답을 얻을 가능성이 있다고 생각합니다. 이 접근 방식을 사용하고 싶었습니다.

파일 옵션 - 부트 닉을 실행하면 작업이 끝날 때 새 파일을 만들 수 있습니다.

 
Aleksey Vyazmikin #:

기차의 샘플 크기에서 -1과 0 변형의 상대적인 성공률을 낮춰야 할까요? 일반적으로 리콜은 이에 반응하는 것 같습니다.

우리의 경우 이러한 조합의 결과가 서로 비슷해야 한다고 생각하시나요? 아니면 데이터가 회복할 수 없을 정도로 오래된 것일까요?

열차 샘플을 세 부분으로 나누고 변형 -1과 변형 0에 대해 3 세트를 훈련하고 원래 열차 만 세 개의 샘플로 훈련했습니다.

이것이 제가 얻은 결과입니다.

이 일반화를 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부보다 훨씬 나쁘지 않다면 샘플 신선도 요인이 볼륨보다 덜 중요하다고 간주 할 수 있습니다.

쿠토, 또 다시 매트 통계에 대한 무지에 갇혀 있습니다.
매트 스탯을 다른 측면에서 쳐서 몬테카를로 화하는 아이디어가 있습니다.
 
СанСаныч Фоменко #:

두 벡터 사이의 거리로 계산되는 '예측자의 예측력'에 대해 여러 번 글을 썼습니다.

그러던 중 거리를 계산하는 도구 목록을 발견했습니다:

이것은 자체 거리 세트가 있는 표준 도구 외에도 다음과 같은 도구가 있습니다.

어떻게 사용하는지 예를 보여줄 수 있나요?