一般情况下解决多分类问题有如下两种方式:
1)OvR (One vs Rest)
每次将某个与剩下的所有的分类,n个类别进行n次分类,选择分类得分最高的。
2). OvO (One vs One)
两两组合,比如四个类别有六个组,选择赢数最高的分类。
以下是sklearn中的使用(默认是OVR):
from sklearn.linear_model import LogisticRegression
# 只使用前两种feature,方便可视化
X = iris.data[:,:2]
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y)
scikit_LR = LogisticRegression()
# 默认multi_class='ovr',即OVR
scikit_LR.fit(X_train, y_train)
scikit_LR.score(X_test, y_test)
修改为OVO:
修改 multi_class='multinomial';需要注意的是,solver也需要改变,
scikit_learn不仅仅使用梯度下降法,默认是使用liblinear的,但是对于OVO是无效的。
scikit_LR2 = LogisticRegression(multi_class='multinomial', solver='newton-cg')
scikit_LR2.fit(X_train, y_train)
scikit_LR2.score(X_test, y_test)
网友评论