[Машинное обучение] Важный метод машинного обучения — полуконтролируемое обучение: теория, алгоритм и практика
[Машинное обучение] Важный метод машинного обучения — полуконтролируемое обучение: теория, алгоритм и практика

введение

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

Глава 1. Основные понятия полуконтролируемого обучения
1.1 Что такое полуконтролируемое обучение?

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

1.2 Преимущества полуконтролируемого обучения

Обучение с полуконтролем имеет следующие преимущества перед обучением с учителем:

  • Сократите затраты на маркировку:Используя большое количество безмаркировочныхданные,Может значительно снизить зависимость от помеченных данных.,Тем самым снижаются затраты на маркировку данных.
  • Улучшение производительности модели:Есть этикеткаданныев случае дефицита,Внедряя данные без тегов,Это может улучшить способность к обобщению и точность прогнозирования модели.
  • Лучше используйте данные:Используйте существующие возможности без маркировкиданные,Избегайте отходов,Улучшите общую производительность модели.
Глава 2. Основной алгоритм полуконтролируемого обучения
2.1 Самообучение

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

Язык кода:javascript
копировать
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Загрузка выпусков данных
iris = load_iris()
X, y = iris.data, iris.target

# Разделяются на тегированные данные и нетегированные данные.
X_train, X_unlabeled, y_train, _ = train_test_split(X, y, test_size=0.7, random_state=42)
X_unlabeled, X_test, _, y_test = train_test_split(X_unlabeled, _, test_size=0.5, random_state=42)

# Начальное обучение модели
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# процесс самообучения
for i in range(10):
    y_pred_unlabeled = model.predict(X_unlabeled)
    X_train = np.vstack((X_train, X_unlabeled))
    y_train = np.concatenate((y_train, y_pred_unlabeled))
    model.fit(X_train, y_train)

# Модель оценки
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Точность самообучаемой модели: {accuracy}')
2.2 Совместное обучение

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

Язык кода:javascript
копировать
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

# Определите два классификатора с разных точек зрения
model1 = LogisticRegression(random_state=42)
model2 = DecisionTreeClassifier(random_state=42)

# Начальное обучение модели
model1.fit(X_train, y_train)
model2.fit(X_train, y_train)

# совместный процесс обучения
for i in range(10):
    y_pred_unlabeled1 = model1.predict(X_unlabeled)
    y_pred_unlabeled2 = model2.predict(X_unlabeled)
    
    high_confidence_idx1 = np.where(model1.predict_proba(X_unlabeled).max(axis=1) > 0.9)[0]
    high_confidence_idx2 = np.where(model2.predict_proba(X_unlabeled).max(axis=1) > 0.9)[0]
    
    X_train1 = np.vstack((X_train, X_unlabeled[high_confidence_idx2]))
    y_train1 = np.concatenate((y_train, y_pred_unlabeled2[high_confidence_idx2]))
    
    X_train2 = np.vstack((X_train, X_unlabeled[high_confidence_idx1]))
    y_train2 = np.concatenate((y_train, y_pred_unlabeled1[high_confidence_idx1]))
    
    model1.fit(X_train1, y_train1)
    model2.fit(X_train2, y_train2)

# Модель оценки
y_pred1 = model1.predict(X_test)
y_pred2 = model2.predict(X_test)
accuracy1 = accuracy_score(y_test, y_pred1)
accuracy2 = accuracy_score(y_test, y_pred2)
print(f'Точность модели 1 совместного обучения: {accuracy1}')
print(f'Точность модели 2 совместного обучения: {accuracy2}')
2.3 Обучение с полуконтролем на основе графов

Полуконтролируемое обучение графов обеспечивает маркировку немаркированных данных путем построения структуры графа, обработки точек данных как узлов в графе и использования сходства между узлами для распространения информации о метках. Методы полуконтролируемого обучения графов включают распространение меток (распространение меток) и регуляризацию графа (регуляризация графа).

Язык кода:javascript
копировать
from sklearn.semi_supervised import LabelPropagation

# Сборка с данными тегов и без данных тегов
X_labeled, X_unlabeled, y_labeled, y_unlabeled = train_test_split(X, y, test_size=0.7, random_state=42)
y_unlabeled[:] = -1  # Установите для тегов без данных тега значение -1.

# Объединение тегированных и нетегированных данных
X_combined = np.vstack((X_labeled, X_unlabeled))
y_combined = np.concatenate((y_labeled, y_unlabeled))

# Модель распространения меток поездов
label_propagation = LabelPropagation()
label_propagation.fit(X_combined, y_combined)

# Прогноз и модель оценки
y_pred = label_propagation.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f' точность модели распространения меток: {accuracy}')
Глава 3. Примеры применения полуконтролируемого обучения
3.1 Классификация изображений

В задачах классификации изображений методы полуконтролируемого обучения могут значительно повысить точность классификации за счет объединения помеченных и немаркированных данных изображения. Ниже приведен пример классификации изображений с использованием самообучения на наборе данных MNIST.

Язык кода:javascript
копировать
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

# Загрузка выпусков данных
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# Разделяются на тегированные данные и нетегированные данные.
x_labeled, x_unlabeled = x_train[:1000], x_train[1000:]
y_labeled = y_train[:1000]

# Определить модель
model = Sequential([
    Flatten(input_shape=(28, 28)),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Начальное обучение модели
model.fit(x_labeled, y_labeled, epochs=10, validation_data=(x_test, y_test), verbose=2)

# процесс самообучения
for i in range(10):
    y_pred_unlabeled = np.argmax(model.predict(x_unlabeled), axis=1)
    x_labeled = np.vstack((x_labeled, x_unlabeled))
    y_labeled = np.concatenate((y_labeled, y_pred_unlabeled))
    model.fit(x_labeled, y_labeled, epochs=10, validation_data=(x_test, y_test), verbose=2)

# Модель оценки
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f'Точность самообучаемой модели: {test_acc}')
3.2 Классификация текста

В задачах классификации текста методы полуконтролируемого обучения могут улучшить результаты классификации за счет объединения помеченных и неразмеченных текстовых данных. Ниже приведен пример классификации текста с использованием совместного обучения на наборе данных анализа настроений IMDB.

Язык кода:javascript
копировать
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Embedding, LSTM, Dense, Bidirectional
from tensorflow.keras.models import Sequential

# Загрузка выпусков данных
(x_train, y_train), (x_test,y_test) =

 tf.keras.datasets.imdb.load_data(num_words=10000);

# данныепредварительная обработка
макслен = 100
x_train = Pad_sequences ( x_train, maxlen=maxlen)
x_test = pad_sequences(x_test, maxlen=maxlen)

# Разделяются на тегированные данные и нетегированные данные.
x_labeled, x_unlabeled = x_train[:1000], x_train[1000:]
y_labeled = y_train[:1000]

# Определить модель LSTM
def create_lstm_model():
    model = Sequential([
        Embedding(10000, 128, input_length=maxlen),
        Bidirectional(LSTM(64)),
        Dense(1, activation='sigmoid')
    ])
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    return model

# Обучите две модели LSTM
model1 = create_lstm_model()
model2 = create_lstm_model()
model1.fit(x_labeled, y_labeled, epochs=5, validation_data=(x_test, y_test), verbose=2)
model2.fit(x_labeled, y_labeled, epochs=5, validation_data=(x_test, y_test), verbose=2)

# совместный процесс обучения
for i in range(5):
    y_pred_unlabeled1 = (model1.predict(x_unlabeled) > 0.5).astype(int)
    y_pred_unlabeled2 = (model2.predict(x_unlabeled) > 0.5).astype(int)
    
    high_confidence_idx1 = np.where(np.abs(model1.predict(x_unlabeled) - 0.5) > 0.4)[0]
    high_confidence_idx2 = np.where(np.abs(model2.predict(x_unlabeled) - 0.5) > 0.4)[0]
    
    x_train1 = np.vstack((x_labeled, x_unlabeled[high_confidence_idx2]))
    y_train1 = np.concatenate((y_labeled, y_pred_unlabeled2[high_confidence_idx2]))
    
    x_train2 = np.vstack((x_labeled, x_unlabeled[high_confidence_idx1]))
    y_train2 = np.concatenate((y_labeled, y_pred_unlabeled1[high_confidence_idx1]))
    
    model1.fit(x_train1, y_train1, epochs=5, validation_data=(x_test, y_test), verbose=2)
    model2.fit(x_train2, y_train2, epochs=5, validation_data=(x_test, y_test), verbose=2)

# Модель оценки
test_loss1, test_acc1 = model1.evaluate(x_test, y_test, verbose=2)
test_loss2, test_acc2 = model2.evaluate(x_test, y_test, verbose=2)
print(f'Точность модели 1 совместного обучения: {test_acc1}')
print(f'Точность модели 2 совместного обучения: {test_acc2}')
Глава 4. Будущее развитие и проблемы полуконтролируемого обучения
4.1 Качество этикетки и надежность модели

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

4.2 Многоперспективное и мультимодальное обучение

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

4.3 Стратегия маркировки и активное обучение

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

в заключение

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose