Как использовать перекрестную валидацию для Multioutput Regressor в Sci-kit? - PullRequest
0 голосов
/ 10 декабря 2018

сначала мои настройки: X - моя таблица характеристик.Он имеет 150 000 функций и 96 образцов.Итак, 150 000 столбцов и 96 строк.

y - моя целевая таблица.Он имеет 4 этикетки и, конечно, 96 образцов.Таким образом, 4x96 (столбцы x строки).

После разбиения на данные обучения и тестирования я использую MLPRegressor.Основываясь на документации Sci-kit, это родной многоканальный регрессор.Таким образом, я могу использовать его, чтобы предсказать мои четыре желаемых выходных значения с новой выборкой из 150 000 функций.Мой код:

mlp = MLPRegressor(hidden_layer_sizes=(2000, 2000), solver= 'lbfgs', max_iter=100)
mlp.fit(X_train,y_train)

А потом я использую перекрестную проверку.

cross_validation.cross_val_score(mlp, X, y, scoring='r2')

В результате получается список из 3 записей (параметр cv = 3).Я действительно не понимаю, как мои 4 метки представлены этими 3 значениями.Я ожидал что-то в таком формате: записи меток 1: 3, записи меток 2: 3 и то же самое с метками 3 и 4. Поэтому я получаю R ^ 2-значение для всех моих меток три раза для разных разбиенийданные испытаний и обучения.

Я что-то упустил?Нужно ли использовать Multioutputregressor? (см. Документ здесь)

И Здесь документация о перекрестной проверке.

Спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018

Во-первых, если вы на самом деле используете cross_validation.cross_val_score(), то вам следует заменить его на model_selection.cross_val_score().Модуль cross_validation устарел и удален из последней версии scikit.

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

Вы использовали оценку 'r2', которая задокументирована здесь .При этом есть возможность изменить результат, если вход является мульти-выходным (как в вашем случае), используя

multi-output : Определяет агрегацию нескольких выходных баллов.Подобное массиву значение определяет веса, используемые для усреднения результатов.По умолчанию используется «iform_average ».

« raw_values ​​»: возвращает полный набор баллов в случае многоканального ввода.

«iform_average»: баллы всех выходов усредняются с равномерным весом.

'variance_weighted': баллы всех выходов усредняются, взвешиваются по дисперсиям каждого отдельного выхода.

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

...