You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

nnet::multinom生成的参数估计量尺度是多少?如何转换为概率尺度?

R语言nnet::multinom多分类模型的系数转概率方法

问题核心原因

你使用了错误的转换逻辑:二分类逻辑回归用逆logit(plogis)转换,多分类多项logit模型需要用softmax转换,不能单独对每个类别的系数做逆logit计算。

multinom默认将第一类设为参考类别,所有输出的系数都是对应类别与参考类别相比的对数优势:

  • 参考类别(第一类)的线性预测值η₁固定为0
  • 第k类(k≥2)的线性预测值ηₖ = 你提取到的第k类的系数(包含自变量时为系数乘以自变量取值加截距)

正确转换公式(softmax)

第k个类别的预测概率为:

P(Y=k) = exp(ηₖ) / Σᵢ₌₁ᴷ exp(ηᵢ)
其中K为总类别数,Σ是对所有类别的exp(η)求和。

你的示例手动计算验证

你示例中的系数对应的线性预测值为:

  • η₁ = 0(参考类默认值)
  • η₂ = 第二类的截距系数,对应log(0.3/0.06)≈1.609
  • η₃ = 第三类的截距系数,对应log(0.64/0.06)≈2.367

代入公式计算:

# 计算所有类别的exp(η)之和
sum_exp <- exp(0) + exp(1.609) + exp(2.367) ≈ 1 + 5 + 10.667 = 16.667
# 分别计算概率
P1 = 1 / 16.667 ≈ 0.06
P2 = 5 / 16.667 ≈ 0.3
P3 = 10.667 / 16.667 ≈ 0.64

和predict输出的结果完全一致。

通用转换代码

仅含截距项的模型(你的示例场景)

# 补全参考类的线性预测值为0,再做softmax
eta <- c(0, coef(mod))
prob <- exp(eta) / sum(exp(eta))

含自变量的模型

假设你拟合的模型为multinom(group ~ x, data = dat),要计算x取某值时的各类概率:

# 假设x取值为2
x_val <- 2
# 参考类线性预测值为0
eta1 <- 0
# 第二类线性预测值 = 第二类截距 + 第二类x系数 * x取值
eta2 <- coef(mod)[2,1] + coef(mod)[2,2] * x_val
# 第三类线性预测值 = 第三类截距 + 第三类x系数 * x取值
eta3 <- coef(mod)[3,1] + coef(mod)[3,2] * x_val
# softmax转换
prob <- exp(c(eta1, eta2, eta3)) / sum(exp(c(eta1, eta2, eta3)))

内容的提问来源于stack exchange,提问作者missng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:18:03