02--机器学习之最近邻规则分类(KNN)

K-近邻算法: k-nearest neighbor classification (kNN) 详细介绍 @创建于:2020.04.09 @修改于:2020.04.09,2024.06.22 文章目录1、kNN介绍2、k近邻法的三要素详解2.1 距离度量2.2 k值的选择2.3 分类决策规则3、k近邻法的实现:kd树4、Python实现过程5、优缺点6、常见问题 1、kNN介绍 kNN是一个基本而简单的分类算法,作为监督学习,那么KNN模型需要的是有标签的训练数据,对于新样本的类别由与新样本距离最近的k个训练样本点按照分类... 阅读详情

1.例子

这里写图片描述
实例,两个特征
对例子建模
这里写图片描述

举例:
这里写图片描述
上面这个图中,把小手指的这个豆子归为哪个类呢?knn的做法是看它的邻居们是什么类,然后把它归为和邻居一样的类

2.算法详述
1)步骤
为了判断未知实例的类别,以所有已知类别的实例作为参照
选择参数K(一般都选择奇数)
计算未知实例与所有已知实例的距离
选择最近K个已知实例
根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最邻近样本中最多树的类别

2)细节
关于距离的衡量方法:
1.Euclidean Distance
这里写图片描述
3.算法优缺点
1)算法优点:
简单
易于理解
容易实现
通过对K的选择可具备丢噪音数据的健壮性
2)算法缺点
这里写图片描述
需要大量空间存储所有已知实例
算法复杂度高(需要比较所有已知实例与要分类的实例)
当其样本分布不平衡时,比如其中一类样本过大(实例数量过多)占主导的时候,新的未知实例容易被归类为这个主导样本,因为这类样本实例的数量过大,但这个新的未知实例实际并没有接近目标样本

3)改进算法
考虑距离,根据距离加上权重
比如:1/d(d:距离)
离未知实例近的,则权重就大

4.介绍一种数据集
虹膜 iris
这里写图片描述
是一种花,这个数据集中一共有150个实例
萼片长度,萼片宽度,花瓣长度,花瓣宽度(sepal length,sepal width,petal length and petal width)
类别:3中label
Iris setosa, Iris versicolor, Iris virginica

这个数据集相当于有150个样本(150行),每个样本有4个特征,一个label。相当于有5列

python代码:调用sklearn库中的模块

"""调用库实现"""
from sklearn import neighbors #knn这个分类器包含在neighbors这个模块中
from sklearn import datasets #我们用到的Iris这个数据集包含在datasets这个模块中,所以要导入这个模块


knn = neighbors.KNeighborsClassifier() #将这个分类器复制给定义的变量knn
iris = datasets.load_iris() #加载要用到的数据集

print(iris) #把这个数据集打印出来

knn.fit(iris.data,iris.target) #fit函数  建立模型,然后传入参数(特征值,标签)

predictLabel = knn.predict([[0.1,0.2,0.3,0.4]])#根据建好的模型来预测新的实例

print(predictLabel)

python代码:自己实现各个模块

import csv  #加载csv格式的文件用的
import random
import math  #计算距离
import operator

def loadDataset(filename,split,trainingSet=[],testSet=[]):#加载数据的函数(文件名称,split将数据集分成两部分,一个训练集,一个测试集)
    with open(filename,'r') as csvfile:#把文件导入成csv格式的文件
        lines = csv.reader(csvfile)#读取所有的行
        dataset = list(lines)#将所有行转化成list,并赋值给定义的变量名dataset
        for x in range(len(dataset) - 1):
            for y in range(4):
                dataset[x][y] = float(dataset[x][y]) #把dataset中的数据转换成float格式
            if random.random() < split: #如果产生的随机数小于split,那么就将这一行的数据加入到训练集中
                trainingSet.append(dataset[x])
            else:#如果产生的随机数大于split,那么就将这一行的数据加入到测试集中
                testSet.append(dataset[x])


def euclideanDistance(instancel,instance2,length):#计算距离的函数(实例1(有可能是多维),实例2(有可能是多维),维度变量)
    distance = 0 #初始化distance为0
    for x in range(length):#对于length维度的实例,分别计算每个值得平方((x1-y1)^2 + (x2-y2)^2 + ...+(xlength - ylength)^2)
        distance +=pow((instancel[x] - instance2[x]),2)
    return math.sqrt(distance) #对distance开平发


def getNeighbors(trainingSet,testInstance,k):#返回最近的K个邻居的函数
    distances = [] #定义一个空的容器,用来装各个距离
    length = len(testInstance) - 1 #要测试实例的维度
    for x in range(len(trainingSet)): #对训练集中的每一个样本,计算未知实例到每个样本的距离
        dist = euclideanDistance(testInstance,trainingSet[x],length)
        distances.append((trainingSet[x],dist))#把训练集中每个样本与未知实例的距离算出后加入到定义的distance容器中
    distances.sort(key=operator.itemgetter(1))#用sort函数把容器中的距离按从小到大排列
    neighbors = []
    for x in range(k):#返回容器中距离最近的K个邻居
        neighbors.append(distances[x][0])
    return neighbors


def getResponse(neighbors):#在返回的个邻居中,根据少数服从多数进行归类
    classVotes = {}
    for x in range(len(neighbors)):#对各个邻居进行归类,
        response = neighbors[x][-1]
        if response in classVotes:
            classVotes[response] += 1
        else:
            classVotes[response] = 1
    sortedVotes = sorted(classVotes.items(),key=operator.itemgetter(1),reverse=True)#对每个类中同类邻居的个数按降序排列
    return sortedVotes[0][0]#返回第一个值


def getAccuracy(testSet,predictions): #计算一下准确率,比较一个预测的值和真实值
    correct = 0
    for x in range(len(testSet)):
        if testSet[x][-1] ==predictions[x]:#[-1]代表最后一个值  如果测试集中的label == 预测出来的label
            correct += 1 #正确的个数加1
    return (correct/float(len(testSet))) * 100.0  #返回计算的正确率

def main():

    #prepare data
    trainingSet = [] #创建空的训练集
    testSet = [] #创建空的测试集
    split = 0.67 #将加载加的数据集分为测试集和训练集的标准定为0.67(把2/3的数据集分为训练集,把1/3的数据集分为测试集)
    #这里的r 是将后面的整个字符串当做路径,而忽略其中的特殊符号,比如\n这种转义符就能忽略掉
    loadDataset(r'J:\python_program\machine_learning\KNN\iris.txt',split,trainingSet,testSet)
    print("Train set: " + repr(len(trainingSet)))
    print("Test set: " + repr(len(testSet)))

    #generate predictions
    predictions = []
    k = 3
    for x in range(len(testSet)):
        neighbors = getNeighbors(trainingSet,testSet[x],k)
        result = getResponse(neighbors)
        predictions.append(result)
        print("> predicted= " + repr(result) + ",actual = " +repr(testSet[x][-1]))
    accuracy = getAccuracy(testSet,predictions)
    print("Accuracy: " + repr(accuracy) + "%")

main()
【机器学习】K-近邻算法(KNN)全面解析 K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。KNN算法的核心思想是“物以类聚”,即相似的数据应有相似的输出。 阅读详情

相关推荐

机器学习3—分类算法之K邻近算法(KNN)

加载数据集采用loadtxt()函数加载酒类数据集,采用逗号(,)来分割。划分数据集由于Wine数据集第一列为类标,后面13列为13个酒类特征,获取其中两列特征,并将其划分成特征数组和类标数组,调用concatenate()函数实现。KNN训练调用Sklearn机器学习包中KNeighborsClassifier()函数训练,设置K值为3类,并调用clf.fit(train_data,train_target)训练模型,clf.predict(test_data)预测分类结果。...

ex_6450的博客 3247

k--最近邻算法(KNN)

KNN最邻近算法

crhxiyhx的博客 7559

数据科学实战系列之ML-KNN(一)

写在开头:最近确实事情比较多,每天没有啥时间去学习其他的东西,也就没有时间来继续创作博客,不过最近学习了一些多标签分类的东西,并简单的实现了一下。 内容安排 对于多标签分类任务还有许多常见的方法比如ML-DT(决策树)、Rank-SVM等,由于ML-KNN沿袭KNN的思想比较容易上手,于是本文将对多标签分类任务中的ML-KNN算法进行简单的介绍,并通过代码进行实例操作,使用数据及为MULAN的eurlex-directory-codes(点击可下载)。 1.ML-KNN算法简介 ML-KNN的核心思想与.

明曦君的小家 4130

最近邻规则KNN分类算法思想及代码实现

1. 什么是最近邻规则KNN分类算法? 2.KNN算法代码实现步骤? 3.算法优点 4.算法缺点 5.算法改进 1. 什么是最近邻规则KNN分类算法 计算未知标签样本点与所有训练集中已知标签的样本点的距离。选择出k个距离最近的样本点,根据标签类别个数“少数服从多数”的原则,让未知标签样本点归类为k个最近邻训练集样本点中个数最多的类别。 2.KNN算法代码实现步骤 1.打开文件,读取数据并赋值。导入数据后随机划分训练集和测试集。 2.计算两点之间欧氏距离 3.返回最近的k个邻居 4.根据“少数服从多数”原.

weixin_43490216的博客 773

最近邻算法(KNN)

1.算法概述  目前,对于文本分类的研究已经取得了巨大的进展,常用的文本分类算法有最近邻算法(KNN),支持向量机,人工神经网络,boosting,随机森林等。而KNN算法既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的,又是最好的文本分类算法之一。 基于实例的学习方法: 1.只是简单地把训练样例存储起来。等到输入一个新的查询实例时,才分析这个新实例和之前存储的实例之间的关系。**该...

Y_hero的博客 4881

11、K近邻算法(KNN)

本文首先介绍了KNN算法的直观理解、算法三大要素、优缺点,并说明了如何实现KNN算法,最后讲解了sklearn中的KNN使用。

m0_56642803的博客 1210

最近邻规则算法(KNN)

最近邻算法(KNN)是一个基于实例学习的分类算法。 如果一个实例在特征空间中的K个最相似(即特征空间中最近邻)的实例中的大多数属于某一个类别,则该实例也属于这个类别。所选择的邻居都是已经正确分类的实例。 算法步骤: 1、把所有分类好的(有标签label)的数据(实例)作为训练集; 2、选择好参数K; 3、计算未知实例与所有已知实例的距离; 4、选择最近K个已知实例;

iversongzy的博客 3841

模式识别 最近邻规则聚类算法

最近邻规则的聚类算法 实验要求: 编写采用最近邻规则的聚类算法,距离采用欧式距离,阈值可设定。 采用二维特征空间中的10个样本对程序进行验证 x1 = (0,0),x2 = (3,8) x3 = (2,2),x4 = (1,1) x5 = (5,3),x6 = (4,8),x7 = (6,3),x8 = (5,4) x9 = (6,4),x10 = (7,5)

最近邻规则分类KNN

最近邻规则分类KNN及其实例

weixin_46557333的博客 654

机器学习【学校智慧食堂及其应用】

本文主要介绍机器学习【智慧食堂及其应用】

qq_201729558 2571

手把手教你用STM32F429+FreeRTOS搭建开源SIP电话(附代码与避坑指南)

本文详细介绍了如何使用STM32F429和FreeRTOS搭建开源SIP电话系统,涵盖硬件选型、FreeRTOS任务划分、PJSIP协议栈移植、音频系统优化及安全实践。通过实战案例和代码示例,帮助开发者快速实现嵌入式VoIP通信,特别适合物联网和音视频通信领域的应用开发。

weixin_33582311的博客 356

机器学习——最邻近规则分类(K Nearest Neighbor)KNN算法

1、简介 (1)Cover和Hart在1968年提出最初的临近算法 (2)邻近算法属于分类(classification)算法 (3)输入基于实例的学习(instance-based learing),懒惰学习(lazy learing)——处理训练集时并没有建造任何的模型,当对一个未知的实例进行归类时才进行归类 2、举例 如何将电影的例子模拟成一个广泛的模型? 对于每一个电影模拟

loveliuzz的博客 1万+

FOC电机控制中电流采样延迟补偿的原理和方法

摘要: FOC电机控制中,电流采样、计算与PWM更新存在固有延迟(约1.5个PWM周期),导致相位滞后,限制电流环带宽。主流补偿方法包括: 一阶前向预测法:基于历史电流值预测未来电流,抵消延迟,工程应用广泛; 相位超前补偿:通过s/z域校正器设计实现等效预测; 状态观测器法(如龙伯格观测器):通过电机模型闭环估计状态,兼具噪声抑制和参数辨识能力,但复杂度高。实际需注意参数敏感性、离散化精度及延迟时间校准,避免过补偿风险。一阶预测法因平衡效果与复杂度成为工业首选。

jifengzhiling的博客 2232

机器学习之KNN最邻近分类算法

KNN算法简介 KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中最简单的算法之一,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。 KNN最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数...

pengjunlee的博客 21万+

Windows 11 - 打开操作安全中心提示 “需要使用新应用以打开此 Windowsdefender 链接“ 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开)

Windows 11 - 打开操作安全中心提示 "需要使用新应用以打开此 Windowsdefender 链接" 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开),当您点击任务栏上要关闭安全中心防护设置时,这种情况打不开怎么解决,怎么办,Windows安全中心,病毒和威胁保护,账户保护,防火墙和网络保护,设备安全性。

🏆 前端领域优质创作者 1万+

手机开发实战58——小区广播介绍2

业务 针对小区广播短消息的特点,可以提供一些基于目前短消息不能或不适合提供的服务: 1. 显示网络服务基站名称:用户可以随时了解手机登记在哪个基站下,特别是在边界交叉覆盖区域,用户可以清楚的知道通话建立在哪个基站下,在用户投诉和故障描述中也会有所帮助; 2. 提供用户问候信息:可以在覆盖机场、车站等地区的基站广播一些用户问候语或一些企业形象广告语; 3. 充分利用小区广播地

xjbclz的专栏 772

【机器学习】KNN近邻算法及实战案例(鸢尾花、手写数字识别)

K-Nearest Neighbors (KNN) 是一种简单且直观的机器学习算法,它属于监督学习的一种。KNN可以用于分类和回归问题,但最常用于分类。它的核心思想是:一个样本所属的类别可以通过与这个样本最近邻的几个训练样本的类别来决定。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 7972

FM20S用户手册-PL端案例开发手册

为便于演示,本次操作直接将led_flash案例中的 "led_flash_fm20s\constraints\constrs_1Ved_flash_fm20s.fdc"文件全部代码拷贝至编辑 界面,并点击保存按钮。引脚约束请查看案例工程"led_flash\project\led_flash_fm20s\constraints\constrs_1\"目 录下的led_flash_fm20sfdc。(4)弹出如下界面,在界面配置Select device forthe project"内容,如下图。

创龙,嵌入式一体化解决方案商 401

KNN(K近邻算法)

一、KNN基本知识 KNN算法 -------- 做分类(二分类、多分类)、也可以做回归 =================================== KNN的三要素: K值的影响: 1. K值过小,可能会导致过拟合 2. K值过大,可能会导致欠拟合 距离的计算方式: 一般使用欧氏距离(欧几里得距离); 决策函...

鲨鱼儿的博客 1万+

ClaudeCode入门01-环境安装(小白入门:手把手教你配置,超简单的一种接入方式)

文手把手教你从零搭建 Claude Code 开发环境。针对国内网络现状,我们采用 OpenRouter + Claude Code Router 的方案,支持支付宝/微信充值,无需科学上网即可完成配置。内容涵盖 Node.js 安装(macOS/Windows/Linux)、OpenRouter 注册与充值、Claude Code 和 Router 安装配置,以及一键启动脚本的编写。跟着截图一步步操作,10分钟搞定全部环境!

yueyeguzhuo的专栏 280

利用 RSAU_LOG_API 把 SAP 安全审核日志接入企业 SIEM 的完整指南

在 SAP 世界里,安全审核日志(Security Audit Log,简称 SAL)是审计和合规的核心基础设施之一。系统会在后台把安全相关的关键事件记录下来,比如:(用户登录与登录失败用户锁定、解锁权限对象或角色变更远程调用(RFC)相关活动关键事务码的启动程序直接执行、批处理作业相关的敏感操作传统 ABAP 系统里,这些日志会写到本地应用服务器上的审计文件中(背后对应类似表RSAUENTR2的结构),包含事件标识、客户端、用户、终端、事务码、时间戳等信息。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 161

机器学习——k邻近算法(kNN)

机器学习——k近邻算法(kNN) 参考教材:机器学习实战(人民邮电出版社)Peter Harrington【美】著 语言:python 软件:VS code 1.k近邻算法的概述 k近邻算法采用不测量不同特征值之间的距离方法进行分类。 算法的距离计算公式为欧式距离公式: k近邻算法的优缺点: 优点:精度高、对异常值不敏感、五数据输入假定。 缺点:计算复杂度高、空间复杂度高。 适用数据范围:数据型和标称型。 k近邻算法原理: 存在一个样本数据集合(训练样本集),切样本集中每...

Mr_marsa的博客 3942

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

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

机器学习之KNN(一)K近邻算法sklearn实现详解

KNN算法在sklearn中的实现步骤以及参数详解

繁华三千东流水不舍昼夜的博客 7270

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

机器学习-KNN最近邻算法原理及实践

机器学习算法KNN最近邻算法

qq_45700097的博客 3657

机器学习实战2.1. 超详细的k-近邻算法KNN(附Python代码)

超详细的k-近邻算法KNN(附Python代码) 搜索微信公众号:‘AI-ming3526’或者’计算机视觉这件小事’ 获取更多机器学习干货 csdn:https://blog.youkuaiyun.com/baidu_31657889/ github:https://github.com/xiaoming3526/ai-ming3526 本文参考地址:[apachecn/AiLearning] KNN ...

小明的博客 3132

机器学习(3) K近邻算法(KNN)介绍及C++实现

KNN算法是一种多维数据分类算法,本文依据《统计学习方法》,介绍K近邻算法(KNN),并给出KD树的C++实现。

ProfSnail的博客 4689
上一篇: 01--机器学习之决策树
下一篇: 03--机器学习之SVM(暂定)
quliulangle
博客等级 码龄14年 15粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值