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.