首页 > 试题广场 >

k近邻算法

[编程题]k近邻算法
  • 热度指数:597 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一组训练数据,使用k近邻算法实现分类模型。
你的任务是编写一个函数,接受特征矩阵和目标值、测试样本、以及k值,并返回测试样本的预测分类。

输入描述:
- 第一行:m, n,以空格分隔的整数。
- 接下来m行:X: 特征矩阵,形状为 (m, n),其中m是样本数量,n是特征数量。以空格分隔的浮点数。
- 接下来一行:y: 目标值,形状为 (m, 1),其中m是样本数量。以空格分隔的整数。
- 接下来一行:test_sample: 测试样本,形状为 (n, 1),其中n是特征数量。以空格分隔的浮点数。
- 接下来一行:k: 近邻数量,整数。


输出描述:
- 输出一个整数,表示测试样本的预测分类。
示例1

输入

10 9
0.76 0.58 0.77 0.6 0.75 0.7 0.69 0.11 0.43
0.14 0.85 0.53 0.24 0.12 0.4 0.39 0.15 0.36
0.64 0.43 0.51 0.84 0.64 0.18 0.22 0.1 0.29
0.07 0.37 0.62 0.94 0.6 0.39 0.87 0.51 0.68
0.44 0.99 0.26 0.63 0.28 0.66 0.27 0.06 0.39
0.13 0.63 0.43 0.63 0.76 0.7 0.69 0.15 0.54
0.14 0.11 0.97 0.15 0.52 0.3 0.08 0.23 0.14
0.1 0.94 0.34 0.04 0.79 0.51 0.5 0.13 0.93
0.68 0.5 0.5 0.75 0.43 0.61 0.39 0.48 0.58
0.69 0.68 0.7 0.75 0.38 0.75 0.98 0.93 0.79
2 8 3 8 7 8 8 2 1 6
0.03 0.49 0.13 0.44 0.64 0.67 0.22 0.33 0.83
4

输出

4

备注:
支持numpy,scipy,scikit-learn,pandas库
题解用的邻居label的均值而非众数,题解有问题应该是
发表于 2025-09-10 17:45:41 回复(0)
这题样例和题解都有问题吗,最邻近可以用分类标签的均值计算?
发表于 2025-09-17 12:10:00 回复(0)
这示例看起来有问题,样本分类根本就没有4,但其预测输出竟然是4
2 8 3 8 7 8 8 2 1 6

发表于 2025-09-11 08:54:44 回复(0)
这题解是不是有问题?
发表于 2025-09-04 08:32:17 回复(1)
程序直接掉包第二个测试会出问题,需要手搓原理代码
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
def k_nearest_neighbors(X, y, test_sample, k):
    x_ = np.array(X)
    y_ = np.array(y)
    model = KNeighborsClassifier(n_neighbors = k)
    model.fit(x_, y_)
    test_sample = np.array(test_sample).reshape(1, -1)
    species = int(model.predict(test_sample))
    return species
    pass

if __name__ == "__main__":
    m, n = map(int, input().split())
    X = np.array([list(map(float, input().split())) for _ in range(m)])
    y = np.array(list(map(int, input().split())))
    test_sample = np.array(list(map(float, input().split())))
    k = int(input())
    print(k_nearest_neighbors(X, y, test_sample, k))

发表于 2025-06-13 16:43:31 回复(0)
这是多数投票???
发表于 2025-05-07 16:38:16 回复(1)