在 scikit-learn 中解释多项逻辑回归

机器算法验证 机器学习 物流 多项分布 scikit-学习
2022-03-04 17:18:37

我正在为涉及 6 个类和四个特征的分类问题运行多项逻辑回归。

这是代码:

from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import train_test_split    

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.20)

logreg = LogisticRegression(multi_class = 'multinomial', solver = 'newton-cg')
logreg = logreg.fit(X_train, Y_train)
output2 = logreg.predict(X_test)

logreg.intercept_
logreg.coef_
logreg.classes_

我得到以下输出:

截距

array([-1.33803785, -1.55807614, -1.63809549, -0.05199907,  3.72777888, 0.85842968])

系数

array([[  3.59830486,   5.1370334 ,   1.32336325,   4.89734568],
       [  3.5507364 ,   5.2459697 ,   1.48523684,   4.81653704],
       [  3.35193267,   5.40124363,   2.04869296,   3.885547  ],
       [ -5.4930705 ,   5.49483357,   1.96479926,  -6.7624365 ],
       [ -8.61513183,  -3.77761893,  -7.79363153, -11.72171457],
       [  3.6072284 , -17.50146139,   0.97153921,   4.88472135]])

课程

array([u'Dropper', u'Flat', u'Grower', u'New User', u'Non User', u'Stopper'], dtype=object)

我无法解释模型。据我了解多项逻辑回归,对于 K 个可能的结果,运行 K-1 独立二元逻辑回归模型,其中一个结果被选为“枢轴”,然后其他 K-1 结果分别针对枢轴结果进行回归。

根据这个,6个类必须有5个方程。但是这里有6个。怎么会?

在此处输入图像描述

2个回答

由于每个类别的概率总和必须为 1,我们可以定义n-1独立的系数向量,或者定义n由方程链接的系数向量\sum_c p(y=c) = 1

这两个参数化是等价的。另请参见 Wikipedia Multinomiallogistic regression - As a log-linear model

对于一个类c,我们有一个概率P(y=c) = e^{b_c.X} / Z,以及Z一个解释方程的归一化\sum_c P(y=c) = 1这些概率是给定系数的类的预期概率。它们可以用计算predict_proba


为了更好地了解系数,请考虑本例中的左图示例 http://scikit-learn.org/dev/_images/plot_logistic_multinomial_001.png

在这个例子中,有 3 个类别 a、b、c 和 2 个特征x0, x1类被记下y

在多项式逻辑拟合之后,每个类作为具有2 个 分量C(对于 2 个特征)系数向量(C_a0, C_a1)(C_b0, C_b1)(C_c0, C_c1)II_aI_bI_c

虚线表示由C和定义的超平面I 示例:对于 a 类,超平面由等式定义x0 * C_a0 + x1 * C_a1 + I_a = 0 这是超平面,其中P(y=a) = e^{x0 * C_a0 + x1 * C_a1 + I_a} / Z = 1 / Z如果C_a0为正,当x0增加时P(y=a)增加。如果C_a0是负数,当x0增加P(y=a)减少。

然而,这不是决策边界。 类 a 和 b 之间的决策边界由以下等式定义: p(y=a) = p(y=b)ise^{x0 * C_a0 + x1 * C_a1 + I_a} = e^{x0 * C_b0 + x1 * C_b1 + I_b} 或 again x0 * C_a0 + x1 * C_a1 + I_a = x0 * C_b0 + x1 * C_b1 + I_b该边界超平面在图中通过背景颜色可见。如果C_a0 - C_b0为正,当x0增加时P(y=a) / P(y=b)增加。如果C_a0 - C_b0是负数,当x0增加P(y=a) / P(y=b)减少。

令 W = 系数数组(6x4 矩阵),b = 截距,然后

y = W*X +给出每个类别对应的 6x1 概率向量,其中概率最高的类别是您的预测。bT

注意:X 可以是 4xm 的特征向量,其中“m”是输入的数量。在这种情况下,y 是一个 6xm 向量,其中每一列给出对应于每个“m”个输入的预测。