aimclub / FEDOT

Automated modeling and machine learning framework FEDOT
https://fedot.readthedocs.io
BSD 3-Clause "New" or "Revised" License
627 stars 86 forks source link

При решении задачи Classification результаты принимают вещественные значения. #234

Closed MAGLeb closed 3 years ago

MAGLeb commented 3 years ago

Решая задачу классификации, результат предсказания не целые числа.

task = 'classification'
composer_params = {
    'max_depth': 2,
    'max_arity': 2,
    'learning_time': 0.1 
}

model = Fedot(ml_task=task,
              composer_params=composer_params)
chain = model.fit(features=np.array(features_train),
                        target=np.array(target_train))
prediction = model.predict(features=np.array(features_valid))

array([9.2810631e-01, 2.1132191e-03, 3.3170132e-03, 9.9691188e-01,
       9.9891078e-01, 9.9755633e-01, 9.9896133e-01, 4.2323591e-04,
       9.9714440e-01, 9.9877244e-01], dtype=float32)

Также хочется обратить внимание на большой LOG при подборе композиций из моделей:

Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: Invalid chain configuration: Chain has incorrect models positions. Continue.
Error in chain assessment during composition: Invalid chain configuration: Chain has incorrect models positions. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Best metric is -0.9916806666666667
Generation num: 0
max_depth: 2, no improvements: 0
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
Error in chain assessment during composition: This MLPClassifier estimator requires y to be passed, but the target y is None.. Continue.
spent time: 0.3 min
Best metric is -0.9916806666666667
Composition time: 0.267 min
Algorithm was terminated due to processing time limit
GP composition finished
Fit chain from scratch

Мне кажется некоторые строки не дожны выводиться. Тем более я не ставил параметр verbose. Возможно стоит вынести в отдельный issues

nicl-nno commented 3 years ago

Решая задачу классификации, результат предсказания не целые числа.

Это вероятности класса 1. Если нужны метки классов на выходе, то нужно указать output_mode='labels'.

nicl-nno commented 3 years ago

Также хочется обратить внимание на большой LOG при подборе композиций из моделей:

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

MAGLeb commented 3 years ago

Решая задачу классификации, результат предсказания не целые числа.

Это вероятности класса 1. Если нужны метки классов на выходе, то нужно указать output_mode='labels'.

В interface API вроде бы нет такого параметра.

nicl-nno commented 3 years ago

Для API наверное стоит реализовать классические методы predict - для меток/predict_proba - для вероятностей. Чтобы sklearn-пользователям было привычнее. А внутри уже chain.predict с нужным параметром.

MAGLeb commented 3 years ago

Также хочется обратить внимание на большой LOG при подборе композиций из моделей:

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

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

nicl-nno commented 3 years ago

Да, наверное по умолчанию лучше скрывать, пока не включен verbose.

MAGLeb commented 3 years ago

Подведу итог: