Python代码实现KNN算法
作者:Troublemaker201407 发布时间:2023-05-07 10:45:36
标签:Python,KNN
kNN算法是k-近邻算法的简称,主要用来进行分类实践,主要思路如下:
1.存在一个训练数据集,每个数据都有对应的标签,也就是说,我们知道样本集中每一数据和他对应的类别。
2.当输入一个新数据进行类别或标签判定时,将新数据的每个特征值与训练数据集中的每个数据进行比较,计算其到训练数据集中每个点的距离(下列代码实现使用的是欧式距离)。
3.然后提取k个与新数据最接近的训练数据点所对应的标签或类别。
4.出现次数最多的标签或类别,记为当前预测新数据的标签或类别。
欧式距离公式为:
distance= sqrt((xA0-XB0)^2+(xA1-XB1)^2+...+(xAn-XBn)^2)(若数据有n个特征项)
以下为代码实现:
#! /usr/bin/python
#coding=utf-8
from numpy import *
import operator
def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#训练数据样本集合
labels = ['A','A','B','B']#训练数据对应的类别
return group,labels
'''''
inX:用于分类的输入向量
dataSet:训练样本集合
labels:标签向量
k:k-近邻算法中的k
'''
def classify0(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0] #获取数组的维度,也就是获取训练样本的行数(样本数),若获取列数,则为shape[1]
diffMat = tile(inX,(dataSetSize,1)) - dataSet # tile 表示inX在重复dataSetSize行,重复1列。为输入向量与各个样本求取欧式距离做准备。
sqDiddMat = diffMat**2 #diffMat是输入向量与我们训练样本每个点相减得到的,**2表示值的结果取平方。
sqDistances = sqDiddMat.sum(axis=1)#默认为axis=0,axis=1以后就是将一个矩阵的每一行向量相加
distances = sqDistances**0.5 #对结果进行开平方,得到输入向量与每个训练样本中点的欧式距离
sorteDistIndicies = distances.argsort()#将距离结果按照从小到大排序获得索引值
classcount={} #这是一个字典,key为类别,value为距离最小的前k个样本点里面为该类别的个数。
for i in range(k):
voteIlabel = labels[sorteDistIndicies[i]]#获取距离最小的前k个样本点对应的label值
classcount[voteIlabel] = classcount.get(voteIlabel,0)+1 #如果之前的样本点label值与与现在的相同,则累计加1,否则,此次加1
sorteClassCount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=True) #针对calsscount获取对象的第1个域的值进行降序排序。也就是说根据类别的个数从大到小排序。
return sorteClassCount[0][0] #返回排序的字典的第一个元素的key,即分类后的类别
createDataSet()
print classify0([0.9,0.9],group,labels,3)
结果为:A
来源:http://blog.csdn.net/suhanjiao4897/article/details/78458587
0
投稿
猜你喜欢
- 在处理数据时,经常需要对数据分组计算均值或者计数,在Microsoft Excel中,可以通过透视表轻易实现简单的分组运算。而对于更加复杂的
- 本文实例为大家分享了Python制作简易计算器的具体代码,供大家参考,具体内容如下简易计算器简易计算器功能:实现输入,计算,输出功能;可以计
- 当成功安装了PHP,MYSQL后,我们一般要安装phpMyAdmin来管理你的mysql。本文介绍了phpMyAdmin 2.10.2的配置
- 之前使用smarty的时候,通常是在php程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量。这样不是不
- 一、设置开启SMTP服务并获取授权码0.如果使用第三方邮件服务器SMTP服务来发送邮件,首先要在邮箱设置里面开启POP3/SMTP/IMAP
- 反转链表首先讨论特殊节点如果节点在首位,则反转之后,首位节点的next值为nil。func reverse(head *ListNode)
- 函数嵌套和嵌套调用函数的嵌套函数的嵌套:在函数里面还有函数。分为外函数和内函数。嵌套函数是为函数内部服务的,比如减少代码的重复,想要调用函数
- 本文实例讲述了Python测试网络连通性。分享给大家供大家参考,具体如下:Python代码#!/usr/bin/python# -*- co
- 本文实例为大家分享了JS中FormData类实现文件上传的具体代码,供大家参考,具体内容如下上篇文章讲到了FormReader类实现文件上传
- 效果图:作用:将页面中的电话号码生成图片格式。<%Public Sub Com_CreatValidCode(pT
- 本文实例为大家分享了PHP实现简单注册登录系统的具体代码,供大家参考,具体内容如下目录结构如下,其中function文件夹下包含两个函数文件
- Base64是一种用64个字符来表示任意二进制数据的方法。用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文
- 这篇文章主要介绍了Python scrapy增量爬取实例及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- Python 操作 MySQL配置win_64Ubuntu14.04Python3.xpip安装pymysql模块直接使用pip安装 pip
- scrapy是用python开发的爬虫框架,从网上查了安装方法,感觉都说的挺复杂,而且很多教程都很有年头了,于是记录了自己的安装过程。首先安
- JavaScript toLowerCase 方法toLowerCase 方法用于把(英文)字符串转换为小写,并返回转换后的字符串。其语法如
- 在pycharm使用过程中,对于每次新建的python文件的时候,关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便。方法如下:1
- 一、持续集成简介持续集成:Continuous Integration简单来说就是指,程序员在开发代码的过程中,可以频繁的将代码部署到主干上
- mysql -uusername -pyourpassword yourdatabasename < c:\sqlfile.sql其中
- Mysql中Regexp常见用法模糊匹配,包含特定字符串# 查找content字段中包含“车友俱乐部”的记录select * from cl