我正在为R中的波士顿住房数据构建分位数回归模型+ LASSO惩罚。我找到了2个可以构建这种模型的软件包:rqPen和quantreg。 rqPen实现了一个交叉验证过程来调整LASSO参数lambda,所以我决定使用这个。我考虑了算法自动选择的100个不同的lambda值和10倍:
In [56]: df2[df2.m_name.isin(df1.name) | df2.n_name.isin(df1.name)]
Out[56]:
m_name n_name loc
0 abc tyu IND
1 bcd abc RSA
3 lmn ert AUS
5 pqr lmn NZ
CV的结果是,λ值为0.46时,最小绝对误差为4.2。该模型仅考虑预测因子" zn," tax"," b"和" lstat"并将与其他预测变量相关的系数发送到零。
In [58]: df2.query('m_name in @df1.name or n_name in @df1.name')
Out[58]:
m_name n_name loc
0 abc tyu IND
1 bcd abc RSA
3 lmn ert AUS
5 pqr lmn NZ
我决定使用另一个包(quantreg包)构建相同的模型,但保持lambda值。我预计模型形成的两个包不完全相同,但在模型中包含的预测变量方面相似。
library(rqPen)
library(mlbench)
data("BostonHousing")
help(BostonHousing)
x_boston <- data.matrix(BostonHousing[,-14])
y_boston <- BostonHousing[,14]
cv_m1_boston <- cv.rq.pen(x_boston,y_boston, penalty="LASSO", nlambda=100, nfolds=10, tau=.5, cvFunc="AE")
我发现在这个模型中所有的预测器都被使用了,所以它与第一个完全不同。
m1_boston <- rq.lasso.fit(x_boston[i_train,], y_boston[i_train], tau=0.5, lambda=0.46)
Coefficients:
intercept crim zn indus chas nox rm age dis rad
27.175724364 0.000000000 0.025560221 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
tax ptratio b lstat
-0.008151729 0.000000000 0.007577458 -0.495927958
我做错了吗?是计算失败的rqPen包吗?