逻辑回归模型笔记整理5 - 实战 逻辑回归算法实现多分类预测

13. 使用逻辑回归进行多分类(with codes)

逻辑回归也可以进行多分类任务。

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# n_clusters_per_class 每个类别生成的簇的数量。
X, y = make_classification(n_samples=200, n_features=2, n_informative=2, n_redundant=0, 
        n_classes=3, random_state=0, n_clusters_per_class=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
# lr = LogisticRegression()
# lr = LogisticRegression(multi_class="ovr")
# 多分类任务可以使用"ovr"(一对其他)与multinomial(多项式)来进行处理。
# 如果使用多项式进行处理,则solver(解决方案)不能使用默认的liblinear。
lr = LogisticRegression(multi_class="multinomial", solver="lbfgs")
lr.fit(X_train, y_train)
# 在多分类时,默认使用的方式为ovr,通过多个二分类的组合,实现多分类的任务。
# 在多分类情况下,模型的权重与偏置分为n组(内部为维护n个二分类的模型),其中n为分类的数量。
print(f"模型权重:{lr.coef_}")
print(f"模型偏置:{lr.intercept_}")
y_hat = lr.predict(X_test)
print(f"分类正确率:{lr.score(X_test, y_test):.3f}")
print(lr.predict_proba(X_test[:5]))

逻辑回归模型笔记整理5 - 实战 逻辑回归算法实现多分类预测_第1张图片

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False


cmap = ListedColormap(["r", "g", "b"])
marker = ["o", "v", "x"]

x1_min, x2_min = np.min(X_test, axis=0)
x1_max, x2_max = np.max(X_test, axis=0)
x1 = np.linspace(x1_min - 1, x1_max + 1, 100)
x2 = np.linspace(x2_min - 1, x2_max + 1, 100)
X1, X2 = np.meshgrid(x1, x2)
Z = lr.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape)
plt.contourf(X1, X2, Z, cmap=cmap, alpha=0.5)
for i, class_ in enumerate(np.unique(y_test)):
    plt.scatter(x=X_test[y_test == class_, 0], y=X_test[y_test == class_, 1], 
            c=cmap(i), label=class_, marker=marker[i])
plt.legend()
plt.show()

逻辑回归模型笔记整理5 - 实战 逻辑回归算法实现多分类预测_第2张图片

你可能感兴趣的:(#,AI算法=建模1_基础=)