📅  最后修改于: 2023-12-03 15:17:11.248000             🧑  作者: Mango
K最近邻居(K-Nearest Neighbors,简称KNN)是一种基本的分类与回归算法,它是通过在所有数据中寻找与新数据最相似的K个数据(最近邻居),然后将新数据归为相同类别或回归预测的方法。KNN的思想简单,易于理解和实现,而且对于许多实际问题,KNN的性能往往可以与更复杂的算法相媲美。
根据给定的距离度量,计算测试数据与各个训练数据之间的距离;
对于距离值进行排序;
选取距离最小的K个点;
确定K个点中,出现次数最多的类别;
当K=1时,算法称为最近邻算法。
import numpy as np
from collections import Counter
X_train = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
y_train = ['A', 'A', 'B', 'B']
使用欧氏距离来计算样本间的距离
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2)**2))
class KNN:
def __init__(self, k=3):
self.k = k
def predict(self, X_test, X_train, y_train):
y_pred = []
for x_test in X_test:
# 计算测试数据与所有训练数据之间的距离
distances = [euclidean_distance(x_test, x_train) for x_train in X_train]
# 对所有距离值进行排序
nearest_indices = np.argsort(distances)[:self.k]
# 选取距离最小的k个点
k_nearest_labels = [y_train[i] for i in nearest_indices]
# 确定k个点中,出现次数最多的类别
most_common = Counter(k_nearest_labels).most_common(1)
y_pred.append(most_common[0][0])
return y_pred
用构建的数据集进行预测
X_test = np.array([[1.1, 1.4], [0.1, 0.5], [1.2, 1.9], [0.3, 0.1]])
knn = KNN(k=3)
predictions = knn.predict(X_test, X_train, y_train)
print(predictions)
输出:
['A', 'B', 'A', 'B']
以上就是K最近邻居的Python实现,希望能帮助到你。