📅  最后修改于: 2023-12-03 15:22:19.781000             🧑  作者: Mango
在机器学习领域,K-最近邻(K-Nearest Neighbor, KNN)算法是一种基本的分类和回归算法。KNN算法可以用于数据挖掘、图像识别、语音识别等领域。在本文中,我们将从头开始使用 Python 实现 KNN 算法,帮助你了解 KNN 算法的原理和实现过程。
KNN算法是一种基于实例的学习算法,它的分类和回归过程都是依据相邻的训练样本而进行的。在分类任务中,KNN算法的原理是:当输入一个新的数据实例时,算法会在训练样本数据集中找到 K 个与该实例最接近的样本数据。然后从这 K 个训练样本中获取分类最多的标签作为该实例的分类标签。如果 K=1,那么该实例的分类标签就是与该实例最接近的训练样本的分类标签。
我们将使用一个包含鸢尾花数据的数据集,该数据集包含4个特征和1个目标变量。首先需要将数据集加载到程序中。下面是使用 Python 加载数据集的实现代码片段:
import csv
def load_dataset(filename):
dataset = []
with open(filename, 'r') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
dataset.append([float(x) for x in row])
return dataset
filename = 'iris.csv'
dataset = load_dataset(filename)
为了消除各特征之间的量纲不同对算法的影响,我们需要对数据进行归一化处理。在这里,我们使用min-max归一化方法,将每个特征的值缩放到0到1之间。下面是数据归一化的实现代码片段:
def normalize_dataset(dataset):
minmax = [[min(column), max(column)] for column in zip(*dataset)]
for row in dataset:
for i in range(len(row)):
row[i] = (row[i] - minmax[i][0]) / (minmax[i][1] - minmax[i][0])
KNN算法的关键步骤是计算数据实例之间的距离。常用的距离度量方法有欧氏距离、曼哈顿距离、切比雪夫距离等,本文使用欧氏距离计算方法。下面是计算距离的实现代码片段:
import math
def euclidean_distance(instance1, instance2):
distance = 0
for i in range(len(instance1)):
distance += (instance1[i] - instance2[i])**2
return math.sqrt(distance)
在计算实例之间距离的基础上,我们可以获取与新实例最接近的 K 个训练样本。下面是获取相邻的样本的实现代码片段:
def get_neighbors(train_set, test_instance, k):
distances = []
for train_instance in train_set:
dist = euclidean_distance(train_instance[:-1], test_instance)
distances.append((train_instance, dist))
distances.sort(key=lambda x: x[1])
neighbors = [x[0] for x in distances[:k]]
return neighbors
获取了最接近的 K 个样本之后,我们需要预测该新实例的分类标签。这个分类标签是与 K 个最接近训练样本中出现最多的标签相同。下面是对新实例分类的实现代码片段:
def predict_classification(train_set, test_instance, k):
neighbors = get_neighbors(train_set, test_instance, k)
labels = [neighbor[-1] for neighbor in neighbors]
return max(set(labels), key=labels.count)
本文介绍了Python实现KNN算法的详细步骤,并且提供了相应代码片段。通过实现KNN算法,你可以更加深入地了解该算法的原理和实现细节。