k-临近算法

算法步骤

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

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

Python 代码为 kNN.pyclassify0方法。

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. 正则表达式中的exec和match方法的区别

    正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...

  2. 基于ssh框架开发的购物系统的质量属性

    根据前面的博客,我们已经大致了解了ssh架构开发整体概念:Struts是一个实现了MVC模式的经典的框架:Hibernate是轻量级Java EE应用的持久层解决方案,以面向对象的方式提供了持久化类到 ...

  3. VS中使用svn注意事项

    1.程序需定期编译通过后上传SVN,每天可上传多次,根据个人程序开发进度决定,但每天晚下班前必须将当天的程序编译调试通过并上传SVN.每天早上上班首先需要更新SVN最新版本. 上传的工作流程应该是,更 ...

  4. LeetCode Sum of Left Leaves

    原题链接在这里:https://leetcode.com/problems/sum-of-left-leaves/ 题目: Find the sum of all left leaves in a g ...

  5. winserver2008 DNS 很详细

    from http://www.it165.net/admin/html/201312/2182.html DNS(Domain Name System域名系统)区域化管理 分布式 层次性 域名空间结 ...

  6. post- build event

    Ref:http://blog.csdn.net/teng_ontheway/article/details/8307410 Ref: http://blog.csdn.net/sodickbird/ ...

  7. TCPL 札记

    1.函数原型符合设计要求,函数定义符合认知规律,做到见名知义,最少词汇量包含最大的信息量. 2.合理运用空行提高代码的可读性.从框架上来说有: 变量定义 初始化变量 处理 输出 返回值 3.采用伪码的 ...

  8. [转]初探Metasploit的自动攻击

    1. 科普Metasploit   以前只是个Back Track操作系统(简称:BT) 下的攻击框架,自成继承了后攻击渗透模块,隐隐有成为攻击平台的趋势. 我们都戏称它为美少妇,很简单,msf. 它 ...

  9. Android Bitmap转换WebPng图片导致损坏的分析及解决方案

    出现问题的code!!! private void saveImage(String uri, String savePath) throws IOException { // 创建连接 HttpUR ...

  10. CentOS7上部署MONO和Jexus

    一:安装MONO 首先通过putty连接上linux,我这里的linux版本为CentOS,连上后首先执行: rpm --import "http://keyserver.Ubuntu.co ...