KNN(K-Nearest Neighbors)算法是一种基于实例的无参数监督学习方法,它的核心思想是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法广泛应用于分类和回归领域,是机器学习中最简单有效的算法之一。
KNN算法原理
KNN算法的基本思路是:
-
计算待分类样本与各个训练样本之间的距离
选取与待分类样本距离最近的k个训练样本
根据这k个训练样本的类别,采用多数表决等方式确定待分类样本的类别
KNN算法的核心在于如何度量样本之间的相似度或距离。常用的距离度量方法有:
欧氏距离:$d(x,y) = \sqrt{\sum_{i=1}^n (x_i-y_i)^2}$
曼哈顿距离:$d(x,y) = \sum_{i=1}^n |x_i-y_i|$ 明可夫斯基距离:$d(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}$ 切比雪夫距离:$d(x,y) = \max_{1\leq i \leq n} |x_i-y_i|$KNN算法Python实现
下面是一个简单的KNN算法Python实现:
import numpy as np
from collections import Counter
def knn_classify(X_train, y_train, X_test, k):
"""
KNN分类器
参数:
X_train (ndarray): 训练集特征
y_train (ndarray): 训练集标签
X_test (ndarray): 测试集特征
k (int): 近邻数量
返回:
y_pred (ndarray): 预测标签
"""
distances = []
for x in X_train:
# 计算测试样本与训练样本的欧氏距离
dist = np.linalg.norm(X_test - x, axis=1)
distances.append(dist)
distances = np.array(distances).T
# 对距离进行排序,得到最近的k个训练样本索引
k_idx = np.argsort(distances)[:, :k]
# 根据k个近邻的标签进行投票
y_pred = [Counter(y_train[idx]).most_common(1)[0][0] for idx in k_idx]
return np.array(y_pred)
KNN算法应用场景
KNN算法由于其简单易实现、计算开销小等特点,广泛应用于以下场景:
分类问题:如手写数字识别、垃圾邮件分类、肿瘤诊断等
推荐系统:基于用户或物品的相似度进行推荐 异常检测:通过识别与大多数样本不同的异常样本 数据压缩:利用近邻样本的特征来表示当前样本 回归问题:如房价预测、销量预测等总之,KNN算法是一种简单有效的机器学习算法,在分类、推荐、异常检测等领域都有广泛应用。希望通过本文的介绍,您能够更好地理解和应用KNN算法。感谢您的阅读!