python实现knn算法

python 实现K近邻算法并进行可视化 调用sklearn的knn算法进行结果对比   K近邻算法 思想:不知其人视其友 K近邻算法(knn)实现步骤:     计算当前点与已知类别数据集中的点的距离     距离递增排序,选出距离最小的k个点     确定前k个点类别出现的频率     将频率最高的类别作为当前点的预测分类 完整代码实现 #!/usr/bin/python # -*- coding: utf-8 -*- # @author: T # 导入数据集 f... 阅读详情

刚接触机器学习不久,在看《机器学习实战》,今天将书上的knn算法敲了一遍,上写的很精炼,刚接触python不久的,还没接触过numpy,所以写一个读书笔记。


knn属于十大数据挖掘算法中算是比较简单的了。不过作用不小,他是一个监督学习分类器类别的算法,所以需要数据的练习。

  • 优点:精度高,对异常数值不敏感,无数据输入假定。
  • 缺点:计算复杂度高,空间复杂度高
  • 适用数据范围:数值型和标称型

什么是knn算法:

简单的说,K-近邻算法就是采用测量不同特征值之间的距离方法来进行分类。它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系,输入没有标签的新数据之后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取出样本集中特征最相似数据的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是K-近邻算法名称的由来。


使用Python导入数据
首先创建名为KNN.py的python模块,里面的代码是:

#!/usr/bin/python
# -*- coding: utf-8 -*-

#__author__ = 'Mr Cai'


from numpy import  *
import  operator

def creatrDataSet():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return  group,labels

运行程序
创建一个名为run.py的python模块,我们将要用到KNN.py模块中的函数,所以在run.py中用import KNN导入模块。

  • 实现K-近邻算法的一般流程:

    (1)计算已知类别数据集中的点与当前点之间的距离
    (2)按照距离递增次序排序
    (3)选取与当前点距离最小的k个点
    (4)确定前k个点所在类别的出现频率
    (5)返回前k个点中出现频率最高的类别作为当前点的预测分类


**代码实现run.py**
#!/usr/bin/python
# -*- coding: utf-8 -*-

#__author__ = 'Mr Cai'
from numpy import *
import operator
import KNN

#获取标准
group, labels = KNN.creatrDataSet()

def classify(inX, dataSet, labels, k):

    #得到数组的行数。即知道有几个训练数据
    dataSetSize = dataSet.shape[0]

    #tile:numpy中的函数。tile将原来的一个数组,扩充成了4个一样的数组。diffMat得到了目标与训练数值之间的差值。矩阵之差
    diffMat = tile(inX, (dataSetSize,1)) - dataSet    #tile(x,(y,z))   将x复制z遍,复制y行

    #矩阵的各个元素分别平方
    sqDiffMat = diffMat**2

    #对应列相乘,即得到了每一个距离的平方
    sqDistances = sqDiffMat.sum(axis=1)   #axis = 0,列相加   axis = 1,行相加

    #开方,得到距离。
    distances = sqDistances**0.5

    #升序排列
    sortedDistances = distances.argsort()  #从小到大返回排序的索引

    #选择距离最小的k个点。
    classCount = {}
    for i in range(k):
        numOflabel = labels[sortedDistances[i]]
        classCount[numOflabel] = classCount.get(numOflabel,0) + 1 #统计

    #排序
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1),reverse=True)

    return sortedClassCount[0][0]

if __name__ == '__main__':
    print classify([0,0],group,labels,3)

代码中的知识点总结:

  • 字典的get()函数
    字典的get()函数接收两个参数。第一个参数是所要查询的key,第二个则是如果字典中不存在key返回的值。
    例:
    d = {‘key’:’value’}
    print d.get(‘key’, ‘not found’)
    也就是完成了下面的功能:
if d.has_key('key'):    
  print d['key']   
else:   
  print 'not found'   
  • 字典的item(),与itemgetter()的区别
    python字典的items方法作用:是可以将字典中的所有项,以列表方式返回。如果对字典项的概念不理解,可以查看Python映射类型字典基础知识一文。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的。

    python字典的iteritems方法作用:与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器。
例:
>>>x = {'title':'python web site','url':'www.iplaypython.com'}
>>>x.items()
>>>[('url', 'www.iplaypython.com'), ('title', 'python web site')]
例:
>>> f = x.iteritems()
>>> f
<dictionary-itemiterator object at 0xb74d5e3c>
>>> type(f)
<type 'dictionary-itemiterator'>    #字典项的迭代器
>>> list(f)
[('url', 'www.iplaypython.com'), ('title', 'python web site')]

  • python中的sorted()函数详解
    sorted函数:
    Python内置的排序函数sorted可以对list或者iterator进行排序,官网文档见:http://docs.python.org/2/library/functions.html?highlight=sorted#sorted,该函数原型为:
    sorted(iterable[, cmp[, key[, reverse]]])
    参数解释:
    (1)iterable指定要排序的list或者iterable,不用多说;
    (2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如:
    students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,例如这里要通过比较第三个数据成员来排序,代码可以这样写:
    students = [(‘john’, ‘A’, 15), (‘jane’, ‘B’, 12), (‘dave’, ‘B’, 10)]
    sorted(students, key=lambda student : student[2])
    (3)key为函数,指定取待排序元素的哪一项进行排序,函数用上面的例子来说明,代码如下:
    sorted(students, key=lambda student : student[2])
    key指定的lambda函数功能是去元素student的第三个域(即:student[2]),因此sorted排序时,会以students所有元素的第三个域来进行排序。
    有了上面的operator.itemgetter函数,也可以用该函数来实现,例如要通过student的第三个域排序,可以这么写:
    sorted(students, key=operator.itemgetter(2))
    sorted函数也可以进行多级排序,例如要根据第二个域和第三个域进行排序,可以这么写:
    sorted(students, key=operator.itemgetter(1,2))
    即先根据第二个域排序,再根据第三个域排序。
    (4)reverse参数就不用多说了,是一个bool变量,表示升序还是降序排列,默认为false(升序排列),定义为True时将按降序排列。

  • operator.itemgetter(1)的解释
    因为sorted()函数中的key值需要接收一个函数,这边的意思是按照字典中的第二个参数排序。
    operator.itemgetter函数
    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。

a = [1,2,3] 
>>> b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值
>>> b(a) 
2 

>>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值
>>> b(a) 
(2, 1)

要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。

KNN算法原理及python实现 1 KNN算法原理 2 python手工实现KNN算法 3 sklearn实现KNN算法 1 KNN算法原理 1.1 基本概念 KNN(K-NearestNeighbor)即K近邻算法,是数据挖掘分类技术中最简单的方法之一。所谓K近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。 1.2 KNN算法原理 假设特征空间有8个样本点,其中红色点为良性肿瘤,蓝色点为恶性肿瘤,现在要预测绿色点是良性肿瘤还是恶性肿瘤,我们需要计算出绿色点到所有其他样本点的距离,选择出距离最小的K. 阅读详情

相关推荐

最简单的K近邻算法 KNN python实现

这是一个最简单的KNN 算法实现 题目来源于 1,首先,必须熟悉Numpy的几个常用函数,都是关于矩阵运算的 1.0 首先,我们使用这种方式来构建一个矩阵: matrixA =  array( [  [1,  2.5,   3], [2,  3,   9.9],                         ]) 1.1  shape      用来求取矩阵的行,列数

Andy 日本語の。。。。。 558

python实现KNN算法

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

aouiylfjh的博客 5515

机器学习——最基础的分类算法-k近邻算法 kNN简介及Jupyter基础实现及Python实现

最基础的分类算法-k近邻算法 kNN简介及Jupyter基础实现及Python实现 k-Nearest Neighbors简介 对于该图来说,x轴对应的是肿瘤的大小,y轴对应的是时间,蓝色样本表示恶性肿瘤,红色样本表示良性肿瘤,我们先假设k=3,这个k先不考虑怎么得到,先假设这个k是通过程序员经验得到。 假设此时来了一个新的样本绿色,我们需要预测该样本的数据是良性还是恶性肿瘤。我们从训练样本中...

Liuyt_61的博客 1380

K近邻(KNN)原理及python实现

knn最近邻入门学习以及python代码实现

qq_46033892的博客 4111

优快云积分获取与管理全攻略

技术社区积分系统是知识共享生态的核心激励机制,通过量化用户贡献实现资源交换。其底层逻辑遵循Web2.0时代的UGC经济模型,用户通过内容创作、社区互动等行为积累虚拟资产。在开发者社区场景中,积分体系能有效促进技术文档、工具源码等资源的流通,优快云作为国内头部平台,其积分规则具有典型参考价值。掌握签到策略、内容互动技巧和资源上传规范等实操方法,可系统性提升积分获取效率。2023年新规强化了连续签到奖励和互动质量检测机制,结合GitHub等开源平台资源互补,能构建更高效的技术资源获取路径。

weixin_34233974的博客 218

[LVGL] 刷新率优化

实验硬件:STM32F407ZGT6;2.4寸TFT-LCD模块(ILI9341驱动芯片、XTP2046触摸芯片)本文目标:lvgl的刷新率优化,解决拉帘子问题注意:本文在LVGL显示触摸代码移植完成的基础上进行,第一次使用lvgl可根据前文一步步移植,点击下方传送门查看相关文章传送门:STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(一)STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(二)[LVGL] 显示代码移植 基于STM32F4。

2301_77117901的博客 2784

Python语言实现KNN算法

Python语言重写knn算法 前文:这是一个刚入门机器学习和Python语言的随缘记录学习过程的博客。 那我们就开始。 knn算法原理 不清楚的近邻算法_百度百科,点击这里。 代码内容 编码习惯有不好的地方,请大方地提出您的建议 导入模块 import random import time # 测试性能的用途 import math from sklearn.datasets import l...

tida_yake的博客 2831

VESC电调高级调参指南:电机校准与性能优化实战解析

本文详细解析了VESC电调的高级调参方法,包括电机校准与性能优化实战技巧。从基础参数设置到高级机械参数优化,再到动态性能调优,提供了全面的调参指南。特别针对电机类型、功率设置、电池参数配置等关键环节给出实用建议,帮助用户充分发挥VESC电调的性能潜力。

weixin_30772105的博客 196

分类算法KNN的python实现

KNN算法是有监督学习中的分类算法,它是一种非参的,惰性的算法模型。非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设,与之相对的是线性回归(我们总会假设线性回归是一条直线)。也就是说KNN建立的模型结构是根据数据来决定的,这也比较符合现实的情况,毕竟在现实中的情况往往与理论上的假设是不相符的。惰性的意思是指模型在使用前不会被训练,只有当使用的时候才会被训练。KNN算法优点: 简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。

辉的博客 4307

芒果YOLOv8改进16:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

YOLOv8代码改进教程:即插即用|新颖轻量化非对称多级压缩LADH检测头🎈

包括YOLOv5、YOLOv7、YOLOv8等模型改进 5611

Autosar模式管理入门系列02-EcuM

对EcuM状态机切换过程及模块中重要API进行介绍。

initiallizer的博客 7092

机器学习:Python实现KNN算法

使用Python实现KNN 3 实验背景 本实验将演示使用Python的第三方库Numpy实现KNN算法,对训练样本进行建模,并对待测样本进行类别划分。KNN算法需要确定K值、距离度量和分类决策规则。 5.2 定义KNN函数 5.3 显示待测样本的标签完成分类 提示:shape用法

m0_52331159的博客 1270

Power EM与Signal EM解决办法与原理分析

1.面对power EM,首先检查missing via,补全via,还可以加宽,加密局部power mesh,一些power IO出pin有power EM问题,可以叠加多层线和垂直方向补power形成网络降低并联电阻和提供更多电流通路解决,这种方法还可以降低ir drop。3.先进工艺有一个via ladder的方法可以解决power/signal em问题,clock cell出pin绕线或者power rail连接power stripe通过搭梯子的方式连接,原理还是分流。

m0_61544122的博客 4743

k-邻近算法kNN及其python实现

k-邻近算法kNN    邻近法kNN是1967年提出的一种基本分类与回归方法。kNN中输入测试数据和训练样本,然后计算测试数据到每个训练样本之间的距离,接着选出距离最小的k个样本,根据k个样本的类别投票决定。K个样本中占多数的类别即为测试数据的类别。 一.k-邻近算法的优缺点: 1.优点:简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归、适合于多分类问题、可用

zonghengyuzhou的博客 970

高性能优化的本质

在很早之前,处理器性能的提升一般是通过减小元器件的尺寸,增加元器件的数量,提高主频来实现,这也是摩尔定律所说的,但是由于功耗的影响,主频不能一直增加。后来,由于英伟达的GPU的并行计算的出现,逐渐打破摩尔定律,人们利用多核,SIMD,SIMT来处理大量相同计算的数据,这极大的提高了效率。计算机的算力得到了巨大的提升,但是并行是困难的,对于有数据依赖的程序来说,处理并行是一件及其困难的事,但对于一些简单的数学库的计算,并行的实现相对简单。

发狂的小花的博客 273

ubuntu20 安装px4、mavros、QGroundControl

首先安装一下ant,否则没法运行,同时因20.04的缺少动态库libawt_xawt.so无法被Java8给调用,我的解决办法是去18.04把18.04的相同路径下的动态库libawt_xawt.so移动到20.04的/usr/lib/jvm/java-11-openjdk-amd64/lib/路径中。用rosdepc的时候,你得确保你用的是鱼香ROS的提供的ROS安装方法,否则是没有rosdepc的。make px4_sitl gazebo之前,可以安装一下gazebo的 模型。二、安装MAVROS。

qq_58060770的博客 3349

使用python实现knn算法_Python实现KNN邻近算法

简介邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样...

weixin_39591916的博客 362

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【python】KNN(K近邻算法)实现及可视化

文章目录KNN(K近邻算法)实现及可视化1 算法描述:2 KNN算法的Python实现:2.1 实践问题背景:2.2 目标:2.3 数据集:2.4 要求:2.5 实施步骤:3 改进:4 截止到3中改进的第二步,代码如下: KNN(K近邻算法)实现及可视化 1 算法描述: KNN的工作原理::给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻 近的k个实例,如果这k个实例的多数属于某个类别,那么新数据就属于这个类别。可以简单理解为:由那些离X最 近的k个点来投票

5041

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

KNN近邻算法原理及python实现

KNN(K-NearestNeighbor)即,是数据挖掘分类技术中最简单的方法之一。所谓K近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。假设特征空间有8个样本点,其中红色点为良性肿瘤,蓝色点为恶性肿瘤,现在要预测绿色点是良性肿瘤还是恶性肿瘤,我们需要计算出绿色点到所有其他样本点的距离,选择出距离最小的K个点,对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类。计算距离方法一般采用欧拉距离公式:n维特征空间欧式距离计算公式。

m0_73707081的博客 685

jre9下载 jdk9

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

机器学习实战笔记(Python实现)-02-k近邻算法(kNN)

机器学习实战笔记(Python实现)-02-k近邻算法(kNN) -- 下面来看一下书上对这个算法的原理介绍:存在一个训练样本集,并且每个样本都存在标签(有监督学习)。输入没有标签的新样本数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取出与样本集中特征最相似的数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,而且k通常不大于20。最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

 啸林  1万+

k邻近算法python代码_k近邻算法的Python实现

k近邻算法的Python实现0. 写在前面这篇小教程适合对Python与NumPy有一定了解的朋友阅读,如果在阅读本文的源代码时感到吃力,请及时参照相关的教程或者文档。1. 算法原理k近邻算法(k Nearest Neighbor)可以简称为kNN。kNN是一个简单直观的算法,也是机器学习从业者入门首选的算法。先看一个简单的应用场景。小例子设有下表,命名为为表1电影名称打斗镜头数量接吻镜头数量电影...

weixin_39847437的博客 222

k邻近算法python代码_K-近邻算法的python实现代码分享

k-近邻算法概述:所谓k-近邻算法KNN就是K-Nearest neighbors Algorithms的简称,它采用测量不同特征值之间的距离方法进行分类用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。k-近邻算法分析优点:精度高、对异常值不敏...

weixin_39626298的博客 246

K-邻近算法(KNN)详解+Python实现

1.什么是KNN算法? KNN(K-Nearest Neighbor)算法是机器学习算法中最基础,最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值的距离来进行分类。 k近邻算法简单,直观:对于一个需要预测的输入向量x,我们只需要在训练数据集中寻找k个与向量x最近的向量的集合,然后把x的类别预测为这k个样本中类别数最多的那一类。 1.1基于上述思想给出KNN算法过程 输入:训练数据集 其中: 输出:实例x所属的类y. (1)根据给定的距离度量,在训练集T中找出与x最临近的k个点,.

justorderman的博客 6662

knn算法python代码_k-近邻算法python代码实现(非常全)

1、k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用。它是一种经典简单的分类算法,当然也可以用来解决回归问题。2、kNN机器学习算法具有以下的特点:(1)思想极度简单(2)应用的数学知识非常少(3)解决相关问题的效果非常好(4)可以解释机器学习算法使用过程中的很多细节问题(5)更加完整地刻画机器学习应用的流程3...

weixin_39812039的博客 2582

k邻近算法python代码_用python实现k近邻算法的示例代码

K近邻算法(或简称kNN)是易于理解和实现的算法,而且是你解决问题的强大工具。什么是kNNkNN算法的模型就是整个训练数据集。当需要对一个未知数据实例进行预测时,kNN算法会在训练数据集中搜寻k个最相似实例。对k个最相似实例的属性进行归纳,将其作为对未知实例的预测。相似性度量依赖于数据类型。对于实数,可以使用欧式距离来计算。其他类型的数据,如分类数据或二进制数据,可以用汉明距离。对于回归问题,会返...

weixin_39611208的博客 247

Python KNN k-邻近算法 手动实现及分析 分类、回归、糖尿病预测实战

Python KNN k-邻近算法 算法原理 \qquad k-邻近算法的核心思想是未标记样本的类别,由距离其最近的k个邻近投票来决定。 \qquad 假设,我们有一个已经标记的数据集,即已经知道了数据集中每个样本所属的类别。此外,有一个未标记的数据样本,我们的任务是预测出这个数据样本所属的类别。k-邻近算法的原理是,计算待标记的数据样本和数据集中每个样本的距离,取距离最近的k个样本。待标记的数据...

Rp的博客 2863
上一篇: 数据挖掘学习路线
下一篇: ubuntu下解决因为/boot磁盘空间不足导致无法更新
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值