Appearance
第7章:K-近邻(KNN)
K-近邻(K-Nearest Neighbors,KNN)算法是一种基于实例的学习方法,它根据样本的特征值来预测类别。本章将详细介绍KNN的原理、应用场景以及如何使用Scikit-Learn实现KNN模型。
7.1 KNN原理
7.1.1 距离度量
KNN算法的核心在于距离度量,它通过计算样本之间的距离来确定最近的邻居。
7.1.2 K值的选择
K值的选择对KNN算法的性能有重要影响,较小的K值可能会使模型对噪声敏感,而较大的K值可能导致模型过于平滑。
7.1.3 权重和投票
在KNN中,可以根据邻居的距离赋予不同的权重,或者简单地进行多数投票来确定最终的分类结果。
7.2 KNN应用
7.2.1 分类问题
KNN可以用于分类问题,尤其是在数据集较小或特征空间不是线性可分时。
7.2.2 回归问题
KNN也可以用于回归问题,通过取最近邻样本的平均值来预测目标变量。
7.2.3 数据可视化
KNN常用于数据可视化,尤其是在低维空间中,可以直观地展示数据的分布情况。
7.3 KNN代码实现
7.3.1 数据准备
我们将使用Scikit-Learn的鸢尾花数据集来演示KNN的实现。
python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)7.3.2 模型训练
使用Scikit-Learn的KNeighborsClassifier类来训练KNN模型。
python
from sklearn.neighbors import KNeighborsClassifier
# 创建KNN分类器实例
knn_classifier = KNeighborsClassifier(n_neighbors=5)
# 训练模型
knn_classifier.fit(X_train, y_train)7.3.3 模型评估
评估模型在测试集上的性能。
python
from sklearn.metrics import accuracy_score
# 在测试集上进行预测
y_pred = knn_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")7.3.4 可视化决策边界
由于KNN的决策边界较为复杂,通常不易于可视化。但在二维空间中,我们可以尝试展示。
python
import matplotlib.pyplot as plt
import numpy as np
# 创建网格来评估模型
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
# 预测整个网格的分类结果
Z = knn_classifier.predict(np.c_[xx.ravel(), yy.ravel()])
# 将结果放入颜色图中
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k', s=20)
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("KNN Decision Boundary")
plt.show()7.4 本章小结
本章介绍了K-近邻算法的基本原理、应用场景,并使用Scikit-Learn实现了一个简单的KNN模型。通过数据准备、模型训练、评估和可视化,我们可以看到KNN在分类问题中的有效性。理解KNN的工作原理和代码实现对于深入学习基于实例的学习方法至关重要。
