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

 
Aleksey Vyazmikin #:

Что не так с кодом? На хэлпе в студио он у меня зависает :)


Там же написано даже на скрине "логистическая регрессия" - естественно я смотрел примеры, которые почему то уже на питоне у них

library(abess)
set.seed(1)
n <- 1000

target <- sample(0:1, size = n, replace = T) 

col <- 50000

X <- cbind(matrix(rnorm(n*col), ncol = col, dimnames = list(NULL, paste0("noise",1:col))),
          good_0.2 = target+rnorm(n, sd = 0.2),
          good_0.3 = target+rnorm(n, sd = 0.3),
          good_0.4 = target+rnorm(n, sd = 0.4),
          good_0.5 = target+rnorm(n, sd = 0.5))



ab <- abess(x = X, y = target, tune.path = "gsection", early.stop = TRUE)
ex <- extract(ab) тут исправил
ex$support.vars

вот ето попробуй

бинарная классификация

1000 строк

50 тысяч признаков / колонок

поднабор лучшых признаков нашло меньше чем за 3 секунды


все признаки которые имеют отношение к целевой нашло и ниодной шумовой из 50-ти тысяч

 
 ex$support.vars
[1]  "good_0.2"   "good_0.3"   "good_0.4"   "good_0.5"  
 
Aleksey Vyazmikin #:

1) Что не так с кодом? На хэлпе в студио он у меня зависает :)

2) Там же написано даже на скрине "логистическая регрессия" - естественно я смотрел примеры, которые почему то уже на питоне у них

1) ВСЕ не так, какое нафиг лассо это же регресия , а данные ты всунул для классификации

2) Там написано КЛАССиФИКАЦИЯ : .....  , данные по титанику , целевая бинарная выжил/не выжил

А логистическая регрессия это алгоритм классификации, нпример тексты ею классифицируют
 
 
mytarmailS #:
https://youtu.be/Ipw_2A2T_wg?si=U03oigHFfaFxwjbs

Вот это МО герои

Навеяло..


 
mytarmailS #:

вот ето попробуй

бинарная классификация

Спасибо. Вот теперь работает быстро!

GPT не заменит человека конечно, но вполне хорошо помогает.

mytarmailS #:

50 тысяч признаков / колонок

поднабор лучшых признаков нашло меньше чем за 3 секунды


все признаки которые имеют отношение к целевой нашло и ниодной шумовой из 50-ти тысяч

Такс, нашел он мне значит 6 предикторов из всего списка. Хм, сейчас на них обучу 100 моделей CatBoost и посмотрим средний результат.


mytarmailS #:
А логистическая регрессия это алгоритм классификации, нпример тексты ею классифицируют

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

Вот такой код - сохраняет индексы предикторов для исключения и список предикторов, которые отобрал этот метод

# Установка и загрузка пакета abess
#install.packages("abess")
library(abess)

# Загрузка данных из CSV
data <- read.csv("E:\\FX\\MT5_CB\\MQL5\\Files\\00_Standart_50\\Setup\\train.csv", sep = ";")

# Указание столбца целевой переменной
target_column <- "Target_100"
target <- data[, target_column]

# Исключение столбцов по их именам
столбцы_исключения <- c("Time","Target_P","Target_100","Target_100_Buy","Target_100_Sell")
data_without_excluded <- data[, !names(data) %in% столбцы_исключения]

# Выбор только первых 50 столбцов
#data_without_excluded <- data[, 1:500]

# Применение метода abess
# Здесь вам нужно указать вашу модель и настройки метода abess
# Например:
#model <- abess(y = target, x = data_without_excluded, method = "lasso")
model <- abess(y = target, x = data_without_excluded, tune.path = "gsection", early.stop = TRUE)

# Копирование результатов модели - разные показатели
ex <- extract(model)

# Получение имен отобранных предикторов (столбцов)
Pred <- ex$support.vars

# Сохранение информации в CSV файл
write.csv(Pred, "E:\\FX\\MT5_CB\\MQL5\\Files\\00_Standart_50\\Setup\\Pred.csv", row.names = FALSE)

# Получение индексов всех предикторов в наборе данных
все_предикторы <- colnames(data_without_excluded)
индексы_всех_предикторов <- seq_along(все_предикторы)

# Получение индексов предикторов, которые не входят в список для исключения
индексы_оставшихся_предикторов <- setdiff(индексы_всех_предикторов, match(Pred, все_предикторы))

# Уменьшение индексов на 1
индексы_оставшихся_предикторов <- индексы_оставшихся_предикторов - 1

# Сохранение индексов в CSV файл
write.csv(индексы_оставшихся_предикторов, "E:\\FX\\MT5_CB\\MQL5\\Files\\00_Standart_50\\Setup\\Оставшиеся_предикторы.csv", row.names = FALSE)
 

Итак сравниваем - обучено 100 моделей CB - первый картинка будет с применением метода abess, а вторая без, результат на выборке train 


Выборка test - по ней останавливаем обучение.

Выборка exam - отложенная выборка, не участвующая в процессе обучения


Кажется, что метод abess отбора не очень то эффективно работает...

Замечу, что у меня очень не сбалансированные классы, единиц порядка 16% всего - может это влияет на отбор.

 
Aleksey Vyazmikin #:

Кажется, что метод abess отбора не очень то эффективно работает...

Замечу, что у меня очень не сбалансированные классы, единиц порядка 16% всего - может это влияет на отбор.

У меня есть 5 вариантов

1. Что то намучено с сохраненим данных. К коду есть БОЛЬШИЕ  вопросы, он максимально странный и мне не понятный, это опять gpt?? 

2. Возможно нужна нормализация данных

3. Возможно в самих данных что то не так

4. Возможно дисбананс

5. Возможно действительно хуже работает 
 
mytarmailS #:
У меня есть 5 вариантов

1. Что то намучено с сохраненим данных. К коду есть БОЛЬШИЕ  вопросы, он максимально странный и мне не понятный, это опять gpt?? 

2. Возможно нужна нормализация данных

3. Возможно в самих данных что то не так

4. Возможно дисбананс

5. Возможно действительно хуже работает 

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

2. Возможно нужна для этого метода. Попробую сделать.

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

4. Так я об этом и пишу. Может надо как то в параметрах задать автобалансироку?

5. Пока получается так. Может со стационарными данными было бы нормально.

 
Aleksey Vyazmikin #:

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

2. Возможно нужна для этого метода. Попробую сделать.

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

4. Так я об этом и пишу. Может надо как то в параметрах задать автобалансироку?

5. Пока получается так. Может со стационарными данными было бы нормально.

Получение индексов предикторов, которые не входят в список для исключения
индексы_оставшихся_предикторов <- setdiff(индексы_всех_предикторов, match(Pred, все_предикторы))

# Уменьшение индексов на 1
индексы_оставшихся_предикторов <- индексы_оставшихся_предикторов - 1
Вот это вот мне не понятно вообще. 



Нормализировать легко,  просто к данным прменить scale(данные)  перед всеми процедурами.  Это нормализирует матрицу по столбцам
 
mytarmailS #:
Вот это вот мне не понятно вообще. 

Для CatBoost нужно подать список предикторов, которые подлежат исключению, т.е. те, что не выбраны. Уменьшение значения на -1 нужно так как индекс в том же CatBoost считается от нудя, как и во многих других языках.

mytarmailS #:
Нормализировать легко,  просто к данным прменить scale(данные)  перед всеми процедурами.  Это нормализирует матрицу по столбцам
# Нормализация выбранных предикторов
normalized_data <- scale(data_without_excluded)
data_without_excluded  <- normalized_data

Так допустимо?

В общем результат идентичный, что и без нормализации.

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