Обсуждение статьи "Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов" - страница 13

 
Maxim Dmitrievsky #:
Там x[0] - это вероятности для нулевого класса, модель же выдает вероятности для двух классов. То есть если вероятность нулевого класса меньше 0.5, значит класс первый предсказывается. То есть True == 1 и наоборот. Поэтому ошибки нет.

Хм, чего то про такое не слышал вероятность там  может  быть от 0 до 1, больше 0,5 - "1", иначе "0" по умолчанию в бинарной классификации. Хотя переводчик переводит странно:
"

  • Один объект — одномерный numpy.ndarray с вероятностями для каждого класса.

"

Но, как тогда получить вероятность для класса "1"? Всё же не может быть в одномерном массиве отдельно вероятности для каждого класса, или я чего то не понимаю...

 
Maxim Dmitrievsky #:
Может в вашем датасете метки перевернутые

"1" - правильная сделка/прибыльная/хорошая. А надо иначе?

 
Aleksey Vyazmikin #:

"1" - правильная сделка/прибыльная/хорошая. А надо иначе?

Нет, я про бай и селлы в вашем датасете, что есть ноль и что есть 1. Покупка или продажа.
 
Aleksey Vyazmikin #:

Хм, чего то про такое не слышал вероятность там  может  быть от 0 до 1, больше 0,5 - "1", иначе "0" по умолчанию в бинарной классификации. Хотя переводчик переводит странно:
"

  • Один объект — одномерный numpy.ndarray с вероятностями для каждого класса.

"

Но, как тогда получить вероятность для класса "1"? Всё же не может быть в одномерном массиве отдельно вероятности для каждого класса, или я чего то не понимаю...

Если вероятность для класса 0 < 0.5, то значит предсказывается класс 1. Тот код просто переводит вероятности обратно в метки классов для тестера. Там все норм.
 
Maxim Dmitrievsky #:
Нет, я про бай и селлы в вашем датасете, что есть ноль и что есть 1. Покупка или продажа.

Там разметка по финансовому результату уже. В столбец close я поместил исход от сделки. Т.е. для обучения не важно - покупка или продажа.

Maxim Dmitrievsky #:
Если вероятность для класса 0 < 0.5, то значит предсказывается класс 1. Тот код просто переводит вероятности обратно в метки классов для тестера. Там все норм.

Я не хочу показаться навязчивым, но всё же, три варианта:
1. Я всё время делал не правильно, полагая, что оценивается вероятность именно класса "1" в CatBoost.
2. Я не понимаю Ваш код.
3. Вы ошибаетесь, полагая, что вероятность меньше 0,5 надо классифицировать как "1".

 
Aleksey Vyazmikin #:

Там разметка по финансовому результату уже. В столбец close я поместил исход от сделки. Т.е. для обучения не важно - покупка или продажа.

Я не хочу показаться навязчивым, но всё же, три варианта:
1. Я всё время делал не правильно, полагая, что оценивается вероятность именно класса "1" в CatBoost.
2. Я не понимаю Ваш код.
3. Вы ошибаетесь, полагая, что вероятность меньше 0,5 надо классифицировать как "1".

Ничего не понял, в столбце Close должны быть цены закрытия.

Общая вероятность всегда равна единице. Если вероятность одного из классов меньше 0.5, значит предсказывается другой класс.

 
Maxim Dmitrievsky #:

Ничего не понял, в столбце Close должны быть цены закрытия.

Посмотрите код, что я приложил. Там может быть понятней. У меня классификация не на каждом баре происходит.

Maxim Dmitrievsky #:

Общая вероятность всегда равна единице. Если вероятность одного из классов меньше 0.5, значит предсказывается другой класс.

В коде при вероятности 0,4 получаете класс "1". Почему?

 
Aleksey Vyazmikin #:

Посмотрите код, что я приложил. Там может быть понятней. У меня классификация не на каждом баре происходит.

В коде при вероятности 0,4 получаете класс "1". Почему?

Можно зазипованный датасет? у меня нет рара

потому что вероятность 1-го класса 0.6

В целом, тот алгоритм должен принимать данные именно так, как там сделано.
 
Maxim Dmitrievsky #:

Можно зазипованный датасет? у меня нет рара

Можно - загружу. Хотя для мака и есть поддержка через командную строку...

Maxim Dmitrievsky #:
потому что вероятность 1-го класса 0.6
predict_proba p
[[0.74864123 0.25135877]
 [0.81097595 0.18902405]
 [0.81477042 0.18522958]
 ...
 [0.83347862 0.16652138]
 [0.84273186 0.15726814]
 [0.84617344 0.15382656]]

Пока не принтанул - не мог понять - в консольной версии в этом плане есть отличие.

Тогда получается всё логично, и я закомментировал у себя код переворота, оставив логику разметки

#//-------Восстанавливаю перевернутые ранее метки 
            #if pred_meta>0.5:pred_meta=0
            #else :pred_meta=1
            #if pred>0.5:pred=0
            #else :pred=1

#//-------Делаем переразметку и считаем баланс
            if pred_meta==1:#Мета модель детектировала примеры как класс "1"
                if pred < 0.5 and Target_100<0.0:
                    meta_labels[i] = 1 
                if pred < 0.5 and Target_100>0.0:
                    meta_labels[i] = 0 
                if pred >= 0.5 and Target_100>0.0:
                    meta_labels[i] = 1
                    report.append(report[-1]+Target_100)
                if pred >= 0.5 and Target_100<0.0:
                    meta_labels[i] = 0
                    report.append(report[-1]+Target_100)
            if pred_meta==0:#Мета модель детектировала примеры как класс "0"
                if pred < 0.5 and Target_100<0.0:
                    meta_labels[i] = 1 
                if pred < 0.5 and Target_100>0.0:
                    meta_labels[i] = 0 
                if pred >= 0.5 and Target_100>0.0:
                    meta_labels[i] = 1                    
                if pred >= 0.5 and Target_100<0.0:
                    meta_labels[i] = 0
 
Maxim Dmitrievsky #:
Можно зазипованный датасет?

Ссылка

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