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. iOS应用程序的生命周期

    iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本infrastructure给所有app来运行,而你提供自己编写的代码来定制app的外观 ...

  2. 上传图片插件鼠标手cursor:pointer;不生效

    问题: 只在谷歌里失效; 解决: font-size:0; 参考: http://jingyan.baidu.com/article/48b558e32fabb67f38c09a81.html htt ...

  3. CSS使用position定位后导致元素浮动

    1.子元素 absolute/fixed定位后,子元素脱离文档流存在,它让出原来占的那个坑,父元素再也不能通过子元素来撑开高度了 <style> div{ position:absolut ...

  4. WP8.1 和UWP 如何使用下载网页的上的音频 并保存

    WP8.1: private async Task<StorageFile> GetVoiceData() { HttpClient httpclient = new HttpClient ...

  5. 基于Redis的爬虫平台的实现

    一.需求: 1.数据抓取:目标数据的下载.解析.入库功能. 2.数据服务:黑名单.灰名单等查询服务. 3.平台监控:平台各个模块的数据实时监控. 二.WEB端效果展示: 三.架构设计 下载器.解析器. ...

  6. c# unchecked关键字。byte 合并short

    参考MSDN 代码: public class BytesOperate { /// <summary> /// 计算校验和,SUM /// </summary> public ...

  7. Java实现冒泡排序

    冒泡排序思想就是将数列的相邻两个数比较,较大的数往后保存,小的数往前. package Sort; import java.util.Arrays; public class BubbleSort { ...

  8. .NET编译项目时出现《此实现不是 Windows 平台 FIPS 验证的加密算法的一部分》处理方法

    有用户提出在编译代码时出现源文件“D:\.......ervice.cs”未能打开(“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分.”)的问题,如下图所示: 对于上面的问题,只需 ...

  9. python os 命令,及判断文件夹是否存在

    使用前 import os导入模块   os模块: os.sep     可以取代操作系统特定的路径分割符 os.linesep  字符串给出当前平台使用的行终止符.例如,Windows使用'\r\n ...

  10. HDU 5053 the Sum of Cube(简单数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5053 题目大意: 求出A^3+(A+1)^3+(A+2)^3+...+B^3和是多少 解题思路: 设f(n)=1 ...