python
December 18, 2019

Regression vs Classification: в чем разница?

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

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

Давайте начнем наш разговор с обсуждения сходств этих двух методов.

Обучение с учителем

Обе и регрессия и классификация являются задачами машинного обучения с учителем. Обе используют сходную концепцию использования известных наборов данных (обычно называемых training datasets) для прогнозирования.

В обучении с учителем используется алгоритм для изучения функции отображения входной переменной (x) в выходную переменную, то есть y=f(x).

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

На картинке ниже показаны различные классы машинного обучения.

К сожалению на этом сходства задач регрессии и классификации в машинном обучении заканчиваются.

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

Регрессия в машинном обучении

В задачах регрессии алгоритмы машинного обучения пытаются оценить функцию отображения (f) от входных данных (x) до числовых или непрерывных выходных переменных (y).

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

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

Примеры наиболее общих алгоритмов регрессии: линейная регрессия, регрессия в алгоритмах опорных векторов SVR (support vector regression) и регрессионные деревья.

Некоторые алгоритмы, такие как "логистическая регрессия" имеют в своих названиях слово "регрессия", но не являются алгоритмами регрессии.

Вот пример реализации модели линейной регрессии на Python:

import numpy as np
import pandas as pd


# импортируем модель
from sklearn.linear_model import LinearRegression
from sklearn.cross_validation import train_test_split

# импортируем библиотеку для вычисления метрики качества
from sklearn import metrics
data_path = "http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv"

# загружаем модель
data = pd.read_csv(data_path, index_col=0)
array_items = ['TV', 'radio', 'newspaper']

X = data[array_items]
y = data.sales

# разделяем выборку на тренировочную и валидационную
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)

# создаем модель и обучаем ее
linearreg = LinearRegression()
linearreg.fit(X_train, y_train)

# делаем предсказания
y_predict = linearreg.predict(X_test)


# вычисляем RMSE (root-mean-squared-error, среднеквадратичная ошибка)
print(np.sqrt(metrics.mean_squared_error(y_test, y_predict))) 

# Output 1.4046514230328955

Классификация в машинном обучении

С другой стороны, алгоритмы классификации пытаются оценить функцию отображения (f) от входных данных (x) в дискретные или категориальные выходные переменные (y).

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

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

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

Примеры наиболее общих алгоритмов классификации: логистическая регрессия, наивный байесовский алгоритм, решающие деревья и kNN (k ближайших соседей).

Вот пример задачи классификации об яблоках и апельсинах:

from sklearn.tree import DecisionTreeClassifier


# features = [[155, 'rough'], [180, 'rough'], [135, 'smooth'], [110, 'smooth']] входящие данные для классификатора

# которые мы перевели в числовые, потому что с ними работает scikit-learn
features = [[155, 0], [180, 0], [135, 1], [110, 1]]

# labels = ['orange', “orange”, “apple”, “apple”]
labels = [1, 1, 0, 0]

# используем дерево решений в качестве классификатора
classifier = DecisionTreeClassifier()
classifier = classifier.fit(features, labels)

# делаем предсказание
print (classifier.predict([[120, 1]]))

# Output 0 для яблок

Заключение

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

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

P.S. данная статья является переводом с английского другой хорошей статьи, доступной по этой ссылке.

Статья подготовлена и написана для канала Hello World.