如何在适合mlogit的模型中指定重量衰减?
nnet的multinom()
功能允许您为正在适合的模型指定权重衰减,而mlogit在幕后使用此功能以适应其模型,因此我想它应该是可能的将decay
参数传递给multinom,但到目前为止还没有找到方法。
到目前为止,我试图简单地在模型公式中传递一个值,就像这样。
library(mlogit)
set.seed(1)
data("Fishing", package = "mlogit")
Fishing$wts <- runif(nrow(Fishing)) #for some weights
Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")
fit1 <- mlogit(mode ~ 0 | income, data = Fish, weights = wts, decay = .01)
fit2 <- mlogit(mode ~ 0 | income, data = Fish, weights = wts)
但输出完全相同:
identical(logLik(fit1), logLik(fit2))
[1] TRUE
答案 0 :(得分:2)
mlogit()
和nnet::multinom()
都适合多项逻辑模型(预测多个类的类成员资格的概率),但它们使用不同的算法来拟合模型。 nnet::multinom()
使用神经网络来拟合模型,mlogit()
使用最大似然。
重量衰减是神经网络的参数,不适用于最大似然。
重量衰减的影响是通过在拟合算法的权重更新步骤期间惩罚较大的权重来保持神经网络中的权重变得过大。这有助于防止过度拟合,并有希望创建一个更通用的模型。
考虑使用pmlr package中的pmlr
功能。当使用默认函数参数penalized = TRUE
调用时,此函数实现“多项逻辑回归的惩罚最大似然估计”。