此示例显示如何将具有比观察更多的预测器的模型正规化。广泛的数据与观察结果有更多的预测器是数据。通常,包含广泛的数据来识别重要的预测因子。采用lassoglm.
作为一种探索性或筛选工具,以选择较小的变量集,以优先考虑您的建模和研究。使用并行计算来加速交叉验证。
加载卵巢癌
数据。此数据有216个观察和4000个预测因子obs.
工作区变量。响应是二进制的,也是如此'癌症'
或'普通的'
, 在里面GRP.
工作区变量。将响应转换为二进制文件以供使用lassoglm.
。
加载卵巢癌y = strcmp(grp,'癌症');
设置使用并行计算的选项。准备使用并行计算parpool.
。
opt = statset('使用指平行',真正的);parpool ()
使用“local”配置文件启动并行池(parpool)…connection to the parallel pool (number of workers: 6). ans = ProcessPool with properties: Connected: true NumWorkers: 6 Cluster: local attachdfiles: {} AutoAddClientPath: true IdleTimeout: 30 minutes (30 minutes remaining) SpmdEnabled: true
适合交叉验证的正则化模型。使用Α
参数,以支持保持高度相关的预测因子的组,而不是消除除小组的所有成员之外。通常,你使用相对大的价值Α
。
rng (“默认”)重复性的%tic [,S] = lassoglm(obs,y, S)“二”那'numlambda',100,......'Α',0.9,'lambdaratio',1e-4,'简历'10,'选项',选择);TOC.
经过时间为90.892114秒。
检查交叉验证情节。
Lassoplot(B,S,'plottype'那'简历');传奇('显示')%显示传奇
检查跟踪情节。
Lassoplot(B,S,'plottype'那'lambda'那'xscale'那'日志')
右(绿色)垂直虚线代表lambda.
提供最小的交叉验证偏差。左(蓝色)虚线具有最小偏差加不超过一个标准偏差。这个蓝线有很多预测因子:
[s.df(s.index1se)s.df(s.indexmindeviance)]
ans =.1×250 89.
你问lassoglm.
适合使用100不同lambda.
价值观。它使用了多少钱?
大小(B)
ans =.1×24000 84.
lassoglm.
84值后停止,因为偏差太小而不能小lambda.
价值观。避免过度装满,lassoglm.
当拟合模型的偏差太小时停止与二进制响应的偏差太小时,忽略了预测变量。
你可以强迫lassoglm.
通过使用更多条款'lambda'
名称值对参数。例如,定义一组lambda.
另外的值包括小于值的三个值S.Lambda.
。
minlambda = min(s.lambda);ExplicitLambda = [minlambda * [。1 .01 .001] s.lambda];
指定'lambda',explicitlambda
当你打电话的时候lassoglm.
功能。lassoglm.
当拟合模型的偏差太小时,暂时停止,即使您明确提供一组lambda.
价值观。
要节省时间,可以使用:
较少lambda.
,意味着少拟合
交叉验证折叠较少
更大的价值lambdaratio
使用串行计算和这三种节省时间的方法:
tic [Bquick,Squick] = lassoglm(obs,y, y)“二”那'numlambda',25,......'lambdaratio',1e-2,'简历'5);TOC.
经过时间为16.517331秒。
将新结果与第一个结果进行图形化比较。
Lassoplot(Bquick,Squick,'plottype'那'简历');传奇('显示')%显示传奇
Lassoplot(Bquick,Squick,'plottype'那'lambda'那'xscale'那'日志')
最低加上一个标准偏差模型中的非零系数的数量约为50,类似于第一计算。