分类算法-KNN(原理+代码+结果)

article/2025/8/25 14:34:34

KNN,即K最邻近算法,是数据挖掘分类技术中比较简单的方法之一,简单来说,就是根据“最邻近”这一特征对样本进行分类。

1、K-means和KNN区别

   K-means是一种比较经典的聚类算法,本质上是无监督学习,而KNN是分类(或回归)算法,是监督学习。K-means算法的训练过程需要反复迭代的操作(寻找新的质心),但是KNN不需要。K-means中的K代表的是簇中心,KNN的K代表的是选择与新测试样本距离最近的前K个训练样本数。

2、KNN的算法思想

     KNN(k-NearestNeighbor)又被称为近邻算法,它的核心思想是:物以类聚,人以群分。假设一个未知样本数据x需要归类,总共有ABC三个类别,那么离x距离最近的有k个邻居,这k个邻居里有k1个邻居属于A类,k2个邻居属于B类,k3个邻居属于C类,如果k1>k2>k3,那么x就属于A类,也就是说x的类别完全由邻居来推断出来。

3、算法步骤

(1)计算测试对象到训练集中每个对象的距离

(2)按照距离的远近排序

(3)选取与当前测试对象最近的K的训练对象,作为该测试对象的邻居。

(4)统计这K个邻居的类别概率

(5)K个邻居里频率最高的类别,即为测试对象的类别

4、KNN算法的优缺点

优点:非常简单的分类算法没有之一,人性化,易于理解,易于实现适合处理多分类问题,比如推荐用户

缺点:属于懒惰算法,时间复杂度较高,因为需要计算未知样本到所有已知样本的距离,样本平衡度依赖高,当出现极端情况样本不平衡时,分类绝对会出现偏差。可解释性差,无法给出类似决策树那样的规则。向量的维度越高,欧式距离的区分能力就越弱。

5、数据集

名称:Prostate_Cancer

提取:链接:https://pan.baidu.com/s/1xv8r54qaLpH8RiMRkcrzyA 
提取码:66hg 

展示:

 

6、代码实现

from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import random
import pandas as pddef knn():K = 8data=pd.read_csv(r"C:\Users\Lenovo\Desktop\course\Prostate_Cancer.csv")n = len(data) // 3test_set = data[0:n]train_set = data[n:]train_set = np.array(train_set)test_set = np.array(test_set)A = [i for i in range(0, len(train_set))]B = [i for i in range(2, 10)]C = [i for i in range(n)]D = [1]x_train = train_set[A]x_train = x_train[:, B]y_train = train_set[A]y_train = y_train[:, D]x_test = test_set[C]x_test = x_test[:, B]y_test = test_set[C]y_test = y_test[:, D]# 训练模型model = KNeighborsClassifier(n_neighbors=K)model.fit(x_train, y_train)score = model.score(x_test, y_test)print("准确率为:", score)if __name__=='__main__':knn()

 

7、结果

 当k=8时候,结果为 0.7575757575757576

当k=5时候,结果为0.8181818181818182

8、总结

KNN是一种快速高效的分类算法,其逻辑简单,易于理解。但当训练数据集很大时,需要大量的存储空间,而且需要计算训练样本和测试样本的距离,计算量较大。个人认为,这是由于KNN是一种懒惰的学习法,简单的认为“物以类聚,人以群分”,但实际上,无论是人际交往还是数据事实,可能并不完全符合这个逻辑。而SVM追求类别超平面边界距离最大化过程中,是基于严格的数学推导,因而更具有可靠性,所以取得了更好的分类结果。但我们不能简单的定义一个SVM要优于KNN,要结合具体问题去具体分析。


http://chatgpt.dhexx.cn/article/WRCUByLU.shtml

相关文章

伯努利贝叶斯分类算法

贝叶斯分类的核心概念: 我们对某件事情的判断首先有一个概率,这个概率称为先验概率。先验概率时根据经验总结出来的概率值,如果首先没有经验,那么可以将先验概率设置为50%,随着后面事情的发展,再调整先验概…

【机器学习原理】KNN分类算法

上一篇:Logistic回归分类算法 文章目录 一、KNN分类算法:用多数表决进行分类1. 用“同类相吸”的办法解决分类问题可视化下的分类问题 2. KNN分类算法的基本方法:多数表决3. 表决权问题4. KNN的具体含义 KNN分类算法原理1. KNN分类算法的基本…

Python实现分类算法

前言:出自于学校课程数据挖掘与分析布置的实验小作业,案例经典,代码注释较全,供大家参考。 题目: 现有西瓜挑选数据文件:dataset.txt,编程实现朴素贝叶斯算法,并判断有如下特征的瓜…

贝叶斯分类算法

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。这篇文章我尽可能用直白的话语总结一下我们学习会上讲到的朴素贝叶斯分类算法&#…

基于Python实现五大常用分类算法(原理+代码)

读: 在机器学习和统计中,分类算法通过对已知类别训练集的计算和分析,从中发现类别规则并预测新数据的类别。分类被认为是监督学习的一个实例,即学习可以获得正确识别的观察的训练集的情况。 实现分类的算法,特别是在具…

EIGRP综合实验解析

实验要求 1.R1为ISP,只能配置IP地址 2.R1与R2之间为PPP封装,使用CHAP认证,R1为主认证方 3.R2-R8地址为172.16.0.0/16 4.R4的S1/1口带宽为800K。R4到R2环回为非等开销负载均衡 5.保证更新安全,减少路由条目数量 6.R6到达R8环回通过R7进行 7.R2…

EIGRP协议

EIGRP是距离矢量路由协议,但又非距离矢量那样路由完全是别人告诉,而是通过维护3张表自己对比计算后放入路由表。同样会受水平分割影响。 EIGRP建邻居过程 第一步:路由器R1和R2接口配置EIGRP后,在相应接口上向外组播发送Hello包…

EIGRP总结

EIGRP 增强内部网关路由协议 无类别距离矢量IGP协议; 增量更新—仅触发更新,无周期更新----更新量小(DV),可靠性高(RTP),保活机制(hello) 复合度量—多个参数…

EIGRP

EIGRP增强型网关路由协议 基本内容: Cisco私有;无类别距离矢量协议;跨层封装协议,封装于网络层–协议号88;组播更新:224.0.0.10 ;支持非等开销负载均衡;增量更新(部分更…

思科EIGRP配置及基本讲解

思科EIGRP配置及基本讲解 什么是EIGRP EIGRP全称 [增强型内部网关路由选择协议] 是思科自主研发的动态路由选择协议,按类型划分是一款IGP协议,距离矢量协议,是一款基于传闻的协议。 EIGRP是思科的私有协议,直到13年,此…

EIGRP协议的配置

EIGRP(Enhanced Interior Gateway Routing Protocol,增强型内部网关路由协议)是Cisco公司开发的一个平衡混合型路由协议,它融合了距离向量和链路状态两种路由协议的优点,支持IP,IPX和ApplleTalk等多种网络层协议。由于TCP/IP是当今…

网络篇 EIGRP协议-27

目录 一、EIGRP的基本概述 二、EIGRP的特点 三、EIGRP的四种重要技术 四、EIGRP的相关术语 五、EIGRP的三张表 1.路由表 2.邻居表 3.拓扑表 六、EIGRP的五个分组 1.Hello分组: 2.Update更新分组: 3.Query查询分组: 4.Reply应答分…

EIGRP(Enhanced Interior Gateway Routing Protocol,增加型内部网关路由协议)

EIGRP是Cisco公司于1992年开发的一个无类别距离矢量路由协议,它融合了距离矢量和链路状态两种路由协议的优点。EIGRP是Cisco的专有路由协议, 是Cisco的IGRP协议的增加版。IGRP是一种有类距离矢量协议,Cisco IOS 12.3版以后不再支持该协议。 E…

EIGRP理论详解及基础实验

EIGRP:( Enhanced Interior Gateway Routing Protocol )增强型内部网关路由协议 EIGRP 是一种Cisco专用协议,同时具备链路状态和距离矢量路由协议的优点.只发送变化后的信息(这类似于链路状态协议),同时只将这些信息发送给邻接路由器(这类似于距离矢量协议). 距离矢量路由协议…

CSMA协议

介质访问控制 CSMA协议 1-坚持CSMA 非坚持CSMA p-坚持CSMA 三种CSMA对比总结

3.4.2 CSMA/CD协议

为了解决各站点争用总线的问题,共享总线使用了一种专用协议CSMA/CD,它是载波监听多址接入/碰撞检测(Carrier Sence Multiple Access Collision Detection)的英文缩写。 假设站点C要发送帧,它首先进行载波监听&#xff…

关于CSMA/CA和CSMA/CD的区别

转载自:https://www.cnblogs.com/aixin0813/p/3289183.html 1.1 载波侦听多路访问 根据具体的监听/发送策略,可将CSMA分为: 非持续CSMA(英语:non-persistent CSMA) 当要发送帧的设备侦听到线路忙或发生冲…

计算机网络:随机访问介质访问控制之CSMA/CA协议

CSMA/CD协议已成功应用于使用有线连接的局域网,但在无线局域网环境下,却不能简单地搬用CSMA/CD协议,特别是碰撞检测部分。主要有两个原因: 1)接收信号的强度往往会远小于发送信号的强度,且在无线介质上信号强度的动态…

CSMA/CD协议详解

一、协议背景 最早的以太网是总线网络,当一台计算机发送数据时,总线上所有计算机都能检测到这个数据(广 播通讯方式)。为了通讯的简便,传统总线型以太网采取了以下措施: 1.提供的服务为不可靠的交付: (1.采用较为灵活…

CSMA/CD

carrier sense multi-access/collision detect,载波监听多路访问/冲突检测 工作原理: 发送数据前进行载波监听判断信道是否空闲,若信道忙则等待一段随机时间;若信道空闲则立即发送数据,发送数据过程中同时检测是否产…