Перед тем, как начать, ссылка гласила: Оценка алгоритмов обучения.

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

В общем, все алгоритмы машинного обучения оптимизируют что-то конкретное или минимизируют какую-то ошибку. Традиционно ваш алгоритм машинного обучения может выполнять классификацию (с учителем) или кластеризацию (без учителя) или выполнять регрессию (чтобы изучить функцию или предсказать определенные параметры функции).

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

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

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

Регрессия может включать сравнение абсолютной ошибки с относительной ошибкой (относительно величины) или квадрата ошибки (в отличие от абсолютного значения). Средняя абсолютная ошибка (или MAE) представляет собой сумму абсолютных разностей между прогнозами и фактическими значениями. Это дает представление о том, насколько ошибочными были прогнозы. Мера дает представление о величине ошибки, но не дает представления о направлении (например, завышенное или недостаточное предсказание). Среднеквадратическая ошибка (или MSE) очень похожа на среднюю абсолютную ошибку в том, что она дает общее представление о величине ошибки. Извлечение квадратного корня из среднеквадратичной ошибки преобразует единицы обратно в исходные единицы выходной переменной и может иметь смысл для описания и представления. Это называется среднеквадратичной ошибкой (или RMSE). Метрика R2 (или R Squared) показывает соответствие набора прогнозов фактическим значениям. В статистической литературе эта мера называется коэффициентом детерминации. Это значение от 0 до 1 для not и perfect соответственно.

Мера эффективности классификации

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

Оценка — это оценка, которую мы можем использовать, чтобы говорить о том, насколько хорошо, по нашему мнению, алгоритм может работать на практике. Это не гарантия работоспособности. Как только мы оценим производительность нашего алгоритма, мы можем повторно обучить окончательный алгоритм на всем наборе обучающих данных и подготовить его для оперативного использования. Далее мы рассмотрим четыре различных метода, которые мы можем использовать для разделения нашего набора обучающих данных и создания полезных оценок производительности для наших алгоритмов машинного обучения:

  1. Тренировочные и тестовые наборы
  2. k-кратная перекрестная проверка
  3. Оставьте одно вне перекрестной проверки
  4. Повторяющиеся случайные разделения тестового поезда

Тренировочные и тестовые наборы

Самый простой метод, который мы можем использовать для оценки производительности алгоритма машинного обучения, — это использование различных наборов данных для обучения и тестирования. Мы можем взять исходный набор данных и разделить его на две части. Обучите алгоритм на первой части, сделайте прогнозы на второй части и сравните прогнозы с ожидаемыми результатами. Размер разделения может зависеть от размера и специфики вашего набора данных, хотя обычно 67 % данных используются для обучения, а остальные 33 % — для тестирования.

Этот метод оценки алгоритма очень быстр. Он идеально подходит для больших наборов данных (миллионы записей), где есть убедительные доказательства того, что оба разделения данных представляют основную проблему. Из-за скорости полезно использовать этот подход, когда исследуемый алгоритм медленно обучается. Недостатком этой техники является то, что она может иметь высокую дисперсию. Это означает, что различия в обучающем и тестовом наборах данных могут привести к значительным различиям в оценке точности. В приведенном ниже примере мы разделили набор данных индейцев пима на 67%/33% для обучения, тестирования и оценки точности модели логистической регрессии. Частичный код:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size,random_state=seed)
model = LogisticRegression()
model.fit(X_train, Y_train)
result = model.score(X_test, Y_test)

K-кратная перекрестная проверка

Перекрестная проверка — это подход, который можно использовать для оценки производительности алгоритма машинного обучения с меньшей дисперсией, чем при разделении одного набора обучающих тестов. Он работает путем разделения набора данных на k частей (например, k = 5 или k = 10). Каждое разделение данных называется кратностью. Алгоритм обучается на k › 1 сгибе с одним задержанным и тестируется на задержанном сгибе. Это повторяется, так что каждая складка набора данных может быть задержанным тестовым набором. После выполнения перекрестной проверки вы получите k различных оценок производительности, которые можно суммировать, используя среднее значение и стандартное отклонение.

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

Выбор k должен позволять размеру каждого тестового раздела быть достаточно большим, чтобы быть разумной выборкой проблемы, и в то же время позволять достаточное количество повторений оценки алгоритма в режиме обучения и тестирования, чтобы обеспечить достоверную оценку производительности алгоритма на невидимых данных. . Для наборов данных небольшого размера, состоящих из тысяч или десятков тысяч записей, обычно используются значения k, равные 3, 5 и 10. В приведенном ниже примере мы используем 10-кратную перекрестную проверку.

num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds, random_state=seed)
model = LogisticRegression()
results = cross_val_score(model, X, Y, cv=kfold)

Оставьте одно вне перекрестной проверки

Вы можете настроить перекрестную проверку так, чтобы размер сгиба был равен 1 (k равно количеству наблюдений в вашем наборе данных). Этот вариант перекрестной проверки называется перекрестной проверкой с исключением одного. Результатом является большое количество показателей производительности, которые можно обобщить, чтобы дать более разумную оценку точности вашей модели на невидимых данных. Недостатком является то, что это может быть более затратная в вычислительном отношении процедура, чем k-кратная перекрестная проверка. В приведенном ниже примере мы используем перекрестную проверку с исключением одного.

from sklearn.model_selection import LeaveOneOut
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
leaveoneout = LeaveOneOut()
model = LogisticRegression()
results = cross_val_score(model, X, Y, cv= leaveoneout)

Повторяющиеся случайные разделения тестового поезда

Другой вариант перекрестной проверки в k-кратном порядке заключается в создании случайного разделения данных, подобно описанному выше разделению обучения/тестирования, но многократном повторении процесса разделения и оценки алгоритма, как при перекрестной проверке. Это обеспечивает скорость использования разделения обучения/тестирования и уменьшение дисперсии предполагаемой производительности k-кратной перекрестной проверки. Вы также можете повторить процесс еще много раз, если это необходимо для повышения точности. Обратной стороной является то, что повторения могут включать в себя большую часть одних и тех же данных в поезде или тесте, разделенном от запуска к запуску, что приводит к избыточности в оценке. В приведенном ниже примере данные разбиваются на 67%/33% поезд/тест, и процесс повторяется 10 раз.

kfold = ShuffleSplit(n_splits=n_splits, test_size=test_size, random_state=seed)
model = LogisticRegression()
results = cross_val_score(model, X, Y, cv=kfold)

Какие методы использовать, когда

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

  • Как правило, k-кратная перекрестная проверка является золотым стандартом для оценки производительности алгоритма машинного обучения на невидимых данных с k, установленным на 3, 5 или 10.
  • Использование разделения обучения/тестирования хорошо для скорости при использовании медленного алгоритма и дает оценки производительности с меньшим смещением при использовании больших наборов данных.
  • Такие методы, как перекрестная проверка с исключением одного и повторяющиеся случайные разбиения, могут быть полезными промежуточными звеньями при попытке сбалансировать дисперсию в предполагаемой производительности, скорости обучения модели и размере набора данных.

Лучший совет — поэкспериментировать и найти способ решения вашей проблемы, который будет быстрым и даст разумные оценки производительности, которые вы сможете использовать для принятия решений. Если вы сомневаетесь, используйте 10-кратную перекрестную проверку.