首页 后端开发 Python教程 Python中KNN算法(k-近邻算法)的详细介绍(附示例)

Python中KNN算法(k-近邻算法)的详细介绍(附示例)

Jan 14, 2019 am 11:24 AM
python 数据分析

本篇文章给大家带来的内容是关于Python中KNN算法(k-近邻算法)的详细介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

KNN算法是一种数据分类算法,以距离样本k个最邻近数据的类别代表样本的类别,因此也叫作k-近邻算法。KNN算法是数据挖掘中最简单的方法之一,大致可分为以下几个步骤:

  • 训练数据:原数据集中所有数据类别的数据。

  • 测试数据:我们将要拿来测试的数据样本。

  • 处理数据

我们得到的测试数据,通常和训练数据是不同维的,这时候就需要我们将测试数据升维到和训练数据相同,python的numpy中自带了一个tile()函数可以帮助我们将测试数据升维。

  • 将数据向量化

测试数据升维后,我们为了计算距离样本点的距离,此时需要将数据向量化,所谓的向量化就很简单了,即将两个同维数据相减。

  • 计算欧式距离

欧式距离,即欧几里得距离,运用勾股定理即可求出,将升维后的测试数据和训练数据相减获得的向量组的每一个向量的平方和开方即可得到由距离组成的向量组。

  • 根据距离进行分类

选择k个距离样本点距离最小的数据,统计在这k个数据中哪类数据类别出现的频率最高,样本点的数据类别即可确定。

算法实现:

1.首先我们需要引入numpy以及operator,输入from numpy import *import operator

2.接下来我们需要定义一个knn函数,在knn函数中我们需要引入四个参数,分别为k、训练数据、测试数据和数据类别。

3.接下来我们需要先对数据进行升维操作,需要用到numpy下的tile(a,(b,c))函数,a为要进行升维操作的数据,也就是测试数据,b为要对测试数据升维的行数据,c为要对测试数据升维的列数据。

Python中KNN算法(k-近邻算法)的详细介绍(附示例)

4.在上一操作中,我们一般需要获得训练数据的行数和列数,这时需要用到shape()函数,shape()函数返回的是由训练数据的行和列组成的元组,我们想要知道训练数据的行数或列数只需通过数组元素下标的方式引用。

Python中KNN算法(k-近邻算法)的详细介绍(附示例)

5.数据的维度相同后,我们要将两数据相减得到一个向量,再计算这个向量每个值的平方和的开方即得测试数据到训练数据的距离,再调用argsort()函数将距离按照升序排列,不过该函数返回的是数组元素的下标。

Python中KNN算法(k-近邻算法)的详细介绍(附示例)

6.接下来我们为了直观的看到不同数据类别的出现次数,需要设置一个空字典来存放这些数据,在得到字典后,我们需要将字典按照不同数据类别的出现次数降序排列,进而返回字典的第一个值即得到测试数据的数据类别。

7.算法代码如下:

from numpy import *
import operator
def knn(k, test_data, train_data, labels):
    train_size = train_data.shape[0]    #获取训练数据的行数
    test_size = tile(test_data, (train_size, 1))    #将测试数据的行升维
    minus = test_size-train_data    #得到向量
    sq_minus = minus**2
    sum_sq_minus = sq_minus.sum(axis=1)        #得到平方后的每个数组内元素的和
    distc = sum_sq_minus**0.5
    sort_distc = distc.argsort()    #将距离按升序排列
    static = {}
    for i in range(0, k):
        vote = labels[sort_distc[i]]    #获取数据类型
        static[vote] = static.get(vote, 0)+1    #统计每个数据类型的出现次数
    sort_static = sorted(static.items(), key=operator.itemgetter(1), reverse=True)    #将字典中的元素按出现次数降序排列
    return sort_static[0][0]    #返回出现次数最多的数据类型
登录后复制

8.算法中需要对字典进行排序,因此需要用到sorted()函数,sorted()函数共有三个参数,分别为items(),operator.itemgetter(),reverse,默认的排序为升序,我们要想按照降序排列需要令第三个参数为True,在这里我们是按照字典的values进行排序的,因此我们需要输入sorted(static.items(), key=operator.itemgetter(1), reverse=True),operator.itemgetter()函数中的值为1时,是按照字典的values进行排序,值为0时,是按照字典的key进行排序。

Python中KNN算法(k-近邻算法)的详细介绍(附示例)

9.排序后访问元素的方式与访问二维数组元素的方式一致

Python中KNN算法(k-近邻算法)的详细介绍(附示例)

以上是Python中KNN算法(k-近邻算法)的详细介绍(附示例)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

debian readdir如何与其他工具集成 debian readdir如何与其他工具集成 Apr 13, 2025 am 09:42 AM

Debian系统中的readdir函数是用于读取目录内容的系统调用,常用于C语言编程。本文将介绍如何将readdir与其他工具集成,以增强其功能。方法一:C语言程序与管道结合首先,编写一个C程序调用readdir函数并输出结果:#include#include#includeintmain(intargc,char*argv[]){DIR*dir;structdirent*entry;if(argc!=2){

Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Debian OpenSSL如何配置HTTPS服务器 Debian OpenSSL如何配置HTTPS服务器 Apr 13, 2025 am 11:03 AM

在Debian系统上配置HTTPS服务器涉及几个步骤,包括安装必要的软件、生成SSL证书、配置Web服务器(如Apache或Nginx)以使用SSL证书。以下是一个基本的指南,假设你使用的是ApacheWeb服务器。1.安装必要的软件首先,确保你的系统是最新的,并安装Apache和OpenSSL:sudoaptupdatesudoaptupgradesudoaptinsta

apache属于什么服务 apache属于什么服务 Apr 13, 2025 pm 12:06 PM

Apache是互联网幕后的英雄,不仅是Web服务器,更是一个支持巨大流量、提供动态内容的强大平台。它通过模块化设计提供极高的灵活性,可根据需要扩展各种功能。然而,模块化也带来配置和性能方面的挑战,需要谨慎管理。Apache适合需要高度可定制、满足复杂需求的服务器场景。

apache是什么语言写的? apache是什么语言写的? Apr 13, 2025 pm 12:42 PM

Apache是用C语言编写的。该语言提供了速度、稳定性、可移植性和直接硬件访问,使其成为网络服务器开发的理想选择。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

CentOS上如何进行PyTorch模型训练 CentOS上如何进行PyTorch模型训练 Apr 14, 2025 pm 03:03 PM

在CentOS系统上高效训练PyTorch模型,需要分步骤进行,本文将提供详细指南。一、环境准备:Python及依赖项安装:CentOS系统通常预装Python,但版本可能较旧。建议使用yum或dnf安装Python3并升级pip:sudoyumupdatepython3(或sudodnfupdatepython3),pip3install--upgradepip。CUDA与cuDNN(GPU加速):如果使用NVIDIAGPU,需安装CUDATool

See all articles