用python实现knn_classifier函数
时间: 2023-05-30 13:08:06 浏览: 120
以下是一个基本的KNN分类器函数的Python实现:
```python
import numpy as np
def knn_classifier(train_data, train_labels, test_data, k):
"""
KNN分类器函数
:param train_data: 训练数据矩阵,每行为一个样本
:param train_labels: 训练标签列表,与训练数据矩阵行对应
:param test_data: 测试数据矩阵,每行为一个样本
:param k: K值,即选取最近邻的个数
:return: 测试样本的预测标签列表
"""
# 计算训练数据和测试数据之间的距离矩阵
dists = np.sqrt(np.sum(np.square(train_data[:, np.newaxis, :] - test_data), axis=2))
# 对距离矩阵的每一行进行排序,并返回排序后的索引
sorted_indices = np.argsort(dists, axis=0)
# 对于每个测试样本,选取距离最近的K个训练样本
k_nearest_labels = train_labels[sorted_indices[:k, :]]
# 对K个最近邻的标签进行投票,返回票数最多的标签作为预测结果
pred_labels = np.argmax(np.bincount(k_nearest_labels, axis=0))
return pred_labels
```
该函数接受四个参数:
- `train_data`:训练数据矩阵,每行为一个训练样本,每列为一个特征。
- `train_labels`:训练标签列表,与训练数据矩阵行对应。
- `test_data`:测试数据矩阵,每行为一个测试样本,每列为一个特征。
- `k`:K值,即选取最近邻的个数。
该函数首先计算训练数据和测试数据之间的距离矩阵,然后对距离矩阵的每一行进行排序,并返回排序后的索引。对于每个测试样本,选取距离最近的K个训练样本,并对K个最近邻的标签进行投票,返回票数最多的标签作为预测结果。
阅读全文