深度学习kNN算法

import numpy as np


class kNN:
    def __init__(self):
        pass

    def fit(self, x_train, y_train):
        self.xtr = x_train
        self.ytr = y_train

    def predict(self, k, dis, x_test):
        assert dis == 'E' or dis == 'M'
        num_test = x_test.shape[0]  # 测试样本数量
        labelist = []
        # 使用欧式距离公式做为距离数量
        if dis == 'E':
            for i in range(num_test):
                distances = np.sqrt(np.sum(((self.xtr - np.tile(x_test[i], (self.xtr.shape[0], 1))) ** 2), axis=1))
                nearest_k = np.argsort(distances)  # 根据下标排序
                topK = nearest_k[:k]  # 按照K值进行切片
                classCount = {}  # 创建一个空字典
                for i in topK:
                    classCount[self.ytr[i]] = classCount.get(self.ytr[i], 0) + 1
                sortclassCount = sorted(classCount.items(), key=operator.itemgetter(1))
                labelist.append(sortclassCount)
            return np.array(labelist)
        # 使用曼哈顿公式作为距离公式
        if dis == 'M':
            for i in range(num_test):
                # 行相加
                distances = np.sum(np.abs(self.xtr - np.tile(x_test[i], (self.xtr.shape[:0], 1))), axis=1)
                nearest_k = np.argsort(distances)
                topK = nearest_k[:k]
                classCount = {}
                for i in topK:
                    classCount[self.ytr[i]] = classCount.get(self.ytr[i], 0) + 1
                sortedclassCount = sorted(classCount.items(), key= operatory.itemgetter(1))
                labelist.append(sortedclassCount[0][0])
            return np.array(labelist)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值