在sklearn的LogisticRegression分类器中,我们可以将muti_class
选项设置为ovr
,即一对多方案,如下面的代码片段所示:
# logistic regression for multi-class classification using built-in one-vs-restfrom sklearn.datasets import make_classificationfrom sklearn.linear_model import LogisticRegression# define datasetX, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, n_classes=3, random_state=1)# define modelmodel = LogisticRegression(multi_class='ovr')# fit modelmodel.fit(X, y)
现在,这个分类器可以为给定实例分配不同类的概率:
# make predictionsyhat = model.predict_proba(X)
每个实例的概率总和为1:
array([[0.16973178, 0.46755188, 0.36271634], [0.58228627, 0.0928127 , 0.32490103], [0.28241256, 0.51175978, 0.20582766], ..., [0.17922774, 0.71300755, 0.10776471], [0.05888508, 0.24924809, 0.69186683], [0.25808835, 0.68599321, 0.05591844]])
我的问题是:在一对多方法中,每个类都训练一个分类器。因此,我们期望每个类的概率是独立于其他类的。概率是如何归一化以使总和为1的?
回答:
如这里所示,多类别处理是通过对实例x在所有类上的得分进行归一化来处理的:实例属于类k的估计概率由以下公式给出
其中f代表决策函数,K代表类的数量。