предисловие
После того, как мы построили модель машинного обучения, мы часто сталкиваемся с тем, что модель, полученная в результате обучения, не может правильно предсказать, После этого мы часто принимаем следующие решения:
- добавить тренировочные данные
- Уменьшение количества функций
- добавить больше функций
- Добавить полиномиальные функции (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,Добавляя образцы, модель можно оптимизировать
Полиномиальные функции
Выбор полиномиальных признаков часто доставляет нам много хлопот: слишком много полиномиальных признаков сделает модель более подходящей, а слишком мало полиномиальных признаков сделает модель неподходящей.
Итак, как мы выбираем полином, решение представлено ниже:
- Используйте обучающий набор, чтобы обучить каждый полином, чтобы получить соответствующее значение тета.
- Используйте набор cv, чтобы получить полином с наименьшей ошибкой.
- Наконец, полином оценивается с использованием тестового набора.
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 используется для всех. Например, [часть кода для расчета ошибки модели].