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

时间:2015-08-04 10:49:46

标签: r multinomial mlogit nnet

如何在适合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

1 个答案:

答案 0 :(得分:2)

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

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

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

考虑使用pmlr package中的pmlr功能。当使用默认函数参数penalized = TRUE调用时,此函数实现“多项逻辑回归的惩罚最大似然估计”。