Группировка листьев - требуются мысли и идеи - страница 2

 
Aliaksandr Hryshyn:
Мера похожести есть? Дальше выбираем алгоритм кластеризации...

Мера похожести - процент совпадения правильной классификации с сопоставляемым листом.

С кластеризацией у меня плохо, в плане, разве можно менять пространство кластеризации при самой кластеризации? Я про то, что нужен такой метод, которому не важна очередность столбцов. Какой это метод?

 
Алексей Тарабанов:

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

Теперь я занимаюсь с внучкой, интересуясь исключительно тем, как она будет решать задачу; результат не контролирую - на то есть учитель. 

Ребенку это нравится, результат меня вполне удовлетворяет. От 5 вниз только из-за невнимательности, или неаккуратности. 

Правильный подход для действий, которые можно рационализировать и систематизировать.

Алексей Тарабанов:


В Вашей логике вижу серьезный изъян: сначала Вы строите дерево принятия решений и оцениваете соответствие его исходов желаемому результату, а после - напрочь забываете о существовании дерева и сводите задачу к кластерному анализу этих исходов. Тем самым, Вы уходите от обучения системы методам решения задачи в сторону обучения ее угадыванию конечного результата. В случае с ребенком это равноценно простому контролю правильности ответов (значений), т.е. уходу от обучения мышлению, понимания сути задачи и способа ее решения. Просто угадайка. 

Во-первых Вы явно переоцениваете достижения, доступные широкому кругу лиц, в ИИ. ИИ - это просто систематизированные псевдослучайно знания об объекте или явлении.

Во-вторых, Вы не поняли, и возможно я недостаточно четко на это указал, что работа ведется не со всеми листьями дерева, а с предварительно отобранными по определенной методике. Рынок слишком сложен, что бы его полностью описать одним деревом, во всяком случае у меня нет таких предикторов (признаков), которые бы это сделали с высокой точностью и полнотой даже на истории.

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


Алексей Тарабанов:

К чему клоню: в первом посте Вы привели таблицу, в которой уже все есть: исходы и их соответствие желаемому результату; нет только дерева. Просто приподнимитесь на один уровень вверх после полной декомпозиции,- оцените, какие именно ветви дерева приводят к желаемому исходу. Далее попробуйте выявить их "скрытые" родительские ветви, которые Вы не могли обнаружить при декомпозиции, поскольку не знали конечного результата. Ну и так далее, вверх по дереву. 

Как раз ветви и уже отобраны, а вот анализ самих ветвей в ручную - очень трудоемкое занятие, которое приведет к выдвижению необоснованных гипотез, в то время, как один лист может описывать только часть явления, а группа из листьев сможет более полно охарактеризовать явление, но интерпретировать её ещё сложней. Если бы были точные методы по отбраковки ненужных предикторов, то это было бы значительно проще, а пока велик риск сконцентрировать внимание на мусоре, который есть внутри, почти, каждого листа.

Алексей Тарабанов:

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

На правах имхенько... 

Увы, так оно не работает, обучить искать способы - это равносильно многопризнаковой классификации, результаты которой тем скудней, чем больше признаков (методов решения задачи). Идея хорошая, но реализация неопределенная.

 
Спасибо за ответ. Здоровья. 
 
Алексей Тарабанов:
Спасибо за ответ. Здоровья. 

Спасибо, его как раз и не хватает.

 

Получился такой код по решению задачи группировки листьев.

//+------------------------------------------------------------------+
//|                                      Tree_Analiz_List_Test_P.mq5 |
//|                                                          -Aleks- |
//|                            https://www.mql5.com/ru/users/-aleks- |
//+------------------------------------------------------------------+
#property copyright "-Aleks-"
#property link      "https://www.mql5.com/ru/users/-aleks-"
#property version   "1.00"
#property script_show_inputs

input double Proc_Group=50.0;//Процент для объединения в группы

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{

int arr_Index_GroupA_Max[]={1,0,8,2,0,2,8,8,0,9};
double arr_Sovpalo_Max[]={66.67,100.00,100.00,100.00,100.00,100.00,100.00,66.67,50.00,33.33};

   int Total_List=9;

   double arr_Group_L[];//Условная группа по похожести на лист
   ArrayResize(arr_Group_L,Total_List+1);
   ArrayInitialize(arr_Group_L,-1);

   int Index_arr_GroupA_Max=0;//Индекс максимального совпадения
   double arr_GroupA_Max=0;//Максимальное совпадение со всеми группами в процентах

   for(int L=0; L<Total_List+1; L++)//Отсеиваем по порогу похожесть листьев
   {
      Index_arr_GroupA_Max=arr_Index_GroupA_Max[L];
      arr_GroupA_Max=arr_Sovpalo_Max[L];
      if(arr_GroupA_Max>=Proc_Group)
      {
         arr_Group_L[L]=Index_arr_GroupA_Max;
      }
      else
      {
         arr_Group_L[L]=L;
      }
   }

   int arr_Index_List[];//Архив с индексацией листьев похожести с учетом порога
   ArrayCopy(arr_Index_List,arr_Group_L,0,0,WHOLE_ARRAY);
   int arr_N[];//Массив привязывающий лист к группе
   ArrayResize(arr_N,Total_List+1+0);
   ArrayInitialize(arr_N,-1);

   int N_Index=0;//Порядковый номер заполненного индекса массива arr_Index_N

   for(int N=0; N<Total_List+1; N++)//Номер группы
   {
      int arr_Index_N[];//Массив, в котором хранятся листья входящие в группу
      ArrayResize(arr_Index_N,(Total_List+1+0)*2);
      ArrayInitialize(arr_Index_N,-1);
      int Calc_List=Total_List+1;
      for(int i=0; i<Calc_List; i++)//Номер первого листа в группе
      {
         if(arr_N[i]==-1)//Обнаружен первый лист новой группы
         {
            N_Index=0;//Обнулили информацию о записи в регистр массива, содержащий информацию об индексах, попадающих в группу
            arr_Index_N[0]=i;//Индекс текущего листа
            arr_Index_N[1]=arr_Index_List[i];//Индекс корреспондирующего листа
            arr_N[i]=N;//Отнесли к группе первый лист в группе
            arr_N[arr_Index_List[i]]=N;//Отнесли к группе корреспондирующий лист в группе
            N_Index=0+1;//Учли запись в регистр массива, содержащий информацию об индексах, попадающих в группу
            Calc_List=0;//Остановили цикл, так как найден первый лист группы
            for(int X=0; X<N_Index+1; X++)//Перебор делаем для каждого нового индекса
            {
               for(int L=0; L<Total_List+1; L++)//Ищем связи корреспондирующих индексов листьев
               {
                  if(arr_Index_List[L]==arr_Index_N[X] && arr_N[L]==-1)//Выявили лист относящийся к группе, 
                  {
                     arr_N[L]=N;//Отнесли к текущей группе лист
                     arr_N[arr_Index_List[L]]=N;//Отнесли к текущей группе корреспондирующий лист
                     N_Index++;//Учли запись в регистр массива, содержащий информацию об индексах, попадающих в группу
                     arr_Index_N[N_Index]=arr_Index_List[L];//Индекс корреспондирующего листа - сохранили во временный массив группы
                     N_Index++;//Учли запись в регистр массива, содержащий информацию об индексах, попадающих в группу                    
                     arr_Index_N[N_Index]=L;//Индекс текущего листа - сохранили во временный массив группы
                     //Print("N=",N," N_Index=",N_Index);
                  }
               }
            }
         }
      }
   }

ArrayPrint(arr_N,0,NULL,0,WHOLE_ARRAY);
}
//+------------------------------------------------------------------+

При пороге 50%

2020.01.04 11:18:50.896 Tree_Analiz_List_Test_P (Si-3.20,M1) 0 0 0 0 0 0 0 0 0 1

При пороге 90%

2020.01.04 11:19:04.244 Tree_Analiz_List_Test_P (Si-3.20,M1) 0 0 1 1 0 1 1 2 1 3

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

Осмысливаю результаты группировки своих листьев деревьев.

Ниже привожу группировку  с порогом 60% в виде графика для листьев на покупку, а потом для листьев на продажу - x - номер группы, а y - номер листа.

Смущает меня распределение листьев - получается, что большие группы в 1/3 левый части графика, то есть "первые" группы более насыщены похожими друг на друга листьями, а более поздние группы боле разряжены. Случайность это или ошибка алгоритма - вот в чем вопрос.

 

Для наглядности давайте посмотрим, что реально дает группировка.

Напомню, цели:

"

Почему необходимо группировать - с целью распределения рисков экспертных мнений листьев, т. е. если 10 листьев научились похожему, а один другому, то их участие в принятии решения должно быть сбалансировано - 50% на 50%, а на 10 против одного. Каждая группа в моей торговой системе имеет право на риск одной единицей торгуемого лота.

"

Соответственно отсюда вытекает прозаичная цель - снижение максимального объема торгуемого лота, то есть уменьшение ГО, необходимого для торговли.

Ниже представлена таблица, с первоначальным результатом, применением группировки с порогом 60% и 0% (т.е. группировка без ограничения), а так же использован дополнительный метод по активации листов - коэффициент среднего значения группы при успешной классификации. ТС предусматривает открытие по рынку, поэтому взял ГО по Si 5500*2=11000.




График "Исходный вариант"


График "Группировка с порогом 0% и Коэффициент активации"


Группировка с порогом 60%, без применения коэффициента, позволила снизить объем лота на 35%, что с одной стороны мало, а с другой стороны это существенная разница, хотя и некоторые относительные показатели ухудшились. Мои мысли - нужно подумать о повторной свертки уже этих групп - возможно их можно будет лучшим образом объединить.

Группировка с порогом 0%, с применением коэффициента, показала значительно лучший результат, уменьшив объем на 90% и улучшив относительные показатели.

И хотя тестирование проводилось на истории частично участвующей в обучении (дообучении) модели и не участвующей в обучении модели, можно говорить о том, что для условно стационарных данных этот метод может быть полезен, а в трейдинге - поживем и увидим.

А так выглядят группы с порогом 0% - на покупку и продажу


 
Появились умные люди и правильная тема, я без сарказма. Идете правльно, но длинным путем. Путь нужно пройти, тогда возможно увидите короткий путь. Советник готовый дадите потестировать?
 
Vasily Belozerov:
Появились умные люди и правильная тема, я без сарказма. Идете правльно, но длинным путем. Путь нужно пройти, тогда возможно увидите короткий путь. Советник готовый дадите потестировать?

Правильно шли или нет можно понять по окончанию дороги, при этом параллельно не пройти, да и приключения,как и их исход, зависят от путника...

Окончательный вариант в деле развития идеи не бывает, бывает последний вариант, который привел к разочарованию в идеи...

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

 
Aleksey Vyazmikin:

Правильно шли или нет можно понять по окончанию дороги, при этом параллельно не пройти, да и приключения,как и их исход, зависят от путника...

Окончательный вариант в деле развития идеи не бывает, бывает последний вариант, который привел к разочарованию в идеи...

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

Интересно. И на R можете дать, или если коммерческий продукт, то просто дать ссылку на его описание. Мне надо сравнить с тем что я делаю, вы ничего не потеряете от этого)

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