K-NNMC

K-NNMC[1]

K-NNMC简介

K-NNMC模型(k-Nearest Neighbor Mean Classifier)是P. ViswanathT. Hitendra Sarma于2011年提出的对KNN(详见KNN | BaoWJ’s Blog)的一种改进方法。

该方法的主要思路是对KNN中**“选择K个最近邻”进行了改进。该方法针对每个类别的数据都选择K个最近邻**,然后计算每个类别的K个最近邻的距离平均值,并选择距离平均值最小的类别为预测类别

K-NNMC代码

因为sklearn没有提供K-NNMC模型的库函数,所以这里我基于sklearnKNeighborsClassifier类构造WK_NNR模型。

因为K-NNMC模型需要分别计算每个类别数据对于待预测数据的K个最近邻,所以我用n(n表示数据类别总数)个KNeighborsClassifier分别处理每类数据,构造了KNeighborsMeanClassifier类,代码如下:

import numpy as np

class KNeighborsMeanClassifier:
    def __init__(self, n_neighbors=5) -> None:
        self.labels = None
        self.classifiers = dict()
        self.n_neighbors = n_neighbors
    
    def fit(self, X, y):
        self.labels = np.array(list(set(y)))
        for label in self.labels:
            model = KNeighborsClassifier()
            model.fit(X[y == label], y[y == label])
            self.classifiers[label] = model

    def predict(self, X):
        tmp = []
        for label in self.labels:
            classifier = self.classifiers[label]
            mean_dis = classifier.kneighbors(X, n_neighbors=self.n_neighbors)[0]
            mean_dis = np.mean(mean_dis, axis=1)
            tmp.append(mean_dis)
        tmp = np.stack(tmp)
        print(tmp.shape)
        index = self.labels[np.argmin(tmp, axis=0)]
        print(index.shape)
        return index

K-NNMC实验

实验数据实验代码基本同WK_NNC实验WK-NNC| BaoWJ’s Blog

实验结果

请添加图片描述

结果发现效果一般,同时我实现的代码速度较慢

链接

引用

[1] P. Viswanath and T. Hitendra Sarma, "An improvement to k-nearest neighbor classifier," 2011 IEEE Recent Advances in Intelligent Computational Systems, 2011, pp. 227-231, doi: 10.1109/RAICS.2011.6069307.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值