在机器学习领域,支持向量机(SGD)是一种广泛使用的线性分类器。它通过最小化损失函数来寻找最优的决策边界。本文将介绍如何使用Python中的SGD分类器在著名的鸢尾花(Iris)数据集上绘制多类决策边界。鸢尾花数据集包含150个样本,每个样本有4个特征,分为3个类别。
首先,需要导入必要的库。matplotlib用于绘图,numpy用于数学运算,sklearn提供了机器学习算法和数据集。还将使用DecisionBoundaryDisplay来显示决策边界。
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 = 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
现在,创建一个SGD分类器实例,并使用训练数据对其进行训练。将学习率设置为0.001,迭代次数设置为100。
clf = SGDClassifier(alpha=0.001, max_iter=100)
clf.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")
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")
plt.legend()
plt.show()
最后,还绘制了三个一对一(OVA)分类器的超平面,以虚线表示。这些超平面对应于每个类别与其他类别之间的决策边界。
通过上述步骤,成功地在鸢尾花数据集上绘制了多类SGD的决策边界。这个过程不仅展示了SGD分类器在多类分类问题中的应用,还提供了一个直观的方式来理解模型是如何在特征空间中划分不同类别的。
本示例的代码可以在Jupyter notebook或Python源代码文件中找到。此外,还有许多其他相关的示例,如多项式和一对一逻辑回归的决策边界,决策树的决策边界,以及投票分类器的决策边界等。这些示例都可以帮助更深入地理解机器学习模型的工作原理。