You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python嵌套循环实现最近邻分类器对未知样本红蓝分类

问题分析

你现有代码的核心错误如下:

  • 变量名冲突:循环变量使用了unknown、red、blue和原始数据集名称重名,会覆盖原始数据导致计算错误
  • 最小距离更新逻辑错误:比较最小距离的判断逻辑写在了循环外,且没有赋值操作,每次循环直接覆盖当前距离值,无法取到真正的最小距离
  • 分类判断逻辑位置错误:比较逻辑放在了外层循环外,只会对最后一个未知点做分类,无法批量处理所有未知样本
  • 缺少可直接运行的距离计算实现:如果没有自定义的util模块,需要自行实现欧氏距离计算逻辑

完整实现代码

距离计算函数(可直接替换你现有的util.calculate_distance)

import math

def calculate_distance(point1, point2):
    # 计算二维欧氏距离
    return math.sqrt((point1[0] - point2[0])**2 + (point1[1] - point2[1])**2)

批量分类逻辑

# 数据集定义
unknown = [(0.678713, 0.951598),
           (-1.169512, -0.957855),
           (0.631947, 1.236489),
           (-0.131799, -0.324218),
           (-0.199565, -0.229171),
           (0.900907, 0.448131),
           (0.699395, 0.414314),
           (-1.132646, -1.013298)]

red = [(4.495835, 5.347824),
       (4.847142, 3.975707),
       (3.899234, 4.040381),
       (4.679696, 4.379142),
       (4.036405, 4.594875),
       (4.018261, 4.013737),
       (5.234569, 3.760527),
       (4.984905, 4.239113),
       (7.209045, 2.419611),
       (4.090784, 5.082992)]

blue = [(-1.136909, -0.71508),
        (-0.019995, -0.10857),
        (-0.305477, -0.83567),
        (-0.364433, -0.335014),
        (-0.687055, -0.871415),
        (-0.255737, -0.739738),
        (0.238247, 0.235795),
        (1.906042, 1.712006)]

# 遍历所有未知点完成分类
for unknown_point in unknown:
    min_red_dist = float('inf')
    min_blue_dist = float('inf')
    
    # 计算到所有红类样本的最小距离
    for red_point in red:
        dist = calculate_distance(unknown_point, red_point)
        if dist < min_red_dist:
            min_red_dist = dist
    
    # 计算到所有蓝类样本的最小距离
    for blue_point in blue:
        dist = calculate_distance(unknown_point, blue_point)
        if dist < min_blue_dist:
            min_blue_dist = dist
    
    # 输出分类结果
    if min_red_dist < min_blue_dist:
        print(f"坐标{unknown_point} 分类为:red")
    else:
        print(f"坐标{unknown_point} 分类为:blue")

补充说明

你提供的8个测试样本运行后全部会被分类为blue,因为所有未知点和蓝类样本的距离都远小于和红类样本的距离。如果后续你需要处理20个未知样本,直接把新的样本点追加到unknown列表中即可自动完成批量分类。

内容的提问来源于stack exchange,提问作者Mahbub Abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:48:05