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

虚幻UE 增强输入-触发器

输入触发器(UInputTrigger): 使用经过修饰器修改的输入值,或者使用其他输入动作的输出值,来确定是否激活输入动作。

UE成长之路,欢迎大家的关注! 5464

实战指南:如何用Kamailio+FreeSWITCH搭建高并发企业通信系统(附配置模板)

本文提供了一份实战指南,详细介绍了如何利用Kamailio与FreeSWITCH构建高并发企业通信系统。通过将Kamailio作为高性能SIP信令平面处理路由与负载均衡,FreeSWITCH作为媒体与应用平面负责通话与业务逻辑,实现信令与媒体分离的电信级架构。文章深入解析了架构设计、核心配置、集群部署与性能优化,并附有配置模板,旨在帮助企业构建可水平扩展、高可用的通信解决方案。

dell8的博客 364

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

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

loveliuzz的博客 1万+

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

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

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

pengjunlee的博客 21万+

CH582低功耗实战:从1.2mA降到5uA,我的蓝牙广播功耗优化笔记

本文详细记录了沁恒CH582蓝牙芯片从1.2mA降至5μA的功耗优化全过程。通过建立基准测试环境、分层排查软件配置与IO状态、精细调优射频参数以及硬件层面的电源管理,实现了极致的低功耗表现。文章还提供了实用的功耗测量方法和典型问题排查指南,为蓝牙设备开发者提供了宝贵的参考经验。

weixin_30368405的博客 572

单细胞数据互转实战:从Scanpy的h5ad到Seurat对象的四种高效方法

本文针对单细胞数据分析中Scanpy的h5ad格式与Seurat对象互转的常见难题,详细对比了SeuratDisk、anndataR、schard和sceasy四种高效转换方法。文章从实战出发,剖析了每种方法的原理、操作流程、优缺点及避坑指南,并提供了清晰的选型策略,帮助用户根据数据特点选择最佳方案,实现跨平台数据的无缝衔接。

weixin_29099217的博客 446

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

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

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

铁路场景雷达点云目标识别与追踪系统

本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。

huanghm88的专栏 125

KNN(K近邻算法)

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

鲨鱼儿的博客 1万+

Python爬虫实战:微信小程序内容采集的全面指南

在移动互联网时代,微信小程序已成为企业和个人提供服务的重要渠道。小程序中包含了大量有价值的信息,但微信官方并未提供便捷的数据获取接口。本文将详细介绍如何使用Python爬虫技术采集微信小程序内容,包括最新技术方案、完整代码实现以及应对各种反爬机制的策略。小程序运行在微信封闭环境中,无法直接访问数据通信主要通过HTTPS加密传输内容动态加载,依赖JavaScript渲染微信有严格的反爬机制。

2201_76125261的博客 3116

【数据分析】R语言分段结构方程模型手把手教程(Piecewise Structural Equation Model)

分段结构方程模型(Piecewise Structural Equation Model, SEM)是一种用于分析变量之间因果关系的统计方法。它通过将复杂的因果关系分解为多个简单的线性模型来评估变量之间的直接和间接效应。与传统的结构方程模型(SEM)不同,分段结构方程模型不需要假设数据的多变量正态分布,因此在处理非正态数据时更为灵活。

专注生信领域 2648

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

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

Mr_marsa的博客 3942

Devexpress16.2.6破解工具

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

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

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

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

qq_45700097的博客 3657

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

机器学习实战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、付费专栏及课程。

余额充值