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
.
Оба работают путем построения графика сходства по всем элементам входного набора данных.
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 создаст гораздо более удобную для памяти разреженную матрицу, которая может значительно сократить время выполнения.
Примеры
Ссылки
[2] Yoshua Bengio, Olivier Delalleau, Nicolas Le Roux. In Semi-Supervised Learning (2006), pp. 193-216
[3] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux. Efficient Non-Parametric Function Induction in Semi-Supervised Learning. AISTAT 2005 https://www.gatsby.ucl.ac.uk/aistats/fullpapers/204.pdf