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

введение

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

Глава 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода