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

Aleksey Vyazmikin #:

Мю, как я понимаю - среднее значение для каждого предиктора, оказавшегося в кластере.

А что такое среднее от всех? Это и есть центр кластера по этому столбцу.

[Удален]
mytarmailS #:
Будет ли тс зарабатывать на тесте да/нет

 вероятность по бинарной классификации. 

Либо наклон кривой каптала на тесте по регресии или там ФВ или шарп или сколько заработает на тесте цифра. 

А лучше вместе две модели и классификация и Регресия. 


Тогда можно нагенрить 1000 ТС,   потом выбрал по  20 самых лучшых по вероятности что заработает на тесте, потом отобрал по регресии n лучшых по шарпу по регресии. 

Круто

Експеримент серьёзный
Типа датасет состоит из 1000 моделей с оценками их работы на новых данных? А зачем их классифицировать, можно же просто отсортировать

А, чтобы в среднем посмотреть, какие параметры чаще приводят к успешному успеху             
Maxim Dmitrievsky #:
Типа датасет состоит из 1000 моделей с оценками их работы на новых данных? А зачем их классифицировать, можно же просто отсортировать

А, чтобы в среднем посмотреть, какие параметры чаще приводят к успешному успеху             

Нет, не правильно.. попробую еще раз обьяснить,  забудь про модели пока вообще..

Есть у тебя много ТС оптимизированыйх на трейн и есть тест.


Создаем датасет для модели :

таргет = По тест мы смотрим работала ли ТС на тест  (это целевая ДА/НЕТ)

дата =  (признаки) это параметры ТС , кривая капитала, сделки, ФВ, шарп (если ТС на основе МО то кишки модельки)


Далее трейним уже как бы реальную модель отвечать будет работать конкретная ТС на тесте или нет

Aleksey Vyazmikin #:

Баловство всё это. Пока не сможете детектить смещение вероятности в отдельно взятом листе - модели будут лить.

А для работы с листом или квантовым отрезком - нужно достаточно много откликов на истории, а этого нет, а без этого недостаточно стат данных... поэтому модели будут сомнительны...

Откуда береться смещение?

Если примеров в листах не достаточно и модели будут лить то зачем вообще говорить пр эти листы. 
Forester #:
Уже года 4 Алглибом не занимался.
Вот нашел в старом файле свой тест kmeans c ф-ей предикта:

#include <Math\Alglib\alglib.mqh>
   CMatrixDouble MatrixLearn;//обучающая часть данных
// заполнить MatrixLearn например MatrixLearn[row].Set(col,123.0); или считать из файла ф-ей LoadFullMatrix() см. ниже
   CMatrixDouble c;//центры кластеров - по ним можно отнести любую строку к одному из кластеров
   int klusters = 4, restarts=10;
   int xyc[],xycp[];//номер кластера для каждой строки

   KMeans(klusters, restarts, dt.MatrixLearn, c, xyc);//кластеризация: данные, число кластеров, число перезапусков - //в итоге матрицу можно поделить на klusters матриц и обрабатывать по отдельности
   predict_CKMeans(MatrixLearn,dt.MatrixLearn.Size(),dt.ins_all,klusters,c,xycp);
   Print("Predicted cluster indexes");
   string t0="";for(int i=0; i<(ArraySize(xycp)>20?20:ArraySize(xycp)); i++){ t0+=(string)(xycp[i])+", ";} Print(t0+"... (",ArraySize(xycp)," items)."); //печать первых 20 элементов
   int ac = ArrayCompare(xyc,xycp); Print("ArrayCompare: ",ac);


   // -------------- кластеризация --------------

   void KMeans(int klusters, int Restarts, CMatrixDouble &mtr, CMatrixDouble &c, int &xyc[])//кластеризация
      {
   //кластеризация в Data Mining приобретает ценность тогда, когда она выступает одним из этапов анализа данных, построения законченного аналитического решения. Аналитику часто легче выделить группы схожих объектов, изучить их особенности и построить для каждой группы отдельную модель, чем создавать одну общую модель для всех данных.
      Print("Кластеризация:");
      int info;
      CAlglib::KMeansGenerate(mtr,mtr.Size(),ins_all,klusters,Restarts,info,c,xyc);
      // в XYC - номер кластера к которому строка отнесена, в с  центр кластера для каждого столбца
      //в итоге матрицу можно поделить на klusters матриц и обрабатыватьпо отдельности
      Print("cluster indexes");
      string t0;for(int i=0; i<(ArraySize(xyc)>20?20:ArraySize(xyc)); i++){ t0+=(string)(xyc[i])+", ";} Print(t0+"... (",ArraySize(xyc)," items)."); //печать первых 20 элементов

      int xycp[];//проверка
      predict_CKMeans(mtr,mtr.Size(),ins_all,klusters,c,xycp);
      Print("Predicted cluster indexes");
      t0="";for(int i=0; i<(ArraySize(xycp)>20?20:ArraySize(xycp)); i++){ t0+=(string)(xycp[i])+", ";} Print(t0+"... (",ArraySize(xycp)," items)."); //печать первых 20 элементов
      int ac = ArrayCompare(xyc,xycp);
      Print("ArrayCompare: ",ac);
      //Print("matrix whose columns store cluster's centers:"); printMatrix(c);
   }
   
//+------------------------------------------------------------------+
//| k-means++ clusterization    -> predict cluster number            |
//| INPUT PARAMETERS:                                                |
//|     XY          -   dataset, array [0..NPoints-1,0..NVars-1].    |
//|     NPoints     -   dataset size, NPoints>=K                     |
//|     NVars       -   number of variables, NVars>=1                |
//|     K           -   desired number of clusters, K>=1             |
//| OUTPUT PARAMETERS:                                               |
//|     CT           -   array[0..NVars-1,0..K-1].matrix whose columns|
//|                     store cluster's centers                      |
//|     XYC         -   array[NPoints], which contains cluster       |
//|                     indexes                                      |
//+------------------------------------------------------------------+

void predict_CKMeans(CMatrixDouble &xy,const int npoints,
                                    const int nvars,const int k,
                                    CMatrixDouble &ct,int &xyc[])
{//--- fill XYC with center numbers
   ArrayResize(xyc,npoints);
    for(int i=0;i<npoints;i++){
        int cclosest=-1;
        double dclosest=1E300, tmp;
        for(int j=0;j<k;j++){
         double v=0.0;
         for(int i_=0;i_<nvars;i_++){
            tmp=xy[i][i_]-ct[i_][j];
            v+=tmp*tmp;
         }
            if(v<dclosest){cclosest=j;dclosest=v;}//--- check
        }
        xyc[i]=cclosest;//--- change value
    }
}


//+--------------------загрузка полной обучающей матрицы из CSV файла входы и выходы ----------------------------------------------+
void LoadFullMatrix(string fName, string delimeter=","){//загрузка полной обучающей матрицы из CSV файла входы и выходы
   int file_handle=FileOpen(fName,FILE_READ|FILE_TXT|FILE_ANSI|FILE_COMMON);

      if(file_handle!=INVALID_HANDLE){
         string s; int k; ushort u_sep=StringGetCharacter(delimeter,0); string r[]; int cols=0,row=0; bool first_line=false;
         while(!FileIsEnding(file_handle)){
            s=FileReadString(file_handle);
            if(!first_line && row==0){first_line=true;continue;}//если 1-я строка, то пропуск - там м.б. названия строк
            k=StringSplit(s,u_sep,r);
            if(cols==0){cols=k;}
            if(cols!=k){Alert("Нарушена размерность матрицы (",cols,"!=",k,") в строке ",row);continue;}

            MatrixLearn.Resize(row+1, cols);
            for(int i=0;i<k;i++) {
               MatrixLearn[row].Set(i,(double)r[i]);
            }
            row++;
         }
         FileClose(file_handle);
         rows=row;
         ins_all=cols-outs;
         ins=ins_all;
         Print("Считана матрица (",ins_all," + ",outs,") = ",cols," x ",rows, " из файла ",fName);
      }
}


[Удален]
Полезное исследование :)
[Удален]
mytarmailS #:

Нет, не правильно.. попробую еще раз обьяснить,  забудь про модели пока вообще..

Есть у тебя много ТС оптимизированыйх на трейн и есть тест.


Создаем датасет для модели :

таргет = По тест мы смотрим работала ли ТС на тест  (это целевая ДА/НЕТ)

дата =  (признаки) это параметры ТС , кривая капитала, сделки, ФВ, шарп (если ТС на основе МО то кишки модельки)


Далее трейним уже как бы реальную модель отвечать будет работать конкретная ТС на тесте или нет

не вкупаю пока суть, если пример сделаешь - может дойдет )

или статью
[Удален]

Есть еще одна неочевидная вещь, которая может влиять на результаты обучения. Это, например, обучать классификатор не только прогнозировать метки бай/селл, но одновременно обучать его классифицировать котиков (грубый пример). То есть учить основной задаче и разным побочным задачам. 

Это может как-то повлиять на внутреннюю структуру модели. Не видел таких исследований.

Forester #:

Вроде все просто - см комментарии на русском.

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

Forester #:

А что такое среднее от всех? Это и есть центр кластера по этому столбцу.

Вероятно - разная терминология скорей всего.

Forester #:
Вот нашел в старом файле свой тест kmeans c ф-ей предикта:

Спасибо за код! Жаль, что он не компилируется.

mytarmailS #:
Откуда береться смещение?

Если примеров в листах не достаточно и модели будут лить то зачем вообще говорить пр эти листы. 

Если нет смещения, то модель будет работать адекватно на новых данных.

Листья, попадающие под отбор содержат обычно 5% откликов от всей выборки, что при выборке в пару тысяч примеров мало для какого либо интервального анализа.

В прошлом году всем этим занимался.