K近邻分类算法

25 阅读2分钟

K近邻(K-Nearest Neighbors)算法是一种基于实例的学习(instance-based learning)算法,主要用于分类和回归。这个算法的核心思想是:在数据集中,如果一个样本的最相似的K个样本中,大多数样本属于某一类别,则该样本也属于这个类别。

算法流程

  1. 确定样本的距离度量方式
  2. 给定测试样本,计算它与每一个样本之间的距离
  3. 对距离进行排序,选出距离最近的K个样本
  4. 统计K个样本中出现次数最多的类别,作为测试样本的类别
  5. 返回测试样本的类别

算法优点和缺点

K近邻算法的优点:

  1. 简单,易于理解和实现
  2. 对于数据的分布不作要求,不需要先验知识
  3. 可以适用于多分类、回归等问题
  4. 对缺失数据不敏感

K近邻算法的缺点:

  1. 对于特征空间维度很大的数据集,K近邻的效果容易受到影响
  2. 对于样本不平衡的数据集来说,K近邻算法有很大的缺陷。因为在 K 个近邻样本中,多数类别的样本数可能占到绝大多数,从而影响了算法结果的准确性。
  3. 当样本分布不均匀时,对新样本的分类结果较为敏感
  4. 需要大量的空间存储所有的样本数据

示例代码

下面我们用sklearn库中的KNeighborsClassifier类来实现K近邻算法的分类。

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据
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.3)

# 使用K近邻算法进行分类
knn = KNeighborsClassifier(n_neighbors=3)  # 选择K=3来作为例子
knn.fit(X_train, y_train)

# 预测
y_pred = knn.predict(X_test)

# 准确率评估
print("Accuracy:", accuracy_score(y_test, y_pred))

输出的准确率为:

Accuracy: 0.9777777777777777

以上是K近邻分类算法的一个简单例子。可以看到,使用sklearn库非常方便地实现了这个算法,同时准确率也非常高。

总结:

K近邻算法是一种简单易懂的基于实例的学习算法,不需要先验知识,可以适用于多分类、回归等问题。然而,在实际应用中,由于对维度较高的数据集、样本不平衡、空间存储等方面的限制,这个算法的效果可能会受到一定的影响。在实现上,使用sklearn库中的KNeighborsClassifier类可以非常方便地实现这个算法的分类。