Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2311

 
Эксперименты по онормаливанию распределения. Два файла с евро и 2 с разными пгсч.
Файлы:
ed1.png  550 kb
ed2.png  515 kb
rnd1.png  564 kb
rnd2.png  481 kb
 
Maxim Dmitrievsky:

Тогда нет смысла менять шило на мыло

Максим, вы вроде разобрались с алглибовским МГК https://www.mql5.com/ru/forum/36408/page17#comment_9620369

pcabuildbasis(
double[,] x,       // матрица цен инструментов 
int npoints,       // количество цен для каждого инструмента
int nvars,         // количество инструментов
out int info,      // результат операции, любое положительное число - все ок
out double[] s2,   // массив разбросов / дисперсий для всех найденных векторов
out double[,] v)   // массив векторов, каждый вектор и есть искомые весы для выравнивая наборов вокруг нуля 

Как из s2 и v получить например 2 столбца главных компонент.
Полагаю, что x надо с этими коэффициентами умножать/делить?
Есть формула?

Массивы s2 и v вроде отсортированы, главные вначале или в конце?
Индикаторы: Portfolio Optimizer
Индикаторы: Portfolio Optimizer
  • 2018.12.01
  • www.mql5.com
Portfolio Optimizer: Автор: transcendreamer...
[Удален]  
elibrarius:

Максим, вы вроде разобрались с алглибовским МГК https://www.mql5.com/ru/forum/36408/page17#comment_9620369

Как из s2 и v получить например 2 столбца главных компонент.
Полагаю, что x надо с этими коэффициентами умножать/делить?
Есть формула?

Массивы s2 и v вроде отсортированы, главные вначале или в конце?

Делал pca и lda, но уже не вспомню, к сожалению, давно было. Ничего полезного не получил, поэтому забылось 

 

Может еще кто знает?

Тут шаг 4, есть такой код по созданию столбцов компонент, но пока не пойму как циклами и (*/+-) такое повторить.

_, vecs = np.linalg.eig(covmat)
v = -vecs[:,1])
Xnew = dot(v,Xcentered)
print Xnew

OUT: [ -9.56404107 -9.02021624 -5.52974822 -2.96481262 0.68933859 0.74406645 2.33433492 7.39307974 5.3212742 10.59672425]


dot(X,Y) — почленное произведение (так мы перемножаем векторы и матрицы в Python)
Как работает метод главных компонент (PCA) на простом примере
Как работает метод главных компонент (PCA) на простом примере
  • habr.com
В этой статье я бы хотел рассказать о том, как именно работает метод анализа главных компонент (PCA – principal component analysis) с точки зрения интуиции, стоящей за ее математическим аппаратом. Максимально просто, но подробно. Математика вообще очень красивая и изящная наука, но порой ее красота скрывается за кучей слоев абстракции. Показать...
[Удален]  
elibrarius:

Может еще кто знает?

Тут шаг 4, есть такой код по созданию столбцов компонент, но пока не пойму как циклами и (*/+-) такое повторить.

_, vecs = np.linalg.eig(covmat)
v = -vecs[:,1])
Xnew = dot(v,Xcentered)
print Xnew

OUT: [ -9.56404107 -9.02021624 -5.52974822 -2.96481262 0.68933859 0.74406645 2.33433492 7.39307974 5.3212742 10.59672425]


dot(X,Y) — почленное произведение (так мы перемножаем векторы и матрицы в Python)

https://gist.github.com/freemancw/2981258

Alglib PCA Example
Alglib PCA Example
  • gist.github.com
Alglib PCA Example. GitHub Gist: instantly share code, notes, and snippets.
 
Видел. Это не то. Тут матрицу 3х3 просто в переменные переписаны. Но новые вектора компонент не вычислены.
В результате нужно получить для каждой компоненты 6 строк (по этому примеру).
[Удален]  
elibrarius:
Видел. Это не то. Тут матрицу 3х3 просто в переменные переписаны. Но новые вектора компонент не вычислены.
В результате нужно получить для каждой компоненты 6 строк (по этому примеру).

реально потерял и не помню.. была версия бота на pca, если найду потом скину

 
Maxim Dmitrievsky:

реально потерял и не помню.. была версия бота на pca, если найду потом скину

Поиск по слову PCABuildBasis на всем диске может помочь) Если файл не удален.
[Удален]  
elibrarius:
Поиск по слову PCABuildBasis на всем диске может помочь) Если файл не удален.

в облаке в архивах все старое

вот кусок кода c pca или lda (второе закомментировано)

//+------------------------------------------------------------------+
//|Use LDA for inputs transforming                                   |
//+------------------------------------------------------------------+
CRLAgent::PCApermutation(void) {                                         
 int inf;    
 double s2s[];            
 //CLDA::FisherLDAN(RDFPM,RDFPM.Size(),features,2,inf,LDAmatrix); 
 CPCAnalysis::PCABuildBasis(RDFPM,RDFPM.Size(),features,inf,s2s,LDAmatrix);  
 RDFPMPCA.Resize(RDFPM.Size(),this.features+2);  
 ArrayResize(PCAarr,features*features);
   
 int ldaind=0;
 for(int f=0;f<this.features;f++)
  for(int i=0;i<this.features;i++) {
   PCAarr[ldaind] = LDAmatrix[i][f];
   ldaind++; }
   
 for(int s=0; s<this.features; s++) {
  for(int i=0;i<RDFPMPCA.Size();i++) {
   double feach = 0;
   for(int f=0;f<this.features;f++)
    feach+=RDFPM[i][f]*LDAmatrix[f][s];   
    RDFPMPCA[i].Set(s,feach);
    RDFPMPCA[i].Set(this.features,RDFPM[i][this.features]);
    RDFPMPCA[i].Set(this.features+1,RDFPM[i][this.features+1]); } }                      
  CDForest::DFBuildRandomDecisionForest(RDFPMPCA,RDFPMPCA.Size(),this.features,2,trees,r,RDFinfo,RDF,RDF_report);
  RDF_report.m_oobrelclserror = CDForest::DFRelClsError(RDF,RDFPMPCA,RDFPMPCA.Size());
 
 ArrayResize(permutated,this.features);
 double buypass[]; ArrayResize(buypass,RDFPMPCA.Size());
 for(int s=0; s<this.features; s++) {
  for(int i=0;i<RDFPMPCA.Size();i++) {  
   buypass[i] = RDFPMPCA[i][s];
   RDFPMPCA[i].Set(s,rand()/32767.0); } 
  permutated[s][1] = s; double err = CDForest::DFRelClsError(RDF,RDFPMPCA,RDFPMPCA.Size()); if(err == 0.0) err = 0.001;
  permutated[s][0] = RDF_report.m_oobrelclserror / err; 
  for(int i=0;i<RDFPMPCA.Size();i++) RDFPMPCA[i].Set(s,buypass[i]); }
   
 ArraySort(permutated); ArrayResize(permutated,this.bf_n); 
 RDFPM.Resize(RDFPMPCA.Size(),this.bf_n+2);
  
 for(int s=0; s<this.bf_n; s++) {
  for(int i=0;i<RDFPMPCA.Size();i++) {   
   RDFPM[i].Set(s,RDFPMPCA[i][(int)permutated[s][1]]);
   RDFPM[i].Set(bf_n,RDFPMPCA[i][this.features]);
   RDFPM[i].Set(bf_n+1,RDFPMPCA[i][this.features+1]); } } 
 CDForest::DFBuildRandomDecisionForest(RDFPM,RDFPM.Size(),this.bf_n,2,trees,r,RDFinfo,RDF,RDF_report); }
[Удален]  

Вот еще 

//+------------------------------------------------------------------+
//|Use LDA for inputs transforming                                   |
//+------------------------------------------------------------------+
CRLAgent::LDA(void) {                                        
   CDecisionForest   mRDF;                                                  
   CDFReport         mRep;   
   int inf;    
   double s2s[];            
   //CLDA::FisherLDAN(RDFpolicyMatrix,RDFpolicyMatrix.Size(),features,2,inf,LDAmatrix); 
   CPCAnalysis::PCABuildBasis(RDFpolicyMatrix,RDFpolicyMatrix.Size(),features,inf,s2s,LDAmatrix);
   
   
   RDFpolicyMatrix2.Resize(RDFpolicyMatrix.Size(),bestfeatures_num+2);
   
   ArrayResize(LDAarr,features*features);
   
   int ldaind=0;
   for(int f=0;f<this.features;f++)
     for(int i=0;i<this.features;i++){
       LDAarr[ldaind] = LDAmatrix[i][f];
       ldaind++;
      }
   
   for(int s=0; s<this.bestfeatures_num; s++) {
     for(int i=0;i<RDFpolicyMatrix.Size();i++) {
       double feach = 0;
       for(int f=0;f<this.features;f++)
         {
          feach+=RDFpolicyMatrix[i][f]*LDAmatrix[f][s];
         }
        RDFpolicyMatrix2[i].Set(s,feach);
        RDFpolicyMatrix2[i].Set(bestfeatures_num,RDFpolicyMatrix[i][this.features]);
        RDFpolicyMatrix2[i].Set(bestfeatures_num+1,RDFpolicyMatrix[i][this.features+1]);
       }
    }
                        
  CDForest::DFBuildRandomDecisionForest(RDFpolicyMatrix2,RDFpolicyMatrix2.Size(),bestfeatures_num,2,trees,r,RDFinfo,RDF,RDF_report);
 }