Обсуждение статьи "Возможности Мастера MQL5, которые вам нужно знать (Часть 16): Метод главных компонент с собственными векторами"

 

Опубликована статья Возможности Мастера MQL5, которые вам нужно знать (Часть 16): Метод главных компонент с собственными векторами:

В статье рассматривается метод главных компонент — метод снижения размерности при анализе данных, а также то, как его можно реализовать с использованием собственных значений и векторов. Как всегда, мы попытаемся разработать прототип класса сигналов советника, который можно будет использовать в Мастере MQL5.

SVD позволяет добиться снижения размерности путем разбиения набора матричных данных на три отдельные матрицы, одна из которых, матрица Σ, определяет наиболее важные направления дисперсии в данных. Эта матрица, также известная как диагональная матрица, содержит сингулярные значения, которые представляют собой величины дисперсии вдоль каждого заранее определенного направления (записанные в другой из трех матриц, часто называемой U). Чем больше сингулярное значение, тем более значимо соответствующее направление в объяснении изменчивости данных. Это приводит к тому, что столбец U с наивысшим сингулярным значением выбирается в качестве репрезентативного для всей матрицы, что фактически приводит к уменьшению размерности матрицы до одного вектора.

Наоборот, степенной метод итеративно уточняет оценку вектора, стремясь к доминирующему собственному вектору. Этот собственный вектор фиксирует направление с наиболее значительными изменениями в данных и представляет собой уменьшенную размерность исходной матрицы.

Однако, поскольку в данной статье мы сосредоточимся на собственных векторах и значениях, мы можем преобразовать матрицу n x n в n возможных векторов размера n, при этом каждому из этих векторов будет присвоено собственное значение. Это собственное значение затем определяет выбор одного собственного вектора для наилучшего представления матрицы, причем более высокое значение снова указывает на более высокую положительную корреляцию при объяснении изменчивости данных.

Автор: Stephen Njuki

 

Весьма полезная информация, спасибо.

Однако для матрицы "_m" почему бы вам не итерировать индекс "_rates" до тех пор, пока "i<=_buffer_size"?


 
Sebastien Nicolas Paul Boulenc #:

Весьма полезная информация, спасибо.

Однако для матрицы "_m" почему бы вам не итерировать индекс "_rates" до тех пор, пока "i<=_buffer_size"?


 
  if(_buffer_size >= 2)
   {  for(int i = 1; i <= _buffer_size - 1; i++)
      {
      
      ...
      
      }
   }

Должно было быть так, но учитывая большой размер буфера, я думаю, мы скопировали данные за год, эффект от этой ошибки был минимальным. Спасибо, что указали.

 
Stephen Njuki #:

Должно было быть так, но, учитывая большой размер буфера, я думаю, мы скопировали данные за год, эффект от этой ошибки был минимальным. Спасибо, что указали на это.

Конечно, это деталь, всегда пожалуйста.