1.14. Полуконтролируемое обучение

Обучение с полуконтролем - это ситуация, в которой в ваших данных обучения некоторые образцы не помечены. Полуконтролируемые модели в sklearn.semi_supervised могут использовать эти дополнительные немаркированные данные, чтобы лучше фиксировать форму основного распределения данных и лучше обобщать их на новые выборки. Эти алгоритмы могут хорошо работать, когда у нас очень небольшое количество помеченных точек и большое количество немаркированных точек.

Примечание

Алгоритмы с полуконтролируемым обучением должны делать предположения о распределении набора данных, чтобы добиться повышения производительности. Дополнительную информацию см. здесь <https://en.wikipedia.org/wiki/Semi-supervised_learning#Assumptions>`_.

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

Эта реализация самообучения основана на алгоритме Яровского [1]. Используя этот алгоритм, данный контролируемый классификатор может функционировать как полуконтролируемый классификатор, позволяя ему учиться на неразмеченных данных.

SelfTrainingClassifier может быть вызван с любым классификатором, реализующим predict_proba, переданным как параметр base_classifier. На каждой итерации base_classifier прогнозирует метки для немаркированных образцов и добавляет подмножество этих меток в маркированный набор данных.

Выбор этого подмножества определяется критерием выбора. Этот выбор можно сделать с использованием “порога” (threshold) для вероятностей прогнозирования или путем выбора выборок k_best в соответствии с вероятностями прогнозирования.

Метки, использованные для окончательного обучения, а также итерация, в которой был помечен каждый образец, доступны в качестве атрибутов. Необязательный параметр max_iter указывает, сколько раз максимум цикл будет выполняться.

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

При использовании классификатора самообучения важна :ref:`калибровка <calibration>` классификатора.

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

Распространение меток (Label propagation) обозначает несколько вариантов алгоритмов полуконтролируемого вывода графов.

Несколько признаков, доступных в этой модели:

  • Используется для задач классификации.

  • Методы ядра для проецирования данных в пространства альтернативных измерений.

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

../_images/sphx_glr_plot_label_propagation_structure_001.png

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

LabelPropagation и LabelSpreading различаются модификациями матрицы сходства, отображаемой на графике, и эффектом ограничения распределения меток. Фиксация позволяет алгоритму в некоторой степени изменять вес истинных данные, помеченные на месте, в некоторой степени. Алгоритм LabelPropagation выполняет жесткое ограничение входных меток, что означает \(\alpha=0\). Этот коэффициент ограничения можно ослабить, скажем: \(\alpha=0.2\), что означает, что мы всегда будем сохранять 80 процентов нашего исходного распределения меток, но алгоритм сможет изменить свою достоверность распределения в пределах 20 процентов.

LabelPropagation использует необработанную матрицу сходства, построенную на основе данных без каких-либо изменений. Напротив, LabelSpreading минимизирует функцию потерь, имеющую свойства регуляризации, поэтому она часто более устойчива к шуму. Алгоритм повторяет модифицированную версию исходного графа и нормализует веса ребер путем вычисления нормализованной матрицы Лапласа графа. Эта процедура также используется в Спектральная кластеризация.

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

  • rbf (\(\exp(-\gamma |x-y|^2), \gamma > 0\)). \(\gamma\) задается ключевым словом гамма.

  • knn (\(1[x' \in kNN(x)]\)). \(k\) указывается ключевым словом n_neighbors.

Ядро RBF создаст полностью связный граф, который представлен в памяти плотной матрицей. Эта матрица может быть очень большой, и в сочетании со стоимостью выполнения полного вычисления умножения матрицы для каждой итерации алгоритма может привести к непомерно длительному времени работы. С другой стороны, ядро KNN создаст гораздо более удобную для памяти разреженную матрицу, которая может значительно сократить время выполнения.