基于MATLAB的机器学习

套索正则化

本例通过查看数据集并识别人群中糖尿病的预测因子,演示了如何使用套索进行特征选择。该数据集包含10个预测值。我们的目标是确定重要的预测因素,并丢弃那些不必要的预测因素。

查看全套数据和功能为了这次演示。

下载数据

文件名='diabetes.txt';urlwrite('http://www.stanford.edu/~Hastine/Papers/LARS/diabetes.数据',文件名);

导入数据

保存文件后,可以使用导入工具使用默认选项。或者,您可以使用以下代码,这些代码可以从导入工具自动生成:

格式规范=“%f%f%f%f%f%f%f%f%f%f%f%f%[^\n\r]';fileID=fopen(文件名,“r”);dataArray=textscan(文件ID、格式规范、,“分隔符”,“\t”,“头线”1.“返回者”,false);fclose(fileID);diabetes=table(数据数组{1:end-1},“变化无常”, {“年龄”,“性”,“体重指数”,“英国石油”,“S1”,“S2”,“S3”,“S4”,“S5”,‘中六’,“是的”}); clearvars文件名分隔符斯塔特罗格式规范文件ID数据阵列ans;%删除该文件删去糖尿病.txt

从表中读取预测值和响应变量

predNames=diabetes.Properties.VariableNames(1:end-1);X=糖尿病{,1:end-1};y=糖尿病{,结束};

执行套索正则化

[beta,FitInfo]=套索(X,y,“标准化”符合事实的“CV”,10,“预测器名称”,姓名);lassoPlot(测试版、FitInfo、,“打印类型”,“拉姆达”,“XScale”,“日志”);hlplot=get(gca,“儿童”);%为绘图中的每一行生成颜色颜色=hsv(numel(hlplot));对于ii=1:numel(hlplot)集合(hlplot(ii),“颜色”,颜色(二,:);终止设置(hlplot,“线宽”,2)设置(gcf,“单位”,“正常化”,“位置”,[0.2 0.4 0.5 0.35])图例(“位置”,“最好的”)

较大的lambda值出现在图的左侧,这意味着正则化增加。随着lambda值的增加,非零预测器的数量也增加。

重要预测因子

根据经验,通常使用一个标准误差值来选择适合的较小模型。

lam=FitInfo.Index1SE;isImportant=beta(:,lam)~=0;disp(predNames(isImportant))
“BMI”“BP”“S3”“S5”

用比较术语拟合线性模型

mdlFull=fitlm(X,y,“拦截”,false);显示(mdlFull)
线性回归模型:y~x1+x2+x3+x4+x5+x6+x7+x8+x9+x10估计系数:估计SETstat pValue x1 0.022296 0.22256 0.10018 0.92025 x2-26.073 5.9561-4.3775 1.5074e-05 x3 5.3537 0.73462 7.2877 X71.5112e-12 x4 1.0178 0.2304.4175 1.2635e-05 X51.2636 0.33044 3.8239 0.5068 X60-283451-0.49.0683 0.37189-8.2505 1.9259e-15 x8-5.508 5.5883-0.98565 0.32486 x9 5.5034 9.4293 0.58365 0.55976 x10.12339 0.2788 0.44256 0.6583观测次数:442,误差自由度:432均方根误差:55.6

比较正则化和非正则化模型的MSE。

disp(['套索MSE:',num2str(FitInfo.MSE(lam))]))disp(['完整MSE:',num2str(mdlFull.MSE)])
套索均方误差:3176.5163全均方误差:3092.896

仅使用lasso确定的重要预测值进行拟合的均方误差(MSE)与使用所有预测值的线性模型的误差非常接近。lasso通常用于防止过度拟合或删除冗余预测值以提高模型精度。