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

Matlab中knnsearch的k值设置及分类结果异常问题

问题解答

关于knnsearch的默认k值

是的,Matlab中的knnsearch函数默认k值为1,未指定'K'参数时,仅返回每个查询点最近的1个邻居索引。

修改k=5后无分类结果的解决方法

修改后失效的核心原因是:当k=5时,knnsearch返回的result是1×5的索引数组,而非单个数值,原有的if-else判断逻辑仅适用于单值场景,无法匹配数组输入。

具体修复步骤如下:

  1. 为训练样本添加类别标签
    先给每组训练数据分配对应标签,方便后续投票统计:
    % 给80个训练样本分配类别标签
    training_labels = zeros(80,1);
    training_labels(1:20) = 1;    % Raw对应标签1
    training_labels(21:40) = 2;   % Undercook对应标签2
    training_labels(41:60) = 3;   % Cook对应标签3
    training_labels(61:80) = 4;   % Rotten对应标签4
    
  2. 基于k个邻居的标签做投票
    提取k个邻居的标签,统计出现次数最多的标签作为最终分类结果:
    k = 5;
    result = knnsearch(training,Z,'K',k); 
    % 获取k个邻居对应的类别标签
    neighbor_labels = training_labels(result);
    % 统计出现频率最高的标签
    [~,most_freq_label] = mode(neighbor_labels);
    
  3. 根据投票结果更新显示
    将原有的单值判断逻辑改为基于投票标签的分支:
    switch most_freq_label
        case 1
            set(handles.EditBox,'string','Raw');
        case 2
            set(handles.EditBox,'string','Undercook');
        case 3
            set(handles.EditBox,'string','Cook');
        case 4
            set(handles.EditBox,'string','Rotten');
    end
    

额外优化:原代码中training变量的拼接可以简化为training = training1(:,1:24);,无需逐个列手动拼接,代码更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:28:13