如何将权重衰减参数传递给 mlogit()?

How can I pass a weight decay argument to mlogit()?

如何在 mlogit 拟合的模型中指定权重衰减?

nnetmultinom() 函数允许您为正在拟合的模型指定权重衰减,并且 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

mlogit()nnet::multinom() 都适合多项逻辑模型(预测多个 class 的 class 成员资格的概率)但他们使用不同的算法来拟合模型。 nnet::multinom() 使用神经网络来拟合模型,mlogit() 使用最大似然。

权重衰减是神经网络的一个参数,不适用于最大似然。

权重衰减的作用是通过在拟合算法的权重更新步骤中惩罚较大的权重来防止神经网络中的权重变得太大。这有助于防止过度拟合,并有望创建一个更通用的模型。

考虑使用 pmlr package 中的 pmlr 函数。当使用默认函数参数 penalized = TRUE.

调用时,此函数实现 "Penalized maximum likelihood estimation for multinomial logistic regression"