k近邻算法在k值为1时的python代码
时间: 2023-12-21 12:07:31 浏览: 26
下面是k近邻算法在k值为1时的Python代码,假设有一个训练集train_set和一个测试样本test_sample:
```python
import numpy as np
# 计算两个向量之间的欧几里得距离
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2)**2))
class KNN:
def __init__(self, k=1):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = [self._predict(x) for x in X]
return np.array(y_pred)
def _predict(self, x):
# 计算测试样本与所有训练集样本的距离
distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
# 找到距离最近的k个样本的标签
k_indices = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_indices]
# 统计k个样本中出现次数最多的标签
most_common = np.argmax(np.bincount(k_nearest_labels))
return most_common
```
在代码中,先定义了一个计算两个向量之间欧几里得距离的函数euclidean_distance。然后定义了一个KNN类,其中初始化函数__init__中传入参数k表示选择最近的k个样本。fit函数用于训练模型,传入训练集X和标签y。predict函数用于预测测试样本X的标签,_predict函数用于预测一个测试样本的标签。在_predict函数中,先计算测试样本与所有训练集样本的距离,然后找到距离最近的k个样本的标签,最后统计k个样本中出现次数最多的标签作为预测结果。