Полусupervised обучение с использованием алгоритма распространения меток (Label Spreading)

Machine LearningMachine LearningBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии показано, как выполнять полусupervised обучение с использованием алгоритма распространения меток (Label Spreading). Мы будем использовать подмножество набора данных рукописных цифр, и только 40 из этих образцов будут помечены. Затем мы используем алгоритм распространения меток (Label Spreading), чтобы предсказать оставшиеся 300 образцов.

Советы по виртуальной машине

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49185{{"Полусupervised обучение с использованием алгоритма распространения меток (Label Spreading)"}} end

Загрузка и перемешивание данных

Сначала мы загружаем набор данных с цифрами и случайным образом перемешиваем данные.

digits = datasets.load_digits()
rng = np.random.RandomState(2)
indices = np.arange(len(digits.data))
rng.shuffle(indices)

Подготовка данных для полусupervised обучения

Мы выбираем 340 образцов, и только 40 из этих образцов имеют известные метки. Мы сохраняем индексы оставшихся 300 образцов, для которых мы не должны знать их метки. Затем мы изменяем метки таким образом, чтобы неразмеченные образцы были помечены как -1.

X = digits.data[indices[:340]]
y = digits.target[indices[:340]]

n_total_samples = len(y)
n_labeled_points = 40

indices = np.arange(n_total_samples)

unlabeled_set = indices[n_labeled_points:]

y_train = np.copy(y)
y_train[unlabeled_set] = -1

Обучение модели распространения меток (Label Spreading)

Мы обучаем модель распространения меток (Label Spreading) с параметрами gamma=0.25 и max_iter=20.

lp_model = LabelSpreading(gamma=0.25, max_iter=20)
lp_model.fit(X, y_train)

Оценка производительности модели

Мы оцениваем производительность модели, генерируя отчет о классификации (classification report) и матрицу ошибок (confusion matrix).

predicted_labels = lp_model.transduction_[unlabeled_set]
true_labels = y[unlabeled_set]

print(
    "Label Spreading model: %d labeled & %d unlabeled points (%d total)"
    % (n_labeled_points, n_total_samples - n_labeled_points, n_total_samples)
)

print(classification_report(true_labels, predicted_labels))

ConfusionMatrixDisplay.from_predictions(
    true_labels, predicted_labels, labels=lp_model.classes_
)

Визуализация наиболее неопределенных предсказаний

Мы выбираем и отображаем 10 наиболее неопределенных предсказаний.

pred_entropies = stats.distributions.entropy(lp_model.label_distributions_.T)

uncertainty_index = np.argsort(pred_entropies)[-10:]

f = plt.figure(figsize=(7, 5))
for index, image_index in enumerate(uncertainty_index):
    image = images[image_index]

    sub = f.add_subplot(2, 5, index + 1)
    sub.imshow(image, cmap=plt.cm.gray_r)
    plt.xticks([])
    plt.yticks([])
    sub.set_title(
        "predict: %i\ntrue: %i" % (lp_model.transduction_[image_index], y[image_index])
    )

f.suptitle("Learning with small amount of labeled data")
plt.show()

Резюме

В этом практическом занятии (lab) мы показали, как выполнять полусupervised обучение с использованием алгоритма распространения меток (Label Spreading). Мы обучили модель на небольшом объеме размеченных данных и использовали ее для предсказания меток оставшихся образцов. Модель показала хорошие результаты и правильно предсказала метки большинства образцов.