我正在阅读James,Witten,Hastie,Tibshirani(2013)写的《 R语言中的统计学习及其应用入门》一书中关于Ridge回归/套索的LAB部分§6.6 。
更具体地说,我尝试将scikit-learn Ridge
模型应用于R包“ ISLR”中的“ Hitters”数据集。我已经创建了与R代码所示相同的一组功能。但是,我无法接近glmnet()
模型的结果。我选择了一个L2调整参数进行比较。(scikit-learn中的“ alpha”参数)。
蟒蛇:
regr = Ridge(alpha=11498)
regr.fit(X, y)
http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb
R:
请注意,alpha=0
in 参数glmnet()
表示应采用L2惩罚(Ridge回归)。文档警告不要为输入单个值lambda
,但结果与使用向量的ISL中的结果相同。
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
是什么导致差异?
编辑:从R中的惩罚包
使用时penalized()
,系数与scikit-learn相同。
ridge.mod2 <- penalized(y,x,lambda2=11498)
也许问题可能还会是:“ 进行Ridge回归glmnet()
与penalized()
进行回归时有什么区别?
用于R包glmnet中的实际Fortran代码的新python包装器
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
会进行非罚分截取估计(标准),并且惩罚会使得||Xb - y - intercept||^2 + alpha ||b||^2
最小化b
。惩罚前面可能有因素1/2
,1/n_samples
或两者兼而有之,使结果立即不同。为了排除罚金缩放问题,请将两种情况下的罚金都设置为0,解决那里的所有差异,然后检查加回罚金的结果。顺便说一句,恕我直言,这里是问这个问题的正确地方。