逻辑回归与一对多分类器

机器学习中,逻辑回归是一种广泛使用的二分类算法。然而,当面对多类分类问题时,需要对逻辑回归进行扩展。一对多(One-vs-Rest,OvR)是一种常见的策略,它将多类分类问题转化为多个二分类问题。每个分类器将一个类别与所有其他类别区分开来。本文将介绍如何使用Python中的逻辑回归模型实现一对多分类,并展示其分类效果。

首先,需要生成一个包含三个类别的数据集。这可以通过使用scikit-learn库中的make_blobs函数来实现。然后,将使用逻辑回归模型对数据进行训练,并使用一对多分类器来处理多类分类问题。

from sklearn.datasets import make_blobs from sklearn.linear_model import LogisticRegression from sklearn.multiclass import OneVsRestClassifier import matplotlib.pyplot as plt import numpy as np # 生成数据集 centers = [[-5, 0], [0, 1.5], [5, -1]] X, y = make_blobs(n_samples=1000, centers=centers, random_state=40) # 数据转换 transformation = [[0.4, 0.2], [-0.4, 1.2]] X = np.dot(X, transformation)

接下来,将使用逻辑回归模型对数据进行训练。对于一对多分类,将使用OneVsRestClassifier包装器来包装逻辑回归模型。将分别展示使用多项式(multinomial)和一对多(ovr)两种策略的训练效果。

for multi_class in ("multinomial", "ovr"): clf = LogisticRegression(solver="sag", max_iter=100, random_state=42) if multi_class == "ovr": clf = OneVsRestClassifier(clf) clf.fit(X, y) print("训练得分: %.3f (%s)" % (clf.score(X, y), multi_class))

通过上述代码,可以看到使用多项式策略和一对多策略的训练得分。接下来,将使用matplotlib库来可视化分类效果。将绘制决策边界,并展示训练数据点。

_, ax = plt.subplots() DecisionBoundaryDisplay.from_estimator(clf, X, response_method="predict", cmap=plt.cm.Paired, ax=ax) plt.title("逻辑回归决策边界 (%s)" % multi_class) plt.axis("tight") # 绘制训练数据点 colors = "bry" for i, color in zip(clf.classes_, colors): idx = np.where(y == i) plt.scatter(X[idx, 0], X[idx, 1], c=color, edgecolor="black", s=20) # 绘制一对多分类器的决策边界 xmin, xmax = plt.xlim() ymin, ymax = plt.ylim() if multi_class == "ovr": coef = np.concatenate([est.coef_ for est in clf.estimators_]) intercept = np.concatenate([est.intercept_ for est in clf.estimators_]) else: coef = clf.coef_ intercept = clf.intercept_ def plot_hyperplane(c, color): def line(x0): return (-(x0 * coef[c, 0]) - intercept[c]) / coef[c, 1] plt.plot([xmin, xmax], [line(xmin), line(xmax)], ls="--", color=color) for i, color in zip(clf.classes_, colors): plot_hyperplane(i, color) plt.show()

通过上述代码,可以清晰地看到逻辑回归模型在一对多分类任务中的决策边界。每个类别的决策边界由虚线表示,而训练数据点则用不同的颜色表示。这种可视化方式有助于直观地理解模型的分类效果。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485