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

 

Кто нибудь может мне объяснить очень простым но достаточно точным языком по каким принципам RF строит шкалу важности предикторов?

У меня вот есть набор с двумя классами в целевой , количество наблюдений в одном классе в сотни раз больше чем во втором, я откуда то  помню что один из критериев важности проедикторов у RF является частота появлений какого то наблюдения.

Так вот мне интересно, не подавляет ли RF тот класс в котором мало наблюдений  при расчете важности предикторов

 
интересная статья вернее статьи там практически нет, интересные картинки про нелинейный "pca") https://imdevsoftware.wordpress.com/tag/non-linear-pca/
Discriminating Between Iris Species
Discriminating Between Iris Species
  • imdevsoftware.wordpress.com
The Iris data set is a famous for its use to compare unsupervised classifiers. The goal is to use information about flower characteristics to accurately classify the 3 species of Iris. We can look at scatter plots of the 4 variables in the data set and see that no single variable nor bivariate combination can achieve this. One approach to...
 
mytarmailS:

Я так подозреваю что вы на форексе, на форексе нет брокеров и они не торгуют, это конторки работающие по документам букмекеров

 п.с. что думаете о моем предложении по отбору признаков? 

Ну да, дилинг центр а не брокер. Но выход на межбанк им всё равно никто не отменял.

Ваш отбор вроде бы логичный. Но я решил не отбирать индикаторы по своим понятиям, ибо это никогда не приносило улучшения модели. А лучше дать много индикаторов алгоритму для отбора, пускай он решает что хорошо а что нет. Иногда у меня скользящие средние тоже попадают в финальный набор предикторов, я думаю они могут давать какую-то информацию не сами по себе, а в комбинации с другими индикаторами. Но результаты у меня пока-что нестабильные, гарантировать их полезность ещё не могу.
Ещё я бы не пытался предсказать именно разворот, в тренировочных данных класс "всё по-старому" будет иметь в десятки раз больше случаев чем "разворот", а говорят что отношение классов для обучения лучше иметь в отношении 50/50.

 
СанСаныч Фоменко:

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

Алгоритм работает хорошо. Отобранные им предикторы не приводят к переобучению моделей.

 

ПС

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

Переобучаются все модели с любыми наборами данных.

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

Вероятность переобучения в равной степени зависит от набора данных и типа модели.

Не нужно иллюзий.

Посмотрите пакет pbo, там интересно этот вопрос рассмотрен.

Удачи

 
Vladimir Perervenko:

Переобучаются все модели с любыми наборами данных.

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

Вероятность переобучения в равной степени зависит от набора данных и типа модели.

Не нужно иллюзий.

Посмотрите пакет pbo, там интересно этот вопрос рассмотрен.

Удачи

Посмотрел. Исходные посылки совершенно не понятны. Особенно "рост числа наблюдений ведет к переобучению"???

 

Я использую совершенно понятный и, главное, практически ценный, критерий.

Суть излагал много раз. Повторю.

 

Я использую следующий критерий переобучения (сверхподгонки): если ошибка при обучении НЕ равна ошибке на других данных, вне выборки обучения, т.е. на других временных интервалах, то модель переобучена. Т.е. при обучении модель выхватила некоторые частности, которые она не встретила на последующих временных интервалах.

Как это реализуется на практике. 

Берем котир, например 10 000 бар.

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

Итак беру первые бары с номера 1 по 7000. Эти бары использую для обучения тестирования и валидации. Для дележа на три набора использую, например, sample, или то, что встроено в саму модель.

Получаю три цифры результативности модели. Если модель не переобучена, то эти цифры примерно равны.

Далее самое главное.

Беру файл с барами 7001 по 10 000. И использую обученную на предыдущих барах модель. Получаю ошибку. Если ошибка незначительно отличается от предыдущих трех, то модель НЕ переобучена.   Обычно считаю, что если расхождение 15-20%, то не переобучена. Если одна из цифр отличает от какой-либо другой более, чем на 50%, значит модель переобучена.

 

Так вот своей методике я из некоторого набора предикторов отбираю некоторое подмножество. Если таковые находятся, что совсем не обязательно, то в дальнейшем такие модели как randomforest, SVM,  ada и их разновидности НЕ переобучаются!  Про другие модели не знаю - не пользуюсь.

Это не иллюзии. Это факт.

 
mytarmailS:

Кто нибудь может мне объяснить очень простым но достаточно точным языком по каким принципам RF строит шкалу важности предикторов?

У меня вот есть набор с двумя классами в целевой , количество наблюдений в одном классе в сотни раз больше чем во втором, я откуда то  помню что один из критериев важности проедикторов у RF является частота появлений какого то наблюдения.

Так вот мне интересно, не подавляет ли RF тот класс в котором мало наблюдений  при расчете важности предикторов

У Вас дикая НЕ сбалансированность классов, а это не есть хорошо. Есть алгоритмы балансировки классов, но в Вашем случае у меня ничего не получилось. Я пытался разворот ЗЗ обозначить не одним номером бара, а несколькими, до и после разворота. Это уменьшало не сбалансированность, но проблему не решало. 

Я не нашел моделей, которые бы гарантировано работали на НЕ сбалансированных классах. 

 
СанСаныч Фоменко:

У Вас дикая НЕ сбалансированность классов, а это не есть хорошо. Есть алгоритмы балансировки классов, но в Вашем случае у меня ничего не получилось. Я пытался разворот ЗЗ обозначить не одним номером бара, а несколькими, до и после разворота. Это уменьшало не сбалансированность, но проблему не решало. 

Я не нашел моделей, которые бы гарантировано работали на НЕ сбалансированных классах. 

Мне про отбор признаков вопрос интересен
 
mytarmailS:
Мне про отбор признаков вопрос интересен

Все, что считал нужным, я ответил.

Если у Вас имеется набор признаков с целевой переменной, присылайте, проведу отбор, потом построите на отобранных модели и посмотрим результат  

 
Никто случайно не пробовал применить нелинейный pca?? ссылку на который я оставил выше, у меня что то не получается новые данные им распознавать, ошибку выдает 
 
mytarmailS:
Никто случайно не пробовал применить нелинейный pca?? ссылку на который я оставил выше, у меня что то не получается новые данные им распознавать, ошибку выдает 

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

#установка пакета, нужно выполнить один раз и перезапустить R
source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание pca объекта
library(pcaMethods)
browseVignettes("pcaMethods") #хелп файлы
data(metaboliteDataComplete)
mdC <- prep(metaboliteDataComplete, scale="none", center=TRUE)
resNipals <- pca(md, method="nipals", center=FALSE, nPcs=5)

Это создаст объект resNipals (Nonlinear Estimation by Iterative Partial Least Squares) с 5 главными компонентами для анализа таблицы metaboliteDataComplete. Вместо metaboliteDataComplete можно подставить свою таблицу с предикторами. Важно не подавать сюда целевую переменную, она будет использована позже.

 

Но этого хватит только для анализа взаимосвязей между переменными, путём изучения разных графиков. Для создания предсказательной модели после этого строится модель линейной регрессии, которая использует главные компоненты PC1, PC2,PC3,PC4,PC5 как входные переменные (x1,x2,x3,...). И в линейную модель уже подаётся целевая переменная Y как требуемый результат. Проблема в том что resNipals это какой-то объект класса "pcaRes" из пакета pcaMethods. Как с ним всё это сделать я в хелпе не нашёл.

Если бы это была PCA модель из пакета caret, то дальше было бы так:

#http://www.win-vector.com/blog/2016/05/pcr_part2_yaware/ (раздел Is this the same as caret::preProcess?)
newVars <- colnames(resNipals)
resNipals$y <- dTrain$y   #"y" в данном случае это название колонки с целевой переменной, dTrain - исходная таблица с данными
modelB <- lm(paste('y',paste(newVars,collapse=' + '),sep=' ~ '),data=resNipals)
print(summary(modelB)$r.squared)
#дальше нужно использовать функцию predict(modelB, newdata = <таблица с валидационной выборкой>) для прогноза на новых данных

 Но с resNipals это не работает, по идее в пакете pcaMethods должны быть какие-то свои функции для работы с этим объектом, но я ничего не нашёл.

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