机器学习中的决策边界可视化

机器学习中,理解模型是如何做出决策的非常重要。决策边界是模型决策空间中的一个分界线,它将不同的类别分开。对于线性模型,这个边界通常是直线或平面。在本文中,将探讨如何使用Python和sklearn库来可视化一个多类SGD(随机梯度下降)分类器的决策边界。

首先,需要导入必要的库和数据集。Iris数据集是一个经典的机器学习数据集,包含了150个样本,每个样本有4个特征,并且分为3个类别。将使用这个数据集中的前两个特征来训练模型,这样可以在二维平面上可视化决策边界。

import matplotlib.pyplot as plt import numpy as np from sklearn import datasets from sklearn.inspection import DecisionBoundaryDisplay from sklearn.linear_model import SGDClassifier

接下来,加载Iris数据集,并只取前两个特征。然后,将数据随机打乱,并标准化特征值,以确保模型不会因为特征的量纲不同而产生偏差。

iris = datasets.load_iris() X = iris.data[:, :2] y = iris.target colors = "bry" idx = np.arange(X.shape[0]) np.random.seed(13) np.random.shuffle(idx) X = X[idx] y = y[idx] mean = X.mean(axis=0) std = X.std(axis=0) X = (X - mean) / std clf = SGDClassifier(alpha=0.001, max_iter=100).fit(X, y)

现在,有了训练好的模型,可以绘制决策边界。将使用DecisionBoundaryDisplay类来帮助绘制。这个类可以自动为找到决策边界,并将其绘制在图上。

ax = plt.gca() DecisionBoundaryDisplay.from_estimator(clf, X, cmap=plt.cm.Paired, ax=ax, response_method="predict", xlabel=iris.feature_names[0], ylabel=iris.feature_names[1]) plt.axis("tight")

除了绘制决策边界,还可以绘制训练点,以查看它们是如何被分类的。将使用scatter函数来绘制这些点,并为每个类别指定不同的颜色。

for i, color in zip(clf.classes_, colors): idx = np.where(y == i) plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i], edgecolor="black", s=20) plt.title("多类SGD的决策面") plt.axis("tight")

最后,还可以绘制三个一对一(one-vs-all)分类器的超平面。这些超平面将显示每个类别与其他类别的分界线。

xmin, xmax = plt.xlim() ymin, ymax = plt.ylim() 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.legend() plt.show()

通过上述代码,可以清晰地看到多类SGD分类器Iris数据集上的决策边界。这些边界将不同的类别分开,并且每个类别的训练点都被正确地分类。这种可视化方法对于理解模型的决策过程非常有帮助。

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