鸢尾花数据集的K最近邻分类器决策边界分析

在机器学习领域,鸢尾花数据集是一个经典的多类分类问题。本文将通过Python代码演示如何在这个数据集上使用K最近邻(KNN)分类器,并探讨参数权重对决策边界的影响。

数据加载与准备

首先,需要加载鸢尾花数据集,并将其分为训练集和测试集。这里使用Python的sklearn库来完成这一步骤。

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载鸢尾花数据集 iris = load_iris(as_frame=True) # 提取特征和标签 X = iris.data[["sepal length (cm)", "sepal width (cm)"]] y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)

在上述代码中,首先导入了必要的库,然后加载了鸢尾花数据集。接着,从数据集中提取了萼片长度和宽度作为特征,并使用train_test_split函数将数据划分为训练集和测试集。

K最近邻分类器的构建与训练

接下来,将构建一个K最近邻分类器。在这个例子中,考虑一个包含11个数据点的邻域。由于KNN模型使用欧几里得距离来寻找最近邻,因此在训练模型之前对数据进行标准化是非常重要的。

from sklearn.neighbors import KNeighborsClassifier from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler # 创建一个Pipeline,包括数据标准化和KNN分类器 clf = Pipeline(steps=[ ("scaler", StandardScaler()), ("knn", KNeighborsClassifier(n_neighbors=11)) ])

在上述代码中,首先导入了KNeighborsClassifier、Pipeline和StandardScaler类。然后,创建了一个Pipeline对象,它将数据标准化和KNN分类器串联起来。

决策边界的可视化

现在,将使用不同的权重参数来拟合两个分类器,并绘制它们的决策边界以及原始数据集,以观察差异。

import matplotlib.pyplot as plt from sklearn.inspection import DecisionBoundaryDisplay # 创建两个子图 _, axs = plt.subplots(ncols=2, figsize=(12, 5)) # 遍历不同的权重参数 for ax, weights in zip(axs, ("uniform", "distance")): clf.set_params(knn__weights=weights) clf.fit(X_train, y_train) disp = DecisionBoundaryDisplay.from_estimator( clf, X_test, response_method="predict", plot_method="pcolormesh", xlabel=iris.feature_names[0], ylabel=iris.feature_names[1], shading="auto", alpha=0.5, ax=ax, ) scatter = disp.ax_.scatter(X.iloc[:, 0], X.iloc[:, 1], c=y, edgecolors="k") disp.ax_.legend(scatter.legend_elements()[0], iris.target_names, loc="lower left", title="Classes") _ = disp.ax_.set_title(f"3-Class classification\n(k={clf[-1].n_neighbors}, weights={weights!r})") plt.show()

在上述代码中,首先导入了matplotlib.pyplot和sklearn.inspection.DecisionBoundaryDisplay。然后,创建了两个子图,并遍历了两种不同的权重参数("uniform"和"distance")。对于每种权重参数,都设置了分类器的参数,拟合了训练数据,并使用DecisionBoundaryDisplay.from_estimator函数绘制了决策边界。

通过观察,发现参数权重对决策边界有影响。当权重设置为"uniform"时,所有最近邻对决策的影响是相同的。而当权重设置为"distance"时,每个邻居的权重与它到查询点的距离成反比。在某些情况下,考虑距离可能会提高模型的性能。

  • 最近邻回归
  • 比较有无邻域成分分析的最近邻
  • 缓存最近邻
  • 鸢尾花数据集上训练的决策树的决策面绘制
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485