如果结果变量中有 3 个类别,则进行逻辑回归

数据挖掘 逻辑回归 分类数据
2022-02-17 07:34:49

如果结果变量中有 2 个类别,则通常执行逻辑回归。我刚刚尝试了 iris 数据集,其中物种为 y 变量,具有 3 个类别。我使用了以下代码:

import pandas as pd
import matplotlib.pylab as plt

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()

from sklearn import datasets
iris = datasets.load_iris() 

clf.fit(iris.data, iris.target)
logcoefdf = pd.DataFrame(data=clf.coef_, 
     columns=["SL", "SW", "PL", "PW"], 
     index=['setosa','versicolor','virginica'])
print(logcoefdf)
logcoefdf.plot.bar()
plt.show()

打印输出和系数图如下:

                  SL        SW        PL        PW
setosa      0.414988  1.461297 -2.262141 -1.029095
versicolor  0.416640 -1.600833  0.577658 -1.385538
virginica  -1.707525 -1.534268  2.470972  2.555382

(我已经按物种名称标记了行,但我不确定这是否正确)。

从上面的输出我得到以下情节:

在此处输入图像描述

这些结果的解释是什么?这是否意味着花瓣长度(PL)在setosa中最低而在virginica中最高?杂色品种的萼片宽度和花瓣宽度都较小?感谢您的洞察力。

编辑:如果我只使用 2 类虹膜数据集,我只会得到一组系数:

clf.fit(iris.data[0:100,:], iris.target[0:100])
print(clf.coef_)

输出:

[[-0.40731745 -1.46092371  2.24004724  1.00841492]]

是否正在对所有可能的类别组合执行逻辑回归,即 setosa vs versicolor、versicolor vs virginica 和 virginica vs setosa?

1个回答

逻辑回归可以处理多类。坦率地说,它与二元分类器没有太大区别。问题是它如何找到您显示的每个类的系数。默认情况下,要查找单个类的系数,它与one vs rest combination. 所以setosavs 剩下的所有课程。它通过最小化交叉熵来迭代地获取系数。所以最终你会得到一个大小为n_classes vs features.

来到问题的解释部分。要解释单个特征的重要性,您可以这样做 -给定所有其他特征的系数相同(在将一个类与另一个类进行比较时)包括截距,具有最高系数的特征的类具有更大的吞没机会新点。这就是说具有对数据点属于类有贡献high petal length and width的特征但是单独解释每个系数没有多大意义。希望我说得有道理。low sepal length and widthvirginica