机器学习-KNN

2024-10-01  本文已影响0人  阿凡提说AI

KNN 算法详解

KNN (K-Nearest Neighbors) 算法是一种简单、非参数化的监督学习算法,用于分类和回归。它基于一种直观的思想: 一个样本的类别或值应该与其最近的 K 个邻居相似。

1. 原理

KNN 算法的原理非常简单:

2. 算法流程

  1. 计算距离: 计算新样本与训练集中所有样本的距离。常用的距离度量方式包括欧式距离、曼哈顿距离、余弦距离等。
  2. 选择最近邻: 选择与新样本距离最近的 K 个样本,作为新样本的 K 个最近邻。
  3. 预测类别/值:
    • 分类: 根据 K 个最近邻的类别,使用投票机制来预测新样本的类别。例如,如果 K=3,且这 3 个最近邻中,有两个属于类别 A,一个属于类别 B,那么就预测新样本属于类别 A。
    • 回归: 根据 K 个最近邻的值,使用平均值或加权平均值来预测新样本的值。

3. 关键参数

4. 优缺点

优点:

缺点:

5. 应用场景

KNN 算法在各种应用场景中都有广泛的应用,例如:

6. 代码实现

以下是 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 算法进行预测
  """
  y_pred = []
  for test_point in X_test:
    distances = [euclidean_distance(test_point, train_point) for train_point in X_train]
    k_nearest_indices = np.argsort(distances)[:k]
    k_nearest_labels = [y_train[i] for i in k_nearest_indices]
    # 使用投票机制预测类别
    pred_label = Counter(k_nearest_labels).most_common(1)[0][0]
    y_pred.append(pred_label)
  return np.array(y_pred)

# 示例数据
X_train = np.array([[1, 2], [3, 4], [5, 6]])
y_train = np.array([0, 1, 0])
X_test = np.array([[2, 3]])
k = 2

# 进行预测
y_pred = knn_predict(X_train, y_train, X_test, k)

print(y_pred)  # 输出:[0]

总结

KNN 算法是一种简单、易于理解和实现的算法,适合用于处理各种类型的数据。它具有非参数化、无需训练、可解释性强等优点,但也存在对数据维度敏感、容易受到噪声数据影响等缺点。在实际应用中,需要根据数据的具体情况选择合适的参数和距离度量方式,并结合其他算法来解决 KNN 算法的局限性。

上一篇下一篇

猜你喜欢

热点阅读