Общие ошибки в моделях обучения машинному обучению

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

предисловие

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

  • добавить тренировочные данные
  • Уменьшение количества функций
  • добавить больше функций
  • Добавить полиномиальные функции (X1*X2...)
  • Увеличить значение лямбда
  • уменьшить значение лямбда

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

Набор данных CV [Обработка набора данных]

Разделите набор данных следующим образом:

  • Training set: 60%
  • Cross validation set: 20%
  • Test set: 20%

Вычислить ошибку модели [Расчет ошибки]

1. Линейная регрессия, просто используйте функцию стоимости напрямую, как показано ниже:

for i = 1:m
    %依次递增的数据量进行训练模型
    theta = trainLinearReg(X(1:i,:), y(1:i), lambda);
    %train数据集的测试,使用时去除lambda
    error_train(i) =linearRegCostFunction(X(1:i,:), y(1:i), theta, 0);
    %cv数据集的测试
    error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);
endскопировать код

2. Логистическая регрессия, приводящая к коэффициенту ошибочной классификации 0-1:

Переоснащение и недообучение [Анализ ошибок]

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


образец

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


Высокое смещение: Jcv очень близок к Jtrain,Добавление слишком большого количества образцов не влияет на оптимизацию модели.


Высокая дисперсия: Jcv намного больше, чем Jtrain,Добавляя образцы, модель можно оптимизировать


Полиномиальные функции

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

  1. Используйте обучающий набор, чтобы обучить каждый полином, чтобы получить соответствующее значение тета.
  2. Используйте набор cv, чтобы получить полином с наименьшей ошибкой.
  3. Наконец, полином оценивается с использованием тестового набора.

lambda

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

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

фрагмент тестового кода

for i = 1:length(lambda_vec)
        lambda = lambda_vec(i);
        theta = trainLinearReg(X, y, lambda);
        %评估时切记不可在cv set和test set中加入lambda值
        error_train(i) = linearRegCostFunction(X, y, theta, 0);
        error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);
endскопировать код

Результаты теста:

кривая обучения

Во многих случаях из-за многих особенностей нам часто бывает трудно отобразить данные, и визуализированные данные часто оказывают большую помощь в нашем анализе; построение кривой обучения, несомненно, является большим помощником, а кривая обучения обычно определяется тренировочным набором.Самое главное в середине - использовать тренировочный набор для обучения инкрементальным способом, а набор cv используется для всех. Например, [часть кода для расчета ошибки модели].