Машинное обучение

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

Наборы данных для обучения, проверки и тестирования

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

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

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

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

Простая проверка удержания

Как правило, общий коэффициент разделения набора данных составляет 60/20/20 (обучающий набор/проверочный набор/тестовый набор). Фактическая ситуация будет зависеть от таких факторов, как размер набора данных, количество признаков, тип модели и т. д. Лучше всего оценить коэффициент разделения набора данных и скорректировать его в соответствии с реальной ситуацией. Следующая диаграмма и код показывают, как это сделать:

num_validation_samples = 10000  #set validation datasets 10000 samples
np.random.shuffle(data)             
validation_data = data[:num_validation_samples]  
training_data = data[num_validation_samples:]

model = get_model()                                    #build model
model.fit(training_data,...)                           #training model
validation_score = model.evaluate(validation_data,...) #evaluate model

...                       #adjust model

model = get_model()    #rebulid model
model.fit(np.concatenate([training_data,validation_data]),...)

test_score = model.evaluate(test_data,...)  #test model

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

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

Перед использованием K-кратной проверки данные должны быть разбиты на K блоков одинакового размера. Затем выберите каждый блок по очереди в качестве проверочного набора и повторно обучите модель с оставшимися блоками K-1 и сохраните контрольную оценку этого обучения после завершения обучения. После K раз обучения отбору мы берем среднее значение каждой оценки в качестве окончательной оценки, а затем корректируем гиперпараметры со ссылкой на эту оценку. См. код и схему ниже:

#count how many samples in a block
k = 3
num_validation_samples = len(data)//k    
np.random.shuffle(data)
validation_scores = []

for fold in range(k):                            
    validation_data = data[num_validation_samples * fold:  #choose validation data block
                           num_validation_samples * (fold + 1)] 
    training_data = np.concatenate(      #Use the remaining data as training data
        data[:num_validation_samples*fold],
        data[num_validation_samples*(fold+1):])
    model = get_model()                                    #build a new model
    model.fit(training_data,...)         
    validation_score = model.evaluate(validation_data,...) #got validation score
    validation_scores.append(validation_score)             #store every scores of validation into the list
validation_score = np.average(validation_scores)           #Final score is the average scores of all validation scores

model = get_model()                         #rebuild the model
model.fit(data,...)                         #train new model
test_score = model.evaluate(test_data,...)  

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

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

import numpy as np
from sklearn.model_selection import KFold
from sklearn.linear_model import LinearRegression

# Generate sample data
np.random.seed(0)
X = np.random.randn(10, 5)
y = np.random.randn(10)

# Define the k-fold cross-validation object
kfold = KFold(n_splits=5, shuffle=True, random_state=0)

# Iterate through the folds and fit a linear regression model
for train_index, test_index in kfold.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    model = LinearRegression().fit(X_train, y_train)
    print("R^2 score: ", model.score(X_test, y_test))

Преодоление базовой линии

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

  1. Средний или средний базовый уровень: для задач регрессии базовый прогноз может быть установлен на среднее или среднее значение целевой переменной. Для задач классификации базовое предсказание может быть установлено для наиболее часто встречающегося класса в целевой переменной.
  2. Базовый уровень случайного прогнозирования. Другой базовый прогноз заключается в случайном назначении целевого класса или значения для каждой точки данных без использования какой-либо информации об объектах. Это может служить нижней границей производительности модели машинного обучения.
  3. Базовая линия с нулевым правилом: для задач регрессии простой базовый прогноз всегда должен предсказывать среднее значение целевой переменной. Для задач классификации базовое предсказание с нулевым правилом состоит в том, чтобы всегда предсказывать класс большинства.

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

Соображения при оценке моделей

При выборе метода оценки необходимо обратить внимание на следующие параметры:

Репрезентативность данных

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

Стрела времени

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

Избыточность ваших данных

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

Сложность модели

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

Показатели эффективности

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

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

Спасибо за ваше чтение.🧐📚