Алгоритмы полунаправленного обучения

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы изучим концепцию полунаправленного обучения, которое представляет собой тип машинного обучения, при котором часть обучающих данных имеет метки, а часть — нет. Алгоритмы полунаправленного обучения могут использовать неотмеченные данные для улучшения производительности модели и более эффективной генерализации на новые образцы. Это особенно полезно, когда у нас есть небольшое количество помеченных данных, но большое количество неотмеченных.

В этом практическом занятии мы сосредоточимся на двух алгоритмах полунаправленного обучения: самообучении и распространении меток. Мы научимся реализовывать и использовать эти алгоритмы с помощью scikit-learn, популярной библиотеки машинного обучения для Python.

Советы по использованию ВМ

После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Ноутбук, чтобы приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

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

Установка scikit-learn

Прежде чем мы начнем, убедимся, что scikit-learn установлен. Если его нет, вы можете установить его с помощью следующей команды:

pip install -U scikit-learn

Самообучение

Обзор алгоритма Самообучения

Алгоритм Самообучения основан на алгоритме Яровского. Он позволяет превратить классификатор с учителем в полунаправленный классификатор, обучаясь на неотмеченных данных. Алгоритм работает путем итеративного обучения классификатора с учителем на помеченных и неотмеченных данных, а затем используя предсказания для неотмеченных данных, чтобы добавить подмножество этих образцов в помеченные данные. Алгоритм продолжает итерации, пока не все образцы будут иметь метки или в итерации не будут выбраны новые образцы.

Использование Самообучения в scikit-learn

В scikit-learn алгоритм Самообучения реализован в классе SelfTrainingClassifier. Чтобы использовать этот алгоритм, вам нужно предоставить классификатор с учителем, реализующий метод predict_proba. Вот пример использования алгоритма Самообучения:

from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.linear_model import LogisticRegression

## Создаем классификатор логистической регрессии
classifier = LogisticRegression()

## Создаем самоклассифицирующийся классификатор с классификатором логистической регрессии в качестве базового классификатора
self_training_classifier = SelfTrainingClassifier(classifier)

## Обучаем самоклассифицирующийся классификатор на помеченных и неотмеченных данных
self_training_classifier.fit(X_labeled, y_labeled, X_unlabeled)

## Предсказываем метки для новых образцов
y_pred = self_training_classifier.predict(X_test)

В приведенном выше примере X_labeled и y_labeled - это помеченные данные, X_unlabeled - неотмеченные данные, а X_test - новые образцы, для которых нужно сделать предсказание.

Распространение меток

Обзор алгоритма Распространения меток

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

Использование Распространения меток в scikit-learn

В scikit-learn доступны два модели распространения меток: LabelPropagation и LabelSpreading. обе модели строят граф сходства и распространяют метки. Вот пример использования Распространения меток:

from sklearn.semi_supervised import LabelPropagation

## Создаем модель распространения меток
label_propagation = LabelPropagation()

## Обучаем модель распространения меток на помеченных данных
label_propagation.fit(X_labeled, y_labeled)

## Предсказываем метки для новых образцов
y_pred = label_propagation.predict(X_test)

В приведенном выше примере X_labeled и y_labeled - это помеченные данные, а X_test - новые образцы, для которых нужно сделать предсказание.

Резюме

Полунаправленное обучение - это мощный метод, который позволяет использовать неотмеченные данные для улучшения производительности наших моделей. В этом практическом занятии мы изучили два алгоритма полунаправленного обучения: Самообучение и Распространение меток. Мы также узнали, как реализовать и использовать эти алгоритмы с помощью scikit-learn. Внедрив неотмеченные данные в наши процессы машинного обучения, мы можем лучше использовать доступные данные и получить более точные прогнозы.