岭回归和lasso回归
我们在机器学习中理解bias and variance。将一组小鼠的自变量weight和因变量height分为l两组: training set(blue) and testing set(green) 。
如果我们想建立一个临床模型:用是否胸痛、血流动力学是否良好、体重大小等因素预测一个人是否有心脏病,应该选取哪种 machine learning method ?logistic回归?k-nearest?支持向量机(SVM)还是其他方法?我们可以用 cross validation 比较不同的机器学习方法。
(交叉验证是评价预测模型的最佳方法。你可以将数据集分成两组(训练集和验证集)。通过衡量观测值和预测值之间简单的均方差就能给出预测精度的度量)
cross validation 将数据集分成两部分:
1.training data:estimate the parameters for the machine learning method;
2.testing data:evaluate how well the machine learning method work.
交叉验证将随机对数据集进行排列组合。例如把数据集分为四部分(四重交叉验证 four-fold cross validation),分别采用:1.123 for train,4 for test. 2.124 for train,3 for test. 3.134 for train,2 for test. 4.234 for train,1 for test.然后将这些结果整合在一起比较:
对携隐于方程 size =y-axis intercept + slope x weight ,RR通过最小化( minimize the sum of the squared residuals 和 λ x the slope² )这两部分之和的方法确定这两个系数的大小。
the slope² 在最小闷宽二乘法的基础上增加一个惩罚量,而 λ 决定惩罚的严重程度。因此和最小二乘法确定的straight line相比,由于惩罚, Ridge Regression Line 增大了bias,但是减小了variance。
随着λ的增大,直线的slope变得越来越小,那么size对weight变化的敏感性就越来越小:
上述例子为连续型变量(weight),RR也可应用于离散型变蚂隐亮量。
在这个equation里,1.5是ND组的average size,0.7是HD组和ND组的average size之差。
RR的应用方法:
在HD组和ND组的比较中,引入RR的目的是避免HD组合ND组差别过大时:lead to poor least squares estimates that results in terrible machine learning predictions.
例子:用weight来预测小鼠是不是肥胖:
假定size为因变量,weight和diet为自变量
此时ridge regression penalty来自于slope和diet difference两部分。
在多于2个变量的分析里,只有2个点不足以计算出slope和y-intercept。例如在三变量分析里:
Lasso regression is very similar to Ridge Regression ,but it has a very important difference:
Elastic Net Regression combines LR Penalty with the RR Penalty:
如何确定LR的λ1和RR的λ2值?通过 cross validation :
glmnet是R里的一个包,glm即广义线性模型,net来自于Elastic Net。
不同于Elastic Net的两个λ,glmnet只有1个λ,同时引入一个新的参数α。α=0或1时的与LR和RR的关系如上文字所示。
第一步:安装合适版本的R软件,安装对应版本的Rtools,安装Rstudio,安装Miketex软件(这些软件均可从官网下载)。
第二步:打开R软件,选择镜像,安装“devtools”,具体可从R——程序包——安装程序包上进行,也可以使用install.packages("devtools");还可以从CRAN上下载最新的程序包本地安装。(推荐最后一种)
第三步:library(devtools)
第四步:使用install_github("A","B"),其中A表示要从GitHub上安装的软件包的名称,B表示开发该程序包的作者,由于install_github默认B是“hadley”(即作者是“hadley”)。举个例子,mgarch包是vst开发的,则是install_github("mgarch","vst")。
运行之后,即可实现安装。
Alpha: 即α得值,当为 0,表示Lasso为岭回归,这时它当然不是Lasso了,而是和Lasso相似的岭回归计算法悉圆,当该值为 1(默认值),则此程序为 Lasso,若为0~1之间,表示是 elastic net算法,也是与 岭回归和Lasso相似而不同的算法。CV:为 交叉验证的设置。用于估计最佳的λ的值。 默认为“resubstitution”,这个我没有研究,而迟陆困是使用了较为广泛的 K折交叉验证,一般 赋值 k =5或10,就是 5折交叉验证或10折交叉验证。
DFmax:返回拟合式中 非零系数的数量。
Lambda:这个就是Lasso活着岭回归活着elastic net中的参数λ的值,如果使用交叉验证,会使用交叉验证选择一个最优λ,如果默,则由系统根据计算公式默认赋值一个λ的最大值,关于最大值计算公式,在Lasso程序中有说明,或者你也可以指定λ的值。在确定该最大值后,还需要和Lambdaratio 和 Numlambda 确定λ的取值。
Lambdaratio λ的取值比例,它和Lambda构成λ的取值范码念围区间。
Numlambda λ的取值数量。Lambda确定λ的最大值,比如a,Lambdaratio确定λ最小值与最大值的比率,如Lambdaratio为0.01,那么λ的取值区间即为0.01*a~a,而Numlambda则确定改区间取多少个λ,从而最终确定了λ的取值。
Reltol 坐标下降法的阈值。坐标下降法是求解elastic net的常用方法,这是该方法的一个参数。
Standardize:布尔值。是否对Lasso进行缩放。一般设置为 true,即 进行缩放。
输出参数:
Intercept:截距,就是线性方程中的常数项
lambda:列出使用的λ的值,升序排列,而且后面的参数的顺序与这个λ对应
alpha:α值
MSE:均方误差
DF
Fitinfo中的字段:
在使用CV交叉验证后,可以输出本字段中的结果,内容和上面的差不多,先不描述了,大家想了解的话我再加。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)