简介

k近邻算法是数据分类一种常用的算法,属于监督学习算法的一类,它采用不同特征值之的距离进行分类。K近邻算法具有精度高、对异常值不敏感、无数据输入假定的优点,缺点是计算复杂度高、空间复杂度高。适用于数值型和标称型数据的计算分类。

K近邻算法的一般流程包括:

  1. 收集数据
  2. 准备数据:距离计算所需要的数值,最好是结构化的数据
  3. 分析数据
  4. 训练算法:根据训练样本得到
  5. 测试算法:计算错误率
  6. 使用算法

Case

已知四个点,及其对应的分类。我们需要根据已有数据,判别未知点的分类。首先导入数据。

from numpy import *

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

对未知点类别属性的判别执行以下的步骤

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

下面是代码的具体实现

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 def classfiy(inX, dataSet, labels, k):
# size of the dataSet array
dataSetSize = dataSet.shape[0]
<!--得到未知点和已知点的差值-->
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
<!--差值平方-->
sqDiffMat = diffMat ** 2
<!--未知点和已知点距离的平方和-->
sqDistances = sqDiffMat.sum(axis=1)
<!--得到距离差数据-->
distances = sqDistances ** 0.5
<!--argsort得到index的sort,index可以关联labels的index-->
sortedDistanceIndicts = distances.argsort()
print
classCount = {} for i in range(k):
voteIlabel = labels[sortedDistanceIndicts[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount data_set = createDataSet() result = classfiy([0, 0], data_set[0], data_set[1], 3)
<!--返回的结果是B-->
print result

最新文章

  1. android 修改videoview的宽度和高度
  2. js实现动态操作table
  3. STP的作用和操作
  4. 查看macbook是多少位
  5. mybatis使用
  6. [原]SyntaxHighlighter使用笔记
  7. A*算法实现
  8. 【Hadoop】执行start-dfs.sh出错
  9. 【BZOJ3277】串(后缀自动机)
  10. Asp.Net Core MongoDB
  11. api测试工具
  12. 51nod 抽卡大赛
  13. 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
  14. spring cloud shutdown graceful 优雅停机
  15. EJB (Enterprise Java Bean) 理解
  16. qt 窗口控件自动调整大小
  17. Jmeter远程启动负载机
  18. C#中如何判断线程当前所处的状态
  19. 重装win10后ubuntu引导项修复
  20. .net Stream篇(四)

热门文章

  1. 在离线环境中发布.NET Core至Windows Server 2008
  2. MVVM模式解析和在WPF中的实现(三)命令绑定
  3. Web性能优化:What? Why? How?
  4. SQL Server 2014 新特性——内存数据库
  5. 前端自动化构建工具gulp记录
  6. JavaScript基础知识总结(四)
  7. input type=&#39;file&#39;上传控件假样式
  8. Visual Studio Code——Angular2 Hello World 之 2.0
  9. Android菜单项内容大全
  10. 整体二分QAQ