k-临近算法

算法步骤

k 临近算法的伪代码,对位置类别属性的数据集中的每个点依次执行以下操作:

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

Python 代码为 kNN.py 的 classify0方法。

def classify0(inX, dataSet, label, k):
'''
kNN 算法实现函数
输入参数解释如下
inX: 输入数据
dataSet: 已有的数据集, array 类型
labels: 已有数据集的已知标签, list 类型
k: k临近算法中的k值(通常, k < 20)
'''
dataSetSize = dataSet.shape[0] # 获取数据集中的数据条数
diffMat = np.tile(inX, (dataSetSize, 1) ) - dataSet # 获取差值
sqDiffMat = diffMat ** 2 # 矩阵中的每个元素 ^2
sqDistances = sqDiffMat.sum(axis = 1) # 对每行进行求和
distances = sqDistances ** (0.5) # 开平方,得到真正的距离
sortedDistIndicies = distance.argsort() # 得到脚标的排序,排在越前面,距离越近
classCount = {}
for i in range(k):
# 选择距离最小的k个点进行投票
voteIlabel = labels[sortedDisIndicies[i]] # 得到label
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
# get 的第二个参数 default -- 如果指定键的值不存在时,返回该默认值值。
pass
# 下面进行最后排序
sortedClassCount = sorted(classCount.iteritems(),
key = operator.itemgetter(1),
reverse = True) # 结果为列表
return sortedClassCount[0][0]
pass

另:算法中的几个方法的例子

因为算法中用到了numpy中的一些方法,这些方法以前没接触过,放一些截图在这里可以直观的理解这些方法:

np.shape

返回 array 的“形状”, 长宽:

np.tile

把数据进行某种“平铺”操作。

**运算符

array 中每个元素 ^2

sum 方法

对array 可以使用 sum 方法进行求和操作,但是sum 方法可以有参数:

axis = 1 代表了对每行分别进行求和

sorted 方法

测试

代码为: kNN.py

python kNN.py

可以看到输出,这里使用[0,0] 作为输入数据,输出结果应该是B。

虽然这个代码实际意义不大,但是可以作为学习kNN入门的一个不错的示例。

[Machine-Learning] K临近算法-简单例子的更多相关文章

  1. 机器学习(Machine Learning)算法总结-K临近算法

    一.算法详解 1.什么是K临近算法 Cover 和 Hart在1968年提出了最初的临近算法 属于分类(classification)算法 邻近算法,或者说K最近邻(kNN,k-NearestNeig ...

  2. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  3. 秒懂机器学习---k临近算法(KNN)

    秒懂机器学习---k临近算法(KNN) 一.总结 一句话总结: 弄懂原理,然后要运行实例,然后多解决问题,然后想出优化,分析优缺点,才算真的懂 1.KNN(K-Nearest Neighbor)算法的 ...

  4. K临近算法

    K临近算法原理 K临近算法(K-Nearest Neighbor, KNN)是最简单的监督学习分类算法之一.(有之一吗?) 对于一个应用样本点,K临近算法寻找距它最近的k个训练样本点即K个Neares ...

  5. [Machine Learning] 机器学习常见算法分类汇总

    声明:本篇博文根据http://www.ctocio.com/hotnews/15919.html整理,原作者张萌,尊重原创. 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多 ...

  6. 机器学习-- 入门demo1 k临近算法

    1.k-近邻法简介 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法. 它的工作原理是:存在一个样本数据集合,也称作为 ...

  7. Machine Learning:PageRank算法

    1. PageRank算法概述 PageRank,即网页排名,又称网页级别.Google左側排名或佩奇排名.         在谷歌主导互联网搜索之前, 多数搜索引擎採用的排序方法, 是以被搜索词语在 ...

  8. Machine Learning系列--EM算法理解与推导

    EM算法,全称Expectation Maximization Algorithm,译作最大期望化算法或期望最大算法,是机器学习十大算法之一,吴军博士在<数学之美>书中称其为“上帝视角”算 ...

  9. k-近邻算法 简单例子

    from numpy import * import operator def create_data_set(): # 训练集与标签 group = array([[1.0, 1.1], [1.0, ...

随机推荐

  1. 基于FormsAuthentication的用户、角色身份认证

    一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否 ...

  2. Ubuntu上安装Karma失败对策

    在Ubuntu上安装Karma遇到超时 timeout 错误.Google了一下,国外的码农给了一个快捷的解决方案,实测可行,贴在这里: sudo apt-get install npm nodejs ...

  3. 网络监测工具-iftop教程

    在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop. 一.if ...

  4. input只能输入数字并限制长度

    <style> /*在chrome下移除input[number]的上下箭头*/ input::-webkit-outer-spin-button,input::-webkit-inner ...

  5. 批量修改一张表格的多个sheet名

    例如这样的函数: Sub aab() For x = 4 To 5 Sheets(x).Name = "10" & Format(x - 3, "00" ...

  6. linux指定nologin用户执行命令

    为了安全,使用nologin账号来运行程序, su -s /bin/bash -c "ls" www 这条命令到底做了什么呢?su -s 是指定shell,这里www用户是nolo ...

  7. openSUSE4.1 安装docker

    安装完Leap后,通过YaST-Software Management安装docker. 安装 docker . yast2-docker. ruby2.1-rubygem-docker-api  . ...

  8. 流量三角形:并非简单的"统计学"

    又忙了一周多,今天过来再整理一些东西.国内做产险精算的,准备金的居多,从精算部落中的帖子的跟帖情况可见一斑.既然准备金更容易受到大家的关注,今天再整理一个关于准备金的个人看法,给精算部落收敛一下人气, ...

  9. zabbix利用自带的模板监控mysql数据库

    zabbix利用自带的模板监控mysql数据库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有些东西你不会的时候觉得它特别难,但是当你去做的时候就发现如此的简单~zabbix功能 ...

  10. javascript原型对象

    先来做个复习,ES5中有有几种数据类型呢? 5种基本数据类型 Undefined Null Boolean Number String 1种复杂数据类型 Object 除了基本数据类型,万物皆对象,记 ...