Matlabによる機械学習

套索正规化

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

查看完整的数据和功能集对于这个演示。

下载数据

文件名=“diabetes.txt”;urlwrite (“http://www.stanford.edu/ hastie /论文/拉/ diabetes.data”文件名);

导入数据

保存文件后,可以将数据作为表导入MATLAB导入工具使用默认选项。或者,您可以使用下面的代码,可以从导入工具自动生成:

formatSpec =' % f % % f % % % f % f % % % f % f % ^ \ n \ [r];fileID = fopen(文件名,“r”);dataArray = textscan(fileID, formatSpec,“分隔符”' \ t '“HeaderLines”, 1“ReturnOnError”、假);文件关闭(文件标识);糖尿病= table(dataArray{1:end-1},“VariableNames”, {“年龄”“性”“身体质量指数”“英国石油公司”“S1 '“S2”“S3”S4的“S5”“S6”“Y”});clearvars文件名分隔符startRowformatSpec文件标识dataArray删除文件删除diabetes.txt

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

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

执行套索正则化

[beta, FitInfo] =套索(X,y,“标准化”,真的,“简历”10“PredictorNames”, predNames);FitInfo lassoPlot(β,“PlotType”“λ”“XScale”“日志”);Hlplot = get(gca,“孩子”);为图中的每条线生成颜色颜色= hsv(数字(hlplot));Ii = 1:数字(hlplot) set(hlplot(Ii),“颜色”、颜色(ii,:));结束集(hlplot,“线宽”2)组(gcf“单位”“归一化”“位置”,[0.2 0.4 0.5 0.35])图例(“位置”“最佳”

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

重要的预测因子

作为经验法则,一个标准误差值通常用于选择一个较小的模型,具有良好的拟合性。

lam = FitInfo.Index1SE;isImportant = beta(:,lam) ~= 0;disp (predNames(重要信息)
' bmi ' ' bp ' ' s3 ' ' s5 '

拟合线性模型与比较条件

mdlFull = fitlm(X,y,“拦截”、假);disp (mdlFull)
线性回归模型:y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10估计SE tStat 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 1.5112e-12 x4 1.0178 0.2304 4.4175 1.2635e-05 x5 1.2636 0.33044 3.8239 0.00015068 x6 -1.2849 0.3468 -3.7051 0.00023877 x7 -3.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 0.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

仅使用套索确定的重要预测因子的拟合的均方误差(MSE)非常接近使用所有预测因子的线性模型的误差。套索常用于防止过拟合或去除冗余预测因子以提高模型精度。