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

 
Forester #:

первое что увидел

Спасибо, действительно, помогло - странно, что при заполнении данными из массива не выдаёт ошибку.

Такой код

//+------------------------------------------------------------------+
//|Функция выполняет кластеризацию
//+------------------------------------------------------------------+
void f_Klaster(double &Input_arr_Data[],int &Output_arr_Klaster[],int N_Stolb,int N_Strok,int N_Klasters)
{
   CMatrixDouble MatrixLearn;//обучающая часть данных
   MatrixLearn.Resize(N_Strok, N_Stolb);
   for(int col=0; col<N_Stolb; col++)//Число столбцов
   {
      for(int row=0; row<N_Strok; row++)//Число строк
      {
         MatrixLearn[row].Set(col,Input_arr_Data[N_Stolb*row+col]);//строка/столбец
      }
   }

   CMatrixDouble MatrixCentroid;//массив центров
   int KM_info=0;
   CAlglib::KMeansGenerate(
      MatrixLearn,//- массив [строк , столбцов]
      N_Strok,// - число строк
      N_Stolb,// - число столбцов
      N_Klasters,//- число кластеров, сколько хотите получить
      10,// - число попыток запуска для лучшей инициализации
      KM_info,//- коды ошибок и результата выполнения
      MatrixCentroid,//- массив центров
      Output_arr_Klaster// - номер кластера для каждой строки из XY
   );

   Print("KM_info=",KM_info);
   switch(KM_info)
   {
   case -3:
      Print("-3, если задача является вырожденной (количество | отличных точек меньше K)");
      break;
   case -1:
      Print("-1, если было передано неверное NPoints/NFeatures/K/Перезапусков");
      break;
   case 1:
      Print("1, если подпрограмма успешно завершена");
      break;
   }
}

Однако, получаю в переменной KM_info значение "-3" - и теперь это загадка. Есть идеи, почему так?

 
Aleksey Vyazmikin #:

Спасибо, действительно, помогло - странно, что при заполнении данными из массива не выдаёт ошибку.

Такой код

Однако, получаю в переменной KM_info значение "-3" - и теперь это загадка. Есть идеи, почему так?

Смотрите код
         if(zerosizeclusters)
           {
            //--- Some clusters have zero size - rare,but possible.
            //--- We'll choose new centers for such clusters using k-means++ rule
            //--- and restart algorithm
            if(!SelectCenterPP(xy,npoints,nvars,ct,cbusy,k,d2,p,tmp))
              {
               info=-3;
               return;
              }
            continue;
           }

Возможно потому что у вас только 0 и 1. Проверьте для начала на более разнообразных данных

 
Forester #:

Смотрите код
         if(zerosizeclusters)
           {
            //--- Some clusters have zero size - rare,but possible.
            //--- We'll choose new centers for such clusters using k-means++ rule
            //--- and restart algorithm
            if(!SelectCenterPP(xy,npoints,nvars,ct,cbusy,k,d2,p,tmp))
              {
               info=-3;
               return;
              }
            continue;
           }

Возможно потому что у вас только 0 и 1. Проверьте для начала на более разнообразных данных

Проверил на разнообразных циферках

//---Создаем выборку
   ArrayResize(arr_Data_Load,Strok_Total_Data*Stolb_Total_Data);
   ArrayInitialize(arr_Data_Load,0);
   MathSrand(100);
   int Get_Rand=0;
   for(int i=0; i<Strok_Total_Data; i++)
      for(int j=0; j<Stolb_Total_Data; j++)
      {
         Get_Rand=MathRand();
         //if(Get_Rand>16000)arr_Data_Load[i*Stolb_Total_Data+j]=1;
         arr_Data_Load[i*Stolb_Total_Data+j]=Get_Rand;
      }

Результат тот же :(

Чегото я ещё не так делаю...

 
mytarmailS #:

вы чертовски не правы..

либо не правильно выразились

он чертовски прав

 
Aleksey Vyazmikin #:

Проверил на разнообразных циферках

Результат тот же :(

Чегото я ещё не так делаю...

Других идей нет. Попробуйте распечатать часть MatrixLearn может что-то не то...
 
Forester #:
MatrixLearn

Распечатал так - получил нули

   for(int row=0; row<N_Strok; row++)//Число строк
   {
      Print(MatrixLearn[row]);//строка/столбец
   }

Правильно ли распечатал?

Если правильно, то получается, что тут ошибка

MatrixLearn[row].Set(col,Input_arr_Data[N_Stolb*row+col]);//строка/столбец

Делал по аналогии, как у Вас в коде.

[Удален]  
fxsaber #:
К тому, что если есть закономерность, то она одинаковая в обе стороны.

То есть если есть сезонная закономерность, например "sell in may and go away", то в какие конкретно стороны она одинаковая?

 
Maxim Dmitrievsky #:

То есть если есть сезонная закономерность, например "sell in may and go away", то в какие конкретно стороны она одинаковая?

Стат. значимость такой стратегии близка к нулю.

[Удален]  
fxsaber #:

Стат. значимость такой стратегии близка к нулю.

А если не близка к нулю 
 
Aleksey Vyazmikin #:

Распечатал так - получил нули

Правильно ли распечатал?

Неправильно. Доступ на чтение как в 2мерном массиве

Print(MatrixLearn[row][col]);//строка/столбец