WKNN分类

说明和使用方法

  1. trainData:包含特征和标签的训练数据集,标签应位于最后一列。
  2. testData:要分类的测试数据集,只包含特征。
  3. kValues:数组,指定每个WKNN模型使用的k值。
  4. featuresSets:一个单元数组,每个元素包含一个整数数组,指定每个模型使用的特征索引。
  5. (新手,代码仅供参考)
function label = multipleWKNN(trainData, testData, kValues, featuresSets)
    % trainData: 训练数据,其中包含特征和标签
    % testData: 测试数据特征
    % kValues: 每个模型使用的k值数组
    % featuresSets: 使用的特征子集索引数组

    numModels = length(kValues);
    numTests = size(testData, 1);
    votes = zeros(numTests, max(trainData(:, end))); % 假设标签是1到max的整数
    
    % 对每个模型进行循环
    for m = 1:numModels
        k = kValues(m);
        features = featuresSets{m};
        
        % 调用WKNN函数获取结果
        modelLabels = WKNN(trainData(:, [features end]), testData(:, features), k);
        
        % 累计投票
        for i = 1:numTests
            votes(i, modelLabels(i)) = votes(i, modelLabels(i)) + 1;
        end
    end
    
    % 确定最终标签
    [~, label] = max(votes, [], 2);
end

function label = WKNN(trainData, testData, k)
    % 一个简单的加权KNN实现
    trainFeatures = trainData(:, 1:end-1);
    trainLabels = trainData(:, end);
    numTests = size(testData, 1);
    label = zeros(numTests, 1);
    
    for i = 1:numTests
        distances = sqrt(sum((trainFeatures - testData(i, :)).^2, 2));
        [~, sortedIndices] = sort(distances);
        nearestNeighbors = trainLabels(sortedIndices(1:k));
        weights = 1 ./ distances(sortedIndices(1:k)); % 权重为距离的倒数
        
        % 加权投票
        weightedVotes = accumarray(nearestNeighbors, weights, [max(trainLabels) 1], [], 0);
        [~, label(i)] = max(weightedVotes);
    end
end

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰の不妙冒险

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值