MATLAB多元线性回归:添加正则化项以提升模型性能
多元线性回归是一种用于建立多个自变量和一个因变量之间关系的统计模型。在MATLAB中,可以使用fitlm函数进行多元线性回归分析。如果需要加入正则化项,可以使用lasso或ridge函数进行处理。
- 数据准备
首先,需要准备好自变量和因变量的数据。假设有m个样本,n个自变量,因变量为y。
- 多元线性回归
使用fitlm函数进行多元线性回归分析:
mdl = fitlm(X,y);
其中,X为自变量数据,y为因变量数据。该函数可以返回多个参数,包括模型系数、拟合优度、残差等。
- 加入正则化项
在多元线性回归的基础上,加入正则化项可以控制模型的复杂度,并避免过拟合。可以使用lasso或ridge函数进行处理。
使用lasso函数:
[B,FitInfo] = lasso(X,y,'CV',10);
其中,X为自变量数据,y为因变量数据,'CV'表示进行10折交叉验证,可以得到一组系数B和对应的拟合误差。
使用ridge函数:
[B,FitInfo] = ridge(y,X,lambda);
其中,X为自变量数据,y为因变量数据,lambda为正则化参数,可以得到一组系数B和对应的拟合误差。
- 模型评估
使用多元线性回归模型或加入正则化项后的模型进行预测,并计算模型的拟合优度、均方误差等指标进行评估。
y_predict = predict(mdl,X_test);
R2 = mdl.Rsquared.Adjusted;
MSE = immse(y_predict,y_test);
其中,y_predict为模型预测结果,X_test和y_test为测试数据,R2为拟合优度(Adjusted R-squared),MSE为均方误差(Mean Squared Error)。
- 示例代码
% 数据准备
load carbig
X = [Horsepower Weight];
y = MPG;
% 多元线性回归
mdl = fitlm(X,y);
% 加入正则化项
[Blasso,FitInfo] = lasso(X,y,'CV',10);
[Bridge,FitInfo] = ridge(y,X,0.1);
% 模型评估
X_test = [200 4000];
y_test = predict(mdl,X_test);
y_predict_lasso = predict([Blasso(1:2,:); FitInfo.Intercept],X_test);
y_predict_ridge = predict([Bridge(1:2,:); Bridge(end,:)],X_test);
R2 = mdl.Rsquared.Adjusted;
MSE = immse(y_test,y_predict);
% 结果显示
disp(['多元线性回归拟合结果:' num2str(y_test)]);
disp(['Lasso拟合结果:' num2str(y_predict_lasso)]);
disp(['Ridge拟合结果:' num2str(y_predict_ridge)]);
disp(['Adjusted R-squared:' num2str(R2)]);
disp(['MSE:' num2str(MSE)]);
原文地址: https://www.cveoy.top/t/topic/nu1W 著作权归作者所有。请勿转载和采集!