0

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

nnetmultinom()函数允许您为正在拟合的模型指定权重衰减,并且 mlogit 在幕后使用此函数来拟合其模型,所以我想应该可以将参数传递给 multinom,但到目前为止还没有找到了一种方法来做到这一点。decay

到目前为止,我试图简单地在模型公式中传递一个值,就像这样。

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
4

1 回答 1

2

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

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

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

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

于 2015-08-05T14:12:01.720 回答