引言
K近邻(K-Nearest Neighbors,KNN)算法是一种简单的监督学习算法,它通过寻找训练数据集中与测试样本最近的K个邻居,并基于这些邻居的标签来预测测试样本的标签。KNN算法因其简单易懂和易于实现而被广泛应用于分类和回归任务中。本文将从零开始,详细解析KNN模型的构建过程,并通过实战代码进行演示。
KNN算法原理
KNN算法的核心思想是:相似性越高的样本应该被归类到同一个类别。具体来说,对于一个新的样本,KNN算法会计算它与训练集中所有样本的距离,然后选择距离最近的K个样本,根据这K个样本的标签来确定新样本的标签。
距离的计算方法有多种,常见的有欧氏距离、曼哈顿距离等。本文以欧氏距离为例进行说明。
欧氏距离
欧氏距离是衡量两点之间距离的一种方法,其公式如下:
[ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2 + \ldots + (z_2 - z_1)^2} ]
其中,( (x_1, y_1, \ldots, z_1) ) 和 ( (x_2, y_2, \ldots, z_2) ) 分别是两个点的坐标。
KNN算法步骤
- 选择合适的K值。
- 计算测试样本与训练集中所有样本的距离。
- 选择距离最近的K个样本。
- 根据这K个样本的标签,通过投票或取平均值等方式确定测试样本的标签。
实战代码解析
下面将通过Python代码实现KNN算法,并对关键部分进行详细解析。
import numpy as np
from collections import Counter
def euclidean_distance(x1, x2):
"""计算欧氏距离"""
return np.sqrt(np.sum((x1 - x2) ** 2))
def knn_predict(X_train, y_train, x_test, k):
"""KNN预测函数"""
# 计算测试样本与训练集中所有样本的距离
distances = [euclidean_distance(x_test, x) for x in X_train]
# 选择距离最近的K个样本
k_nearest = np.argsort(distances)[:k]
# 计算这K个样本的标签
k_nearest_labels = [y_train[i] for i in k_nearest]
# 通过投票或取平均值等方式确定测试样本的标签
most_common = Counter(k_nearest_labels).most_common(1)[0][0]
return most_common
代码解析
euclidean_distance函数用于计算两个样本之间的欧氏距离。knn_predict函数是KNN算法的核心,它接受训练集的特征和标签、测试样本以及K值作为输入,并返回预测的标签。- 在
knn_predict函数中,首先计算测试样本与训练集中所有样本的距离,然后根据距离选择距离最近的K个样本。 - 接着,计算这K个样本的标签,并使用
Counter类对标签进行统计,最后返回出现次数最多的标签作为预测结果。
总结
本文详细解析了KNN模型的构建过程,并通过实战代码进行演示。通过学习本文,读者可以掌握KNN算法的原理和实现方法,为后续在机器学习领域的应用打下基础。
