KNN算法,暴力枚举

本文深入探讨了KNN(K-最近邻)算法,详细解释了其工作原理,并介绍了如何使用Python进行暴力枚举实现。通过引用《应用多元统计分析》和《统计学习方法》等资料,为读者提供了坚实的理论基础和实践指导。
摘要由CSDN通过智能技术生成

参考文献:

  1. 应用多元统计分析,高惠璇. 北京大学出版社
  2. 统计学习方法第二版,李航
import math
import numpy as np


class KNN_Model:
    def __init__(self, X_train, y_train, n_neighbors=3, p=2, method="Minkowski"):
        """
        param: n_neighbors 临近点个数
        param: p 距离度量
        param: method 度量距离的方法 又闵可夫斯基距离,标准欧式距离,兰士距离 
               距离度量方法还有相似系数,斜交距离,余弦夹角,详见应用多元统计分析课本聚类分析的章节
               这里只写了三种距离

        """
        self.n = n_neighbors
        self.p = p
        self.X_train = X_train
        self.y_train = y_train
        self.var = np.var(X_train, axis=0)
        self.method = method
        self.pred_list = []

    # 测算邻居类别个数

    def __func(self, dic, max_count):

        for keys, values in dic.items():
            if values == max_count:
                return keys

    def __class_count(self, new_knn_list):
        new_knn_list1 = list(dict(new_knn_list).values())
        from collections import Counter
        dic = Counter(new_knn_list1)
        max_count = max(dic.values())
        ret = self.__func(dic, max_count)
        return ret

    # 闵可夫斯基距离
    def __Minkowski(self, x, y, p):
        if len(x) == len(y) and len(x) > 1:
            sum_ = 0
            for i in 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值