R h2o.glm-具有最大活动预测值的问题
我想用预定义的最大活动预测器数(非默认的最大活动预测器列)估计h2o.glm模型。以下是一个例子:R h2o.glm-具有最大活动预测值的问题,r,h2o,R,H2o,我想用预定义的最大活动预测器数(非默认的最大活动预测器列)估计h2o.glm模型。以下是一个例子: set.seed(123) par1 <- matrix(c(100, 200, 300, 400, 40, 30, 20, 10), 4, 2) par2 <- c(1000, 2000, 3000, 4000) coef <- c(0.5, -0.5, 1, -1, 1.5, -1.5, 2, -2) mat <- as.data.frame(cbind(appl
set.seed(123)
par1 <- matrix(c(100, 200, 300, 400, 40, 30, 20, 10), 4, 2)
par2 <- c(1000, 2000, 3000, 4000)
coef <- c(0.5, -0.5, 1, -1, 1.5, -1.5, 2, -2)
mat <- as.data.frame(cbind(apply(par1, 1, function(x) rnorm(1000, mean = x[1], sd = x[2])),
sapply(par2, function(x) rpois(1000, lambda = x))))
mat$Y <- as.numeric(t(coef %*% t(mat)))
h2o.init(nthreads = -1)
mat_h2o <- as.h2o(mat, "mat.h2o")
glm_base <- h2o.glm(x = setdiff(colnames(mat), "Y"),
y = "Y",
training_frame = mat_h2o,
solver = "IRLSM",
family = "gaussian",
link = "family_default",
alpha = 1,
lambda_search = TRUE,
nlambdas = 10)
summary(glm_base)
glm_restr <- h2o.glm(x = setdiff(colnames(mat), "Y"),
y = "Y",
training_frame = mat_h2o,
solver = "IRLSM",
family = "gaussian",
link = "family_default",
alpha = 1,
lambda_search = TRUE,
nlambdas = 10,
max_active_predictors = 3)
summary(glm_restr)
set.seed(123)
par1我认为这是一个bug。(已确认,请参阅)
当我做了h2o.scoreHistory(glm_Rest)
时,我得到了:
Scoring History:
timestamp duration iteration lambda predictors deviance_train
1 2016-09-21 09:25:29 0.000 sec 0 .46E2 4 9806.688
2 2016-09-21 09:25:29 0.052 sec 0 .17E2 7 1988.941
3 2016-09-21 09:25:29 0.100 sec 0 .6E1 9 294.884
4 2016-09-21 09:25:29 0.153 sec 0 .21E1 9 38.086
5 2016-09-21 09:25:29 0.203 sec 0 .77E0 9 4.919
6 2016-09-21 09:25:29 0.255 sec 0 .28E0 9 0.635
7 2016-09-21 09:25:30 0.307 sec 0 .1E0 9 0.082
8 2016-09-21 09:25:30 0.358 sec 0 .36E-1 9 0.011
9 2016-09-21 09:25:30 0.408 sec 0 .13E-1 9 0.001
也就是说,lambda搜索的第一次迭代(lambda值为46)似乎已超过3,并直接达到4
有了这个线索,我可以通过跳过lambda搜索并选择一个50的lambda来获得三个预测值:
glm_L50 <- h2o.glm(x = setdiff(colnames(mat), "Y"),
y = "Y",
training_frame = mat_h2o,
solver = "IRLSM",
family = "gaussian",
link = "family_default",
alpha = 1,
lambda = 50)
这是正确的选择。你没有犯任何错误吗?你能提供摘要吗?这可能与解算器有关。我知道IRLSM更改了默认的最大值。我不想粘贴摘要,因为它太长了。我没有错误,但是第二个模型返回八个(不是三个)非零系数。就解算器而言,我在文档中读到,该参数在解算器中有所不同,但仅在默认值方面有所不同,在本例中,这不是问题。确定。如果没有进一步的信息,就很难进一步帮助你。你可以联系H2O谷歌集团,但是他们肯定会问你更多的信息。顺便问一下,你在你的机器上运行过这个代码吗?它不是完全可复制的,因为我在向glm添加种子参数时遇到了问题,但也许你可以告诉我是否有4个或4个以上的glm非零预测器。顺便问一下,关于“向glm添加种子参数时遇到问题”,你使用的是最近的glm吗?我在3.8.2.*中也遇到了这个问题,但它似乎在3.10.0.*系列中消失了。(我相信GLM本身始终是可复制的(?),但seed允许交叉验证拆分之类的事情也可复制。)感谢这种解决方法。我也非常感谢您确认这是否是一个bug,以及何时可以解决这个问题。@user2280549我添加了到bug报告的链接。
GLM Model: summary
family link regularization number_of_predictors_total
1 gaussian identity Lasso (lambda = 50.0 ) 8
number_of_active_predictors number_of_iterations training_frame
1 3 0 mat.h2o
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept -998.311697 -3657.657068
2 V1 0.000000 0.000000
3 V2 0.000000 0.000000
4 V3 0.000000 0.000000
5 V4 0.000000 0.000000
6 V5 0.000000 0.000000
7 V6 -0.389528 -17.453935
8 V7 1.014556 53.969163
9 V8 -1.229969 -81.328717
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 10921.23
RMSE: 104.5047
MAE: 83.98198
RMSLE: NaN
Mean Residual Deviance : 10921.23
R^2 : 0.6932398
Null Deviance :35601860
Null D.o.F. :999
Residual Deviance :10921233
Residual D.o.F. :996
AIC :12146.34