Машинное обучение стало неотъемлемой частью современной разработки, и понимание основных методов помогает решать широкий спектр задач. В этой статье мы рассмотрим пять популярных алгоритмов, которые часто встречаются на собеседованиях, с примерами на Python и разбором, что происходит в каждой строке кода.
Погнали!
1. Метод ближайшего соседа (K-Nearest Neighbors, KNN)
Метод ближайшего соседа — это один из самых простых и популярных алгоритмов классификации. Он работает по принципу: объекты классифицируются на основе того, к каким классам принадлежат их ближайшие соседи.
Пример для новичков: KNN для классификации
Для начала, давайте рассмотрим пример с использованием Scikit-learn. Мы будем использовать набор данных о цветах ирисов (известный Iris dataset), чтобы классифицировать цветы на три вида (setosa, versicolor, virginica).
from sklearn.datasets import load_iris # Импортируем набор данных ирисов
from sklearn.model_selection import train_test_split # Для разделения данных на обучающую и тестовую выборки
from sklearn.neighbors import KNeighborsClassifier # Импортируем классификатор KNN
from sklearn.metrics import accuracy_score # Для оценки точности
# Загружаем данные
data = load_iris()
X = data.data # Признаки (например, длина и ширина лепестков)
y = data.target # Целевая переменная (классы: 0, 1, 2)
# Разделяем данные на обучающую и тестовую выборки (80% на обучение, 20% на тестирование)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Создаем модель KNN с 3 ближайшими соседями
knn = KNeighborsClassifier(n_neighbors=3)
# Обучаем модель на обучающих данных
knn.fit(X_train, y_train)
# Делаем прогнозы на тестовых данных
y_pred = knn.predict(X_test)
# Оцениваем точность модели
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
Что происходит в коде:
- Мы загружаем набор данных ирисов с помощью load_iris(), где X — это признаки (характеристики цветов), а y — целевая переменная (виды цветов).
- Данные разделены на обучающую и тестовую выборки с помощью train_test_split().
- Создаем модель KNN с параметром n_neighbors=3, что означает, что для классификации будем учитывать 3 ближайших соседа.
- Обучаем модель на обучающих данных с помощью метода fit().
- Прогнозируем классы на тестовых данных с помощью predict() и оцениваем точность модели с помощью accuracy_score().
2. Логистическая регрессия (Logistic Regression)
Логистическая регрессия используется для задач бинарной и многоклассовой классификации. Несмотря на название, это не регрессия в привычном смысле, а метод классификации, который использует логистическую функцию для прогнозирования вероятности принадлежности объекта к одному из классов.
Пример для новичков: Логистическая регрессия для классификации
Давайте применим логистическую регрессию на тех же данных, что и в примере выше.
from sklearn.linear_model import LogisticRegression # Импортируем классификатор логистической регрессии
# Создаем модель логистической регрессии
log_reg = LogisticRegression(max_iter=200)
# Обучаем модель
log_reg.fit(X_train, y_train)
# Прогнозируем на тестовых данных
y_pred_log_reg = log_reg.predict(X_test)
# Оценка точности
accuracy_log_reg = accuracy_score(y_test, y_pred_log_reg)
print(f'Logistic Regression Accuracy: {accuracy_log_reg:.2f}')
Что происходит в коде:
- Мы создаем объект LogisticRegression() с параметром max_iter=200, чтобы указать максимальное количество итераций для сходимости алгоритма.
- Модель обучается на данных с помощью fit(), а прогнозирование выполняется через predict().
- Точность вычисляется через accuracy_score().
3. Деревья решений (Decision Trees)
Дерево решений — это один из самых интерпретируемых алгоритмов машинного обучения. Оно строит модель в виде дерева, где каждый узел представляет собой решение, а ветви — это результаты.
Пример для новичков: Дерево решений
Теперь давайте попробуем использовать дерево решений для классификации цветов ирисов.
from sklearn.tree import DecisionTreeClassifier # Импортируем дерево решений
# Создаем модель дерева решений
dt = DecisionTreeClassifier(random_state=42)
# Обучаем модель
dt.fit(X_train, y_train)
# Прогнозируем на тестовых данных
y_pred_dt = dt.predict(X_test)
# Оценка точности
accuracy_dt = accuracy_score(y_test, y_pred_dt)
print(f'Decision Tree Accuracy: {accuracy_dt:.2f}')
Что происходит в коде:
- Мы создаем объект DecisionTreeClassifier(), который представляет собой классификатор на основе дерева решений.
- Модель обучается на обучающих данных с помощью fit().
- Прогнозирование выполняется с помощью predict(), и точность вычисляется через accuracy_score().
4. Метод опорных векторов (Support Vector Machine, SVM)
SVM — это мощный классификатор, который ищет гиперплоскость, максимально разделяющую классы данных. Этот метод эффективен в случае, когда данные можно разделить с помощью четкой границы.
Пример для новичков: Метод опорных векторов
Теперь давайте применим метод опорных векторов для классификации.
from sklearn.svm import SVC # Импортируем метод опорных векторов
# Создаем модель SVM
svm = SVC(kernel='linear', random_state=42)
# Обучаем модель
svm.fit(X_train, y_train)
# Прогнозируем на тестовых данных
y_pred_svm = svm.predict(X_test)
# Оценка точности
accuracy_svm = accuracy_score(y_test, y_pred_svm)
print(f'SVM Accuracy: {accuracy_svm:.2f}')
Что происходит в коде:
- Мы создаем объект SVC() с параметром kernel='linear', что означает использование линейного ядра (для простоты).
- Модель обучается на данных с помощью fit(), а прогнозирование выполняется через predict().
- Точность вычисляется с помощью accuracy_score().
5. Наивный байесовский классификатор (Naive Bayes)
Этот классификатор основан на теореме Байеса, где предполагается, что признаки независимы друг от друга. Это быстрый и эффективный метод классификации, особенно для текстовых данных.
Пример для новичков: Наивный байесовский классификатор
Давайте используем наивный байесовский классификатор для работы с нашими данными.
from sklearn.naive_bayes import GaussianNB # Импортируем наивный байесовский классификатор
# Создаем модель наивного байеса
nb = GaussianNB()
# Обучаем модель
nb.fit(X_train, y_train)
# Прогнозируем на тестовых данных
y_pred_nb = nb.predict(X_test)
# Оценка точности
accuracy_nb = accuracy_score(y_test, y_pred_nb)
print(f'Naive Bayes Accuracy: {accuracy_nb:.2f}')
Что происходит в коде:
- Мы создаем объект GaussianNB(), который представляет собой наивный байесовский классификатор для непрерывных признаков (в случае нормального распределения).
- Модель обучается на данных с помощью fit(), а прогнозирование выполняется через predict().
- Точность вычисляется с помощью accuracy_score().
Заключение
Мы рассмотрели пять популярных алгоритмов машинного обучения:
- Метод ближайшего соседа (KNN)
- Логистическая регрессия
- Деревья решений
- Метод опорных векторов (SVM)
- Наивный байесовский классификатор
Каждый из них имеет свои особенности и применяется в различных задачах. Вы можете столкнуться с этими алгоритмами на собеседованиях, так что уверенное владение этими методами поможет вам не только решать задачи, но и показать глубокие знания на интервью.
Запомните: методы машинного обучения — это не магия. Это просто инструменты для извлечения знаний из данных. Чем больше вы практикуетесь, тем быстрее научитесь видеть закономерности. Удачи на вашем пути в мир машинного обучения!