Вы просто используете неправильное уравнение
Когда вы хотите предложить задачу минимизации, вы добавляете регуляризацию и другие термины к функции, чтобы минимизировать, и в вашем случае это уравнение, которое вы использовали совместно.
Однако, когда вы хотите проверить свои результаты, вам нужно только знать, насколько ваше решение применяется к модели по сравнению с реальными данными.Это означает, что когда вы вычисляете ошибку (в данном случае MSE), вам просто нужно:
![enter image description here](https://i.stack.imgur.com/LxxFw.gif)
, где ваше решение, примененное к модели, равно
![enter image description here](https://i.stack.imgur.com/HvWUV.gif)
Короче говоря: Измените current_calculated_mse
на
current_calculated_mse = sum((y - FitInfo.Intercept(i) - X*beta_vectors(:,i)).^2)/(n);
Выходы:
current_calculated_mse = 116.748997
current_mse = 116.748997
current_calculated_mse = 122.421290
current_mse = 122.421290
current_calculated_mse = 125.824726
current_mse = 125.824726
current_calculated_mse = 137.641287
current_mse = 137.641287
Почему бы не использовать минимизирующее уравнение для ошибки?Это имеет смысл, если мы минимизируем это!
Да!И нет.Вы предлагаете минимизирующее уравнение для управления решением с некоторыми желаемыми свойствами, в случае с Лассо вы хотите, чтобы столько бета-значений были равны нулю.Но это не значит, что ваше решение будет хорошим.
Вы могли бы также свести к минимуму уравнение, которое говорит argmin ( beta*x-y )*0+(1-beta)
.Это уравнение, решенное, будет иметь beta=1
в качестве идеального минимизатора, но означает ли это, что ваше решение идеально?Нет, совсем нет!Вы просто выбрали плохую функцию, чтобы минимизировать.Вы хотите, чтобы бета-версия лучше соответствовала реальным данным (y
).В вашем случае так же, как вы используете различный набор лямбд.В решениях вы можете видеть, что ваши большие лямбды тоже решают уравнение, но решения хуже соответствуют реальным данным.Вы делаете это, чтобы выбрать лучшую лямбду.