В своем предыдущем сообщении в блоге я обсуждал, как прогнозировать вероятности с помощью одного ярлыка, и ссылку на этот пост можно найти ниже: - https://tracyrenee61.medium.com/predicting-probabilities-with-python-b456334b85c6

В этом посте я намерен осветить сложности, связанные с вероятностями прогнозирования набора данных с несколькими метками, и пройтись на примере из реальной жизни, чтобы показать, как это можно сделать. Я использовал вопрос конкурса DrivenData, Обучение прививке от гриппа: прогнозирование H1N1 и сезонные вакцины против гриппа, и необходимые наборы данных были сохранены в репозитории моей учетной записи github, который находится ниже: - «https://github.com/TracyRenee61/Swine- Грипп"

В формулировке проблемы для этого вопроса о конкурсе говорится: -

«Ваша цель - предсказать, какова вероятность того, что люди получат вакцину против H1N1 и сезонного гриппа. В частности, вы прогнозируете две вероятности: одну для h1n1_vaccine и вторую для season_vaccine.

Каждая строка в наборе данных представляет одного человека, ответившего на Национальное обследование гриппа H1N1 2009 ».

Первым делом я загрузил библиотеки в файл Google Colab, который я создал для этого упражнения:

Я объединил файл ярлыков с файлом поезда. Это слияние сделало метки зависимой переменной или целью: -

Одним быстрым шагом для импутации файла поезда, а затем тестового файла, я заменил все нулевые значения режимом в обоих файлах. Режим представляет собой наиболее часто встречающиеся значения в столбце данных. Замена этих значений во всем фрейме данных устраняет необходимость выполнения вменения столбец за столбцом: -

Я использовал LabelEncoder для преобразования всех столбцов объекта в числовые значения как в обучающем, так и в тестовом файлах: -

Затем я создал цель, которая в данном случае представляет собой несколько меток: -

Я определил переменную y, которая является целью. Затем я определил переменную X, отбросив респондент_id, h1n1_vaccine и Season_vaccine. Наконец, я определил X_test, отбросив респондент_id в тестовом файле.

Затем я использовал train_test_split, чтобы разделить поезд, настроенный для обучения и тестирования. Я установил shuffle на True и расслоил на y, потому что целью является дисбаланс классов, и это даст набор проверки того же формата, что и набор поездов.

Затем я использовал MinMaxScaler, чтобы значения в наборе поездов и тестов попадали в значения 0 и 1, поскольку целевые переменные являются двоичными: -

Я выбрал MultiOutputClassifier для этой модели, потому что целью является несколько меток. Я также выбрал MLPClassifier, версию нейронной сети для sklearn. Когда я подогнал модель к обучающей выборке, я достиг точности 72,99%. Когда я сделал прогноз на этой модели с использованием набора для проверки, я достиг точности 65,48%: -

Я сделал прогнозы на тестовом наборе данных и также получил вероятности. Получение правильных вероятностей из набора данных с несколькими метками может быть сложной задачей, потому что на выходе получается два столбца для каждой метки. Первый столбец каждой метки - это вероятность того, что результат будет 0, а второй столбец - вероятность того, что результат будет 1. Поскольку в этом наборе данных есть две метки, выходные данные вероятностей представляют собой трехмерный массив из четырех столбцов. Всего:-

Я извлек вероятности того, что результатом будет 1 как для первой, так и для второй метки, и создал фрейм данных, df_vaccine, для хранения этой информации в:

Затем я создал фрейм данных, submit, который будет использоваться в качестве основы для моей отправки в DrivenData: -

Когда я отправил свой прогноз вероятностей в DrivenData, я получил 69,20% по метрике оценки AUROC. Я использовал отведенные мне три ежедневных представления, чтобы получить этот балл, но, конечно, можно было бы проделать больше работы, доработав параметры или выбрав более эффективную модель, но это придется подождать до следующего дня, так как я израсходовал свое выделение представлений в этот день: -

Код для этого вопроса конкурса можно полностью найти в репозитории моей учетной записи github, который находится ниже: - https://github.com/TracyRenee61/Swine-Flu/blob/main/Flu_Vaccine_MLPC.ipynb