简单的说,K-近邻算法就是采用测量不同特征值之间的距离 *** 来进行分类。它的工作原理是:存在一个样本数据 *** ,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系,输入没有标签的新数据之后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取出样本集中特征最相似数据的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是K-近邻算法名称的由来。
提问:亲,你造K-近邻算法是属于监督学习还是无监督学习呢?
从K-近邻算法的工作原理中我们可以看出,要想实施这个算法来进行数据分类,我们手头上得需要样本数据,没有样本数据怎么建立分类函数呢。所以,我们之一步就是导入样本数据 *** 。
建立名为kNN.py的模块,写入代码:
from numpy import *
import operator
def createDataSet:
group = array([[1.0%2c1.1]%2c[1.0%2c1.0]%2c[0%2c0]%2c[0%2c0.1]])
labels = [‘A’%2c’A’%2c’B’%2c’B’]
return group%2c labels
代码中,我们需要导入Python的两个模块:科学计算包NumPy和运算符模块。NumPy函数库是Python开发环境的一个独立模块,大多数Python版本里没有默认安装NumPy函数库,因此这里我们需要单独安装这个模块。大家可以从sourceforge上下载安装。
有很多的版本,这里我选择的是
numpy-1.7.0-win32-superpack-python2.7.exe。
K-近邻算法的具体思想如下:
(1)计算已知类别数据集中的点与当前点之间的距离
(2)按照距离递增次序排序
(3)选取与当前点距离最小的k个点
(4)确定前k个点所在类别的出现频率
(5)返回前k个点中出现频率更高的类别作为当前点的预测分类
Python语言实现K-近邻算法的代码如下:
运算结果如下:
输出结果是B:说明我们新的数据([0%2c0])是属于B类。
相信有很多朋友们对上面这个代码有很多不理解的地方,接下来,我重点讲解几个此函数的关键点,以方便读者们和我自己回顾一下这个算法代码。
classify函数的参数:
inX:用于分类的输入向量 dataSet:训练样本 *** labels:标签向量 k:K-近邻算法中的kshape:是array的属性,描述一个多维数组的维度。
tile(inX%2c (dataSetSize%2c1)):把inX二维数组化,dataSetSize表示生成数组后的行数,1表示列的倍数。整个这一行代码表示前一个二维数组矩阵的每一个元素减去后一个数组对应的元素值,这样就实现了矩阵之间的减法,简单方便得不让你佩服不行!
axis=1:参数等于1的时候,表示矩阵中行之间的数的求和,等于0的时候表示列之间数的求和。
argsort:对一个数组进行非降序排序
classCount.get(numOflabel%2c0) + 1:这一行代码不得不说的确很精美啊。get:该 *** 是访问字典项的 *** ,即访问下标键为numOflabel的项,如果没有这一项,那么初始值为0。然后把这一项的值加1。所以Python中实现这样的操作就只需要一行代码,实在是很简洁高效。
K-近邻算法(KNN)原理以及代码实现差不多就这样了,接下来的任务就是更加熟悉它,争取达到裸敲的地步。
在周四的一份网络安全公告中,育碧(Ubisoft)证实该公司在上周遭遇了一起“网络安全事件”。尽管攻击尝试似乎未能造成破坏,但出于安全方面的考虑,育碧还是采取了全公司范围内的密码重置措施,以防发生其它意外。在此期间,育碧暂停了部分服务,但坚称没有玩家数据受到损害。截止发稿时,该公司旗下所有游戏和服...
自 Windows 11 系统 2021 年 6 月发布以来,不断有各种活动欺骗用户下载恶意的 Windows 11 安装程序。虽然这种情况在过去一段时间里有所遏制,但现在又卷土重来,而且破坏力明显升级。 网络安全公司 CloudSEK 近日发现了一个新型恶意软件活动,看起来非常像是微软的官方网站...
据熟悉此事的人士透露,以色列阻止乌克兰购买NSO集团开发的飞马(Pegasus)间谍软件,因为其担心俄罗斯官员会因此而感到愤怒。在《卫报》和《华盛顿邮报》的联合调查之后,这一启示为以色列跟俄罗斯的关系有时会破坏乌克兰的进攻能力提供了新的见解–并跟美国的优先事项相矛盾。 自俄罗斯于2月24日对乌克兰...
英国政府拟议中的一项措施将迫使科技公司开发工具,让用户过滤掉任何被认为 “合法但有害”的材料。这些新措施被添加到英国即将出台的《网络安全法案》中,该法案将强制要求数字平台承担起保护用户免受有害内容影响的责任。 根据英国政府周五宣布的新计划,Facebook、Google和Twitter等科技平...
在2019年9月至2021年4月期间,Palo Alto Network的Unit 42监测了防火墙流量和由URL过滤器检测到的钓鱼网站。当人们纷纷开始在家工作时,每周新的网络钓鱼页面的数量明显增加。 威胁者通过利用员工不受企业防火墙保护的远程工作环境,改进并加强了他们的网络钓鱼攻击。网络安全专家...
Sophos报告称,最近观察到的一次攻击使用了基于python的勒索软件变种,目标是一个组织的VMware ESXi服务器,攻击者加密了所有虚拟磁盘。 攻击者使用了自定义Python脚本,该脚本一旦在目标组织的虚拟机管理程序上执行,就会使所有虚拟机脱机。 Sophos的安全研究人员解释说,攻击者相当...