科普文章:机器学习实战中的K近邻算法及实现
K近邻算法是一种常用的机器学习算法,它基于实例的学习(Instance-Based Learning)方法,可以用于分类和回归任务。本文将介绍K近邻算法的基本原理,并使用Python编写代码示例来实现一个简单的K近邻分类器。
K近邻算法原理
K近邻算法的基本思想是:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
K近邻算法的实现步骤如下:
- 计算已知类别数据集中的每个样本点与当前点之间的距离;
- 按照距离递增次序排序;
- 选取与当前点距离最小的K个点;
- 确定前K个点所在类别的出现频率;
- 返回前K个点出现频率最高的类别作为当前点的预测分类。
K近邻分类器实现示例
首先,我们需要导入必要的Python库:
import numpy as np
import operator
接下来,我们定义一个简单的数据集,其中包含4个样本,每个样本有2个特征:
def create_dataset():
group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels
接下来,我们实现K近邻算法的分类函数:
def classify(inX, dataset, labels, k):
# 计算距离
distances = np.sum((dataset - inX) ** 2, axis=1) ** 0.5
# 按距离排序
sortedDistIndices = np.argsort(distances)
classCount = {}
# 选择距离最小的K个点
for i in range(k):
voteLabel = labels[sortedDistIndices[i]]
classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
# 返回出现频率最高的类别
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
最后,我们可以使用上述代码对一个新样本进行分类:
group, labels = create_dataset()
result = classify([0, 0], group, labels, 3)
print(result) # 输出为'B'
这里,我们使用一个K为3的K近邻分类器对新样本[0, 0]进行分类,结果为'B'。
总结
K近邻算法是一种简单而有效的机器学习算法,它可以用于分类和回归任务。本文通过代码示例介绍了K近邻算法的基本原理和实现步骤。希望读者通过本文的介绍能够对K近邻算法有一个更加深入的理解,并能够在实际应用中灵活运用。