KNN算法的封装实现

【机器学习】K近邻算法的实现 k近邻(k-NN)算法,中文翻译为k进零算法,是机器学习中的经典算法。k-NN算法适用于初学者,因其思想简单、实现容易,且数学要求低。k-NN算法效果良好,实验中可见其有效性。 阅读详情

1 KNN算法

基本思想:对每一个测试样本,寻找训练集中k个距离最接近的样本,将出现次数最多的类别分类为当前样本类别。

1.1 对单个样本实现knn

#导入库
import numpy as np 
import matplotlib.pyplot as plt
from collections import Counter
import math
#构建模拟数据集
raw_data_X = [[3.393533211, 2.331273381],
              [3.110073483, 1.781539638],
              [1.343808831, 3.368360954],
              [3.582294042, 4.679179110],
              [2.280362439, 2.866990263],
              [7.423436942, 4.696522875],
              [5.745051997, 3.533989803],
              [9.172168622, 2.511101045],
              [7.792783481, 3.424088941],
              [7.939820817, 0.791637231]
             ]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
k=5#邻居数取5
X_train=np.array(raw_data_X)
Y_train=np.array(raw_data_y)
x=np.array([5.2,3.2])#测试数据

使用散点图绘制模拟数据。

plt.scatter(X_train[Y_train==0,0],X_train[Y_train==0,1])
plt.scatter(X_train[Y_train==1,0],X_train[Y_train==1,1])
plt.scatter(x[0],x[1],color='r')
plt.draw()

在这里插入图片描述
计算测试数据与各个训练集样本中的距离。

distance=[math.sqrt(np.sum((x-x_train)**2)) for x_train in X_train]#计算距离
distance

在这里插入图片描述
获取前k个距离最近的样本类别标签。

nearest=np.argsort(distance)#按距离从小到大排列距离数组的索引
topK_y=[Y_train[index] for index in nearest[:k]]#取前k个最近的样本标签
topK_y
输出:[1, 0, 0, 0, 1]

使用collections中的Counter类统计各个类别出现次数。

counter=Counter(topK_y)
counter
输出:Counter({1: 2, 0: 3})

获取出现次数最多的前n个类别,此处n当然取1 。

predict_y=counter.most_common(1)[0][0]
print('KNN将x分类为:',predict_y)
输出:KNN将x分类为: 0

1.2 对多个样本实现knn

仿照sklean接口对代码进行整理,实现对多个样本进行knn分类。

import numpy as np
import math
from collections import Counter

class KNNClasifier():
    def __init__(self,k):
        """初始化KNN模型"""
        assert k>=1,'k must be valid'
        self.k=k
        self._X_train=None#私有成员
        self._Y_train=None

    def fit(self,X_train,Y_train):
        """使用训练数据训练KNN模型"""
        assert X_train.shape[0]==Y_train.shape[0],\
            'the shape of X_train must equal to Y_train'
        assert self.k<=X_train.shape[0],\
            'the size of X_train must be at least k'
        self._X_train=X_train
        self._Y_train=Y_train
        return self#sklearn规范

    def predict(self,X_predict):
        """给定待预测数据集X_predict,返回表示X_predict的结果向量"""
        assert self._X_train is not None and self._Y_train is not None,\
            'must fit before predict!'
        assert X_predict.shape[1]==self._X_train.shape[1],\
            'the feature number of X_predict must equal to X_train'
        return [self._predict(x_predict) for x_predict in X_predict]

    def _predict(self,x_predict):
        """给定单个待测试数据x_predict,返回x_predict类别结果"""
        assert x_predict.shape[0]==self._X_train.shape[1],\
            'the feature number of x_predict must equal to X_train'
        distance=[math.sqrt(np.sum((x_train-x_predict)**2)) for x_train in self._X_train]
        nearest=np.argsort(distance)
        topK_y=[self._Y_train[index] for index in nearest[:self.k]]
        voter=Counter(topK_y)
        return voter.most_common(1)[0][0]

    def __repr__(self):
        return 'KNN(k=%d)' % self.k

if __name__=='__main__':
    # 构建模拟数据集
    raw_data_X = [[3.393533211, 2.331273381],
                  [3.110073483, 1.781539638],
                  [1.343808831, 3.368360954],
                  [3.582294042, 4.679179110],
                  [2.280362439, 2.866990263],
                  [7.423436942, 4.696522875],
                  [5.745051997, 3.533989803],
                  [9.172168622, 2.511101045],
                  [7.792783481, 3.424088941],
                  [7.939820817, 0.791637231]
                  ]
    raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
    k = 5  # 邻居数取5
    X_train = np.array(raw_data_X)
    Y_train = np.array(raw_data_y)
    x = np.array([5.2, 3.2])  # 测试数据
    knn=KNNClasifier(5)
    print(knn)
    knn.fit(X_train,Y_train)
    print(knn.predict(x.reshape(1,-1)))

1.3 sklearn中的KNN

from sklearn.neighbors import KNeighborsClassifier
import numpy as np

if __name__=='__main__':
    # 构建模拟数据集
    raw_data_X = [[3.393533211, 2.331273381],
                  [3.110073483, 1.781539638],
                  [1.343808831, 3.368360954],
                  [3.582294042, 4.679179110],
                  [2.280362439, 2.866990263],
                  [7.423436942, 4.696522875],
                  [5.745051997, 3.533989803],
                  [9.172168622, 2.511101045],
                  [7.792783481, 3.424088941],
                  [7.939820817, 0.791637231]
                  ]
    raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
    k = 5  # 邻居数取5
    X_train = np.array(raw_data_X)
    Y_train = np.array(raw_data_y)
    x = np.array([5.2, 3.2])  # 测试数据
    knn=KNeighborsClassifier(n_neighbors=5)
    print(knn)
    knn.fit(X_train,Y_train)
    print(knn.predict(x.reshape(1,-1)))
【机器学习】scikit-learn调用KNN算法并手动模仿封装自己的KNN算法 本文详细介绍了scikit-learn库中机器学习算法的封装过程,特别是k近邻(knn)算法的实现与应用。视频从knn算法的基本原理出发,演示了如何将算法整理成函数,并通过断言确保输入数据的合法性。接着讲解了如何使用scikit-learn中的knn分类器进行预测,并说明了机器学习流程,包括数据训练和预测过程。此外,还讨论了如何自定义封装knn算法类,并进行了测试。视频强调了scikit-learn在机器学习算法封装上的统一性,并提示了在使用预测时需注意数据格式的问题。 阅读详情

相关推荐

机器学习系列笔记二:K近邻算法与参数调优[上]

机器学习系列笔记二:K近邻算法与参数调优[上] 文章目录机器学习系列笔记二:K近邻算法与参数调优[上]手写KNN模拟数据KNN的过程对手写的算法进行封装scikit-learn对KNN算法的封装使用sklearn提供的KNN通过对sklearn的使用重新封装手写的KNN判断机器学习算法的性能数据分离准确度超参数和模型参数寻找好的超参数寻找最好的k考虑距离?不考虑距离?距离的定义搜索Minkowski Distance相应的p KNN算法具有如下特点: 思想简单 应用数据知识少 效果好 可以解释机器学习算法

ChanZany的博客 1487

KNN自己封装库函数

KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法。 k 近邻算法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。 k值的选择、距离度量以及分类决策规则是k近邻算法的三个基本要素。 KNN 场景 电影可以按照题材分类,那么如何区分 动作片 和 爱情片 呢? 动作片:打斗次数更多 ...

王尚权 qq:2515162716 815

数学建模10大算法详解_程序源码打包

数学建模10大算法详解,适用于美赛、国赛的朋友,压缩包里有程序源代码可以学习!

python实现KNN算法

使用numpy复现KNN算法。(1)更加了解算法以及熟练复现能力。(2)为后续优化改进KNN算法做铺垫。(3)涉及到的运算使用numpy,加快运算。后续,将会如kmeans算法一样,将三支决策思想融入进去,优化算法。使得knn算法的效果提升的更好。

aouiylfjh的博客 5515

昇腾910安装驱动出错,降低Centos7.6的内核版本

Centos7.6 启动内核修改,解决昇腾910安装驱动错误的问题。

深蓝 3299

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。而该IP核的另一种模式,AXI Bridge模式则支持HOST主动读写,以及FPGA主动读写。该模式下有个参数需要配置,分别是PCIe:BARs以及AXI:BARs。而上述的普通模式只有PCIe:BARs需要配置。下面详细说说这两个参数的含义。

weixin_45888152的博客 3729

KNN算法的封装

# KNN算法的封装 import numpy as np from math import sqrt from collections import Counter # 定义分类knn函数 def KNN_classify(k,X_tarin,y_train,x): # 断言判断用户参数传入是否正确 assert 1<=k<=X_tarin.shape[0],"k...

VictoryKingLIU的博客 647

手把手教你用BQ Studio给BQ40Z50电量计“做体检”:从Golden Learning到精度验证的全流程实操

本文详细介绍了如何使用BQ Studio对BQ40Z50电量计进行全流程调试,从Golden Learning到精度验证。通过硬件连接、参数配置和优化技巧,帮助工程师提升电池管理系统的精度和性能,适用于BMS开发和电量计校准的实际应用场景。

weixin_30824599的博客 449

K近邻算法(KNN)-封装

分享一下最近学的KNN算法 K近邻算法简单一点来说就是分类算法,测试点与相邻训练数据K个点,根据点与点之间的距离判断测试点的类别 代码如下 注意:训练数据X_train和Y_train是对应关联的 :  X_train.shape[0] == Y_train.shape[0]    import numpy as np form math import sqrt for...

weixin_43617396的博客 469

VS2022+Qt6保姆级配置指南:从插件安装到项目互通全流程(附常见错误解决)

本文提供了一份详细的Visual Studio 2022与Qt6集成开发环境配置指南。从插件安装、环境搭建到项目创建与互通,涵盖了全流程操作步骤,并针对常见的配置错误和调试问题提供了实用的解决方案,帮助开发者高效构建企业级桌面应用。

nginx7reverse的博客 1203

实例讲解CANoe报文解析使用方法

在日常工作中,经常需要分析车辆产生故障的原因,在电动汽车中,分布式控制器及线束在其中某一个地方出现问题,就有可能造成车辆故障,但是由于电气零件无法直观的观察到哪个部位发生了故障,所以要借助工具测量电气变量或者采集报文信息通过分析,解析出故障原因,从而为车辆的开发,测试,维修提供支持。其中汽车行业最通用的通讯方式就是CAN通讯,本文针对使用CANoe对CAN报文离线分析的使用方法做详细介绍。

qq_43011586的博客 1万+

机器学习---scikit-learn中KNN算法的封装

1,工具准备,python环境,pycharm 2,在机器学习中,KNN是不需要训练过程的算法,也就是说,输入样例可以直接调用predict预测结果,训练数据集就是模型。当然这里必须将训练数据和训练标签进行拟合才能形成模型。 3 3,在pycharm中创建新的项目工程,并在项目下新建KNN.py文件。 import numpy as np from math import sqrt fr...

qq_33531400的博客 520

Dify 从入门到精通:第一篇 - 基础介绍与快速上手

Dify是一个开源的低代码平台,旨在简化大型语言模型(LLM)应用的开发流程。本文作为"Dify从入门到精通"系列的首篇,全面介绍了Dify的核心概念、安装步骤和基本使用方法。文章首先解析了Dify的多模型支持、低代码开发等特点,然后详细讲解了基于Docker的安装配置过程,包括系统要求、环境变量设置等。通过创建一个邮件助手应用的实际示例,展示了Dify的可视化工作流设计功能。最后简要介绍了高级特性和最佳实践,为后续深入学习奠定基础。本文为开发者提供了从零开始使用Dify构建AI应用的完

IT深耕十余载,大道之简 1146

1.4 KNN算法学习——KNN算法的实现与封装

封装代码实现import numpy as np from math import sqrt from collections import Counter def kNN_classfy(k,X_train,y_train,x): assert 1 &lt;= k &lt;=X_train.shape[0],"k must be valid" assert X_train.s...

qq_34734683的博客 497

警惕AI依赖:如何避免数字水蛭侵蚀你的认知能力

在人工智能技术日益普及的今天,人机协作已成为现代工作流的核心范式。其原理在于通过算法模型辅助人类完成信息处理、内容生成等任务,从而提升效率。然而,过度依赖AI可能导致认知卸载,引发思考能力退化等潜在风险。从技术价值看,AI的核心在于增强而非替代人类智能,关键在于建立健康的协作模式。在应用场景上,无论是编程开发、内容创作还是决策分析,用户都需警惕工具依赖对深度工作、创造性思维和决策责任的侵蚀。本文聚焦于识别AI依赖的早期信号,并提供构建分阶段使用流程、将AI作为质疑者等具体策略,旨在帮助读者守护核心认知能力,

weixin_30240349的博客 624

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1142

k_近邻算法不调包超详细python实现加案例演示

一,K-近邻算法简单概述 k-近邻算法(k-Nearest Neighbour algorithm),又称为KNN算法,是数据挖掘技术中原理最简单的算法。KNN的工作原理:给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻近的k个实例,如果这k个实例的多数属于某个类别,那么新数据就属于这个类别。可以简单理解为:由那些离X最近的k个点来投票决定X归为哪一类。 二...

小十亘的博客 793

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

机器学习算法01—— K近邻算法学习笔记

摘要:k近邻算法主要通过计算预测样本x和训练集中样本的距离,并按距离从近到远取k个训练样本的y值,如果y值为1的数量多,则x的预测值为1;否则为0。值得一提的是,这里运用的主要数学知识是计算欧拉距离的数学公式,不过通过np的矩阵运算,算起来并不算复杂。这里自己写代码实现一个简单的k近邻算法,主要是为了理解算法的思想和具体的实现过程。

yue200403的博客 295

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

学渣也学ML:K-近邻算法之笔记一

学渣也学ML:K-近邻算法之一什么是KNN来个案例:电影分类封装函数,构建分类器再来个案例 什么是KNN 书面定义: k一近邻算法(k-NearestNeighbouralgorithm),又称为KNN算法.是数据挖掘技术中原理最简单的算法,采用测量不同特征之值之间的距离方法来进行分类.KNN的工作原理:给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻近的k...

qq_37320072的博客 516

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python编写knn算法_K最近邻算法(KNN)---sklearn+python实现方式

k-近邻算法概述简单地说,k近邻算法采用测量不同特征值之间的距离方法进行分类。k-近邻算法优点:精度高、对异常值不敏感、无数据输入假定。缺点:计算复杂度高、空间复杂度高。 适用数据范围:数值型和标称型。k-近邻算法(kNN),它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个...

weixin_39805734的博客 1079

Python3入门机器学习之2.2scikit-learn中的机器学习算法的封装

Python3入门机器学习 2.2 scikit-learn中的机器学习算法的封装 可以说kNN算法是一个不需要训练过程的算法。换句话说,输入样例可以直接送给训练数据集,在这个数据集上直接找到离输入样例最近的k个点,然后投票选出来得票数最高的标签就是结果了。 k近邻算法是非常特殊的,可以被认为是没有模型的算法。但是为了和其它算法统一,可以认为训练数据集就是模型本身。这样每一个算法都会有fit(拟合)这个过程。如下图所示: 1.我们可以使用scikit-learn封装好的机器学习的算法进行预测,过程如下:

qq_42686927的博客 619

KNN算法

参考文章: 一文搞懂k近邻(k-NN)算法 KNN算法的算法思想 慕课网《Python3入门教程》 目录 一.KNN算法 1.1 什么是KNN算法 KNN算法,也叫K近邻算法,是一种是一种基本分类和回归方法。 KNN算法的原理:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。 根据以往的经验,肿瘤良性...

weixin_33701564的博客 295

machinelearning_KNN02_算法的实现与封装

一.KNN算法在notebook中的实现 import numpy as np import matplotlib.pyplot as plt #(1)手动设置十组数据,横轴代表肿瘤发现的时间,纵轴代表肿瘤的大小 #(2)其中在y数组中,则表示肿瘤的种类(良性、恶性) raw_data_X = [[3.393533211, 2.331273381], [3.110073483, 1.781539638], [1.343808831, 3.3683609

pangshuo124的博客 129

k近邻算法-3.算法应用

算法具体应用 import numpy as np import matplotlib.pyplot as plt import matplotlib from sklearn import datasets 加载手写数据集 digits = datasets.load_digits() #加载手写数据集 手写数据集共有5620个样本,每个样本有64个特征,为手写数据集的像素点,其样...

weixin_30527323的博客 283

Python 手写 Sklearn 中的 kNN 封装算法

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤态度决定高度,格局决定结局。摘要:用Python 一步...

pdcfighting的博客 268

python scikit learn 封装_Python 手写 Sklearn 中的 kNN 封装算法

摘要:用Python 一步步写出 Sklearn 中的 kNN 封装算法。昨天通过一个酒吧猜红酒的故事,介绍了机器学习中最简单的一个算法:kNN (K 近邻算法),并用 Python 一步步实现这个算法。同时为了对比,调用了 Sklearn 中的 kNN 算法包,仅用了 5 行代码。两种方法殊途同归,都正确解决了二分类问题,即新倒的红酒属于赤霞珠。在这推荐下小编创建的Python学习交流群8350...

weixin_39867212的博客 272
上一篇: sklean中鸢尾花数据集可视化
下一篇: Numpy学习—np.random.randn()、np.random.rand()和np.random.randint()
von Libniz
博客等级 码龄8年 421粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值