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

 
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);
 }
 

Спасибо, буду разбираться

 
elibrarius:

Спасибо, буду разбираться

тут вроде. Признаки умножаются на коэффициенты векторов

потом на компонентах лес обучается

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]);
       }
    }
 
У Людвига есть модели глубокого обучения без необходимости писать код, для обучения модели не требуются навыки программирования:https://ludwig-ai.github.io/ludwig-docs/
Ludwig - code-free deep learning toolbox
Ludwig - code-free deep learning toolbox
  • ludwig-ai.github.io
Ludwig is a toolbox for training and testing deep learning models without writing code
 
Maxim Dmitrievsky:

тут вроде. Признаки умножаются на коэффициенты векторов

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]);
       }
    }

потом на компонентах лес обучается

1) Не совсем понятен смысл. Вместо 100 столбцов исходных данных, подали 100 столбцов главных компонент, в которых потеряна часть информации.
Надо бы вместо 100 исходных подать 10-20 главных компонент, тогда потеря информации компенсируется скоростью обучения.


2) Так и не придумал, как из 100 столбцов на 1000 строк сделать 10 столбцов на 1000 строк ГК.
Нужно из первых 10 компонент сгенерировать 1000 строк. Матрица с компонентами будет 100х100.

Индикаторы: Portfolio Optimizer
Индикаторы: Portfolio Optimizer
  • 2018.12.01
  • www.mql5.com
Portfolio Optimizer: Автор: transcendreamer...
 
elibrarius:

1) Не совсем понятен смысл. Вместо 100 столбцов исходных данных, подали 100 столбцов главных компонент, в которых потеряна часть информации.
Надо бы вместо 100 исходных подать 10-20 главных компонент, тогда потеря информации компенсируется скоростью обучения.

))))

Если из ста признаков делается сто компонент то процент потери информации  0.0%

теорию подучил бы, что ли ))

 
mytarmailS:

))))

Если из ста признаков делается сто компонент то процент потери информации  0.0%

теорию подучил бы, что ли ))

По теории пожалуй так.
Но все равно, смысл действа? Если в скорости нет выигрыша, а скорее замедление, на лишнюю операцию.
Надо получить 10 из 100. Есть решение?
 
elibrarius:
По теории пожалуй так.
Но все равно, смысл действа?

Тут не поспоришь, смысла нет...

elibrarius:
Надо получить 10 из 100. Есть решение?

Я не знаю как в алглиб там все устроено, попробуй  вытащить инфу из функции рса и посмотреть сколько компонент нужно чтобы достаточно описать 100 призаков

Или просто взять первые n столбцов рса и париться...


Но все это бес толку... если у тебя 50к признаков, то рса тебе просто необходим, а если ты хочешь поиграться толком не понимая что делаешь, то тебе рса не надо вообще, результат будет хуже чем без рса с вероятностью 99.999...%   ну ты понял..

 
elibrarius:
По теории пожалуй так.
Но все равно, смысл действа? Если в скорости нет выигрыша, а скорее замедление, на лишнюю операцию.
Надо получить 10 из 100. Есть решение?

взять 1-е 10 компонент ков. матрицы

Причина обращения: