Введение
В этом практическом занятии мы изучим концепцию полунаправленного обучения, которое представляет собой тип машинного обучения, при котором часть обучающих данных имеет метки, а часть — нет. Алгоритмы полунаправленного обучения могут использовать неотмеченные данные для улучшения производительности модели и более эффективной генерализации на новые образцы. Это особенно полезно, когда у нас есть небольшое количество помеченных данных, но большое количество неотмеченных.
В этом практическом занятии мы сосредоточимся на двух алгоритмах полунаправленного обучения: самообучении и распространении меток. Мы научимся реализовывать и использовать эти алгоритмы с помощью 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. Внедрив неотмеченные данные в наши процессы машинного обучения, мы можем лучше использовать доступные данные и получить более точные прогнозы.