Холл Майкл Л. – Алгоритмы машинного обучения: базовый курс (страница 20)
from sklearn.feature_extraction.text import CountVectorizer
# Загрузка данных
newsgroups = fetch_20newsgroups(subset='all')
X = newsgroups.data
y = newsgroups.target
# Разделение данных на размеченные и неразмеченные
X_train, X_unlabeled, y_train, _ = train_test_split(X, y, test_size=0.9, random_state=42)
# Преобразование текста в числовые признаки
vectorizer = CountVectorizer(stop_words='english')
X_train_vec = vectorizer.fit_transform(X_train)
X_unlabeled_vec = vectorizer.transform(X_unlabeled)
# Инициализация модели
model = MultinomialNB()
# Обучение модели на размеченных данных
model.fit(X_train_vec, y_train)
# Прогнозирование для неразмеченных данных
pseudo_labels = model.predict(X_unlabeled_vec)
# Добавление неразмеченных данных с прогнозированными метками в обучающий набор
X_train_combined = np.vstack([X_train_vec.toarray(), X_unlabeled_vec.toarray()])
y_train_combined = np.hstack([y_train, pseudo_labels])
# Дополнительное обучение модели с расширенным набором данных
model.fit(X_train_combined, y_train_combined)
# Оценка качества
accuracy = model.score(X_train_combined, y_train_combined)
print(f'Accuracy: {accuracy:.4f}')
```
Объяснение кода:
1. Загрузка данных: Мы используем набор данных 20 Newsgroups, который содержит текстовые данные, относящиеся к различным новостным группам.
2. Разделение на размеченные и неразмеченные данные: Мы разделяем данные на размеченные (10%) и неразмеченные (90%) данные.
3. Прогнозирование меток для неразмеченных данных: Сначала мы обучаем модель на размеченных данных и используем её для предсказания меток для неразмеченных данных (псевдонаметки).
4. Перенос обучения на расширенный набор: Модель дообучается, используя данные с псевдонаметками, что помогает улучшить её обобщающие способности.
Полусупервизорное обучение представляет собой инструмент, который позволяет эффективно использовать как размеченные, так и неразмеченные данные, что особенно полезно в условиях ограниченности размеченных данных. Существуют различные подходы к полусупервизорному обучению, включая методы графов, самонаблюдения и генеративные модели, которые могут применяться в разных областях, таких как обработка текстов, изображений и биологических данных.
Глава 7. Линейные модели
– Линейная и логистическая регрессия
– Регуляризация: Ridge и Lasso
– Проблемы переобучения
Линейные модели занимают центральное место в машинном обучении, поскольку они являются одними из самых простых и интерпретируемых методов анализа данных. Несмотря на свою кажущуюся простоту, эти модели обладают высокой эффективностью и широко применяются в задачах прогнозирования, классификации и анализа взаимосвязей между переменными.
Основной идеей линейных моделей является представление зависимости между входными признаками и целевой переменной в виде линейной комбинации. Это позволяет быстро обучать модели, легко интерпретировать полученные коэффициенты и эффективно решать задачи с большим числом наблюдений. Однако линейные модели подвержены ряду проблем, таких как переобучение и чувствительность к выбросам, что требует применения специальных методов регуляризации и оценки их качества.
В этой главе мы рассмотрим две ключевые линейные модели: линейную регрессию, используемую для предсказания числовых значений, и логистическую регрессию, которая применяется в задачах классификации. Также разберем методы регуляризации, такие как Ridge и Lasso, которые помогают предотвратить переобучение, улучшая обобщающую способность модели. В завершение обсудим основные причины переобучения линейных моделей и способы их устранения, чтобы добиться наилучших результатов при работе с реальными данными.
Линейная регрессия – один из самых простых и интуитивно понятных методов прогнозирования. Её суть заключается в том, что зависимость между входными переменными и выходной переменной представляется в виде линейной функции. Например, если нужно предсказать стоимость квартиры, то учитываются такие факторы, как её площадь, количество комнат и район, а модель пытается найти такие коэффициенты, которые позволят наиболее точно восстановить зависимость между этими параметрами и ценой.
Линейная регрессия обучается на основе имеющихся данных, подбирая такие значения коэффициентов, чтобы разница между реальными и предсказанными значениями была минимальной. После того как модель обучена, её можно использовать для предсказания новых значений на основе аналогичных входных данных. Этот метод особенно полезен, когда зависимость между переменными действительно близка к линейной, однако в реальной жизни данные часто содержат шум, выбросы или нелинейные зависимости, что может затруднить получение точных предсказаний.
В отличие от линейной регрессии, которая применяется для предсказания числовых значений, логистическая регрессия используется для задач классификации, где требуется определить, к какому классу относится объект. Например, если нужно предсказать, купит ли пользователь товар в интернет-магазине, то модель принимает во внимание такие параметры, как частота посещений сайта, средний чек предыдущих покупок и время, проведённое на странице товара. Вместо предсказания конкретного числа, как в линейной регрессии, логистическая регрессия выдаёт вероятность того, что объект принадлежит к определённому классу.
Основная особенность логистической регрессии заключается в том, что выходные значения ограничены диапазоном от 0 до 1, что делает этот метод особенно удобным для задач бинарной классификации. Например, в задаче медицинской диагностики модель может предсказывать вероятность наличия заболевания у пациента на основе его симптомов и анализов. Если вероятность выше определённого порога, пациента относят к группе с повышенным риском, если ниже – к здоровой группе.
Хотя логистическая регрессия является инструментом для классификации, она лучше всего работает в случаях, когда классы хорошо разделимы с помощью линейной границы. Если данные имеют сложную структуру или включают сильно пересекающиеся группы, точность модели может снижаться. В таких случаях могут потребоваться более сложные методы, такие как нейросети или градиентный бустинг, но логистическая регрессия остаётся хорошей отправной точкой, благодаря своей интерпретируемости и эффективности на больших наборах данных.
Линейная и логистическая регрессия – это универсальные инструменты, которые можно применять в самых разных задачах: от предсказания продаж в бизнесе до медицинской диагностики и анализа пользовательского поведения. Их простота, скорость обучения и интерпретируемость делают их важной частью арсенала аналитиков данных и специалистов по машинному обучению.
Разберем два примера: первый – применение линейной регрессии для предсказания стоимости квартиры, второй – использование логистической регрессии для классификации пассажиров «Титаника» на выживших и погибших.
Пример 1: Линейная регрессия для предсказания стоимости квартиры
Допустим, у нас есть данные о квартирах, включая площадь, количество комнат и удаленность от центра города. Наша цель – предсказать стоимость квартиры на основе этих параметров.
Шаг 1: Загрузка данных и подготовка
Сначала установим необходимые библиотеки и загрузим данные.
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error
# Создадим искусственный набор данных
data = {
'Площадь': [30, 45, 50, 60, 75, 90, 110, 150, 200, 250],
'Комнат': [1, 1, 2, 2, 3, 3, 4, 5, 6, 7],
'Удаленность_от_центра': [10, 8, 7, 5, 4, 3, 2, 1, 1, 1],
'Цена': [3.5, 5.0, 6.0, 7.5, 9.0, 11.0, 13.5, 18.0, 24.0, 30.0]
}
df = pd.DataFrame(data)