# -- coding: utf-8 --
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 classify0(inX,dataSet,labels,k):
print 'inX'
print inX
#获取行数
dataSetSize = dataSet.shape[0]
print 'dataSetSize:'
print dataSetSize #将用于分类的输入向量重复训练集样本的行数-训练集样本
print 'tile(inX,(dataSetSize,1))'
print tile(inX,(dataSetSize,1)) diffMat = tile(inX,(dataSetSize,1))-dataSet
print 'diffMat'
print diffMat #将差值做平方操作
sqDiffMat = diffMat**2
print 'sqDiffMat'
print sqDiffMat #将矩阵按行相加
sqDistances = sqDiffMat.sum(axis=1)
print 'sqDistances'
print sqDistances
#相加后开根号
distances = sqDistances**0.5
print'distances'
print distances #按从小到大大索引排序 假如[3,1,2],排序结果为[1,2.0],结果应该是训练集的列数
sortedDistIndicies = distances.argsort()
print 'sortedDistIndicies'
print sortedDistIndicies
classCount = {}
#遍历
for i in range(k):
#sortedDistIndicies[i]获取距离按照索引排序后的第i个值
#labels[sortedDistIndicies[i]]获取距离索引对应的Label
print 'I='+str(i)
#获取当前索引对应的标签
voteIlabel = labels[sortedDistIndicies[i]]
print 'voteIlabel='+voteIlabel
print 'classCount.get(voteIlabel,0)='+str(classCount.get(voteIlabel,0)) #对标签进行计数
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
print 'classCount'
print classCount
#对获取的标签通过数量进行逆序排序
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
print 'sortedClassCount'
print sortedClassCount
return sortedClassCount[0][0] group,labels=kNN.createDataSet();
print group
print labels
print kNN.classify0([0.1,0.2],group,labels,3)

最终的输出结果为

[[ 1. 1.1]
[ 1. 1. ]
[ 0. 0. ]
[ 0. 0.1]]
['A', 'A', 'B', 'B']
inX
[0.1, 0.2]
dataSetSize:
4
tile(inX,(dataSetSize,1))
[[ 0.1 0.2]
[ 0.1 0.2]
[ 0.1 0.2]
[ 0.1 0.2]]
diffMat
[[-0.9 -0.9]
[-0.9 -0.8]
[ 0.1 0.2]
[ 0.1 0.1]]
sqDiffMat
[[ 0.81 0.81]
[ 0.81 0.64]
[ 0.01 0.04]
[ 0.01 0.01]]
sqDistances
[ 1.62 1.45 0.05 0.02]
distances
[ 1.27279221 1.20415946 0.2236068 0.14142136]
sortedDistIndicies
[3 2 1 0]
I=0
voteIlabel=B
classCount.get(voteIlabel,0)=0
I=1
voteIlabel=B
classCount.get(voteIlabel,0)=1
I=2
voteIlabel=A
classCount.get(voteIlabel,0)=0
classCount
{'A': 1, 'B': 2}
sortedClassCount
[('B', 2), ('A', 1)]
B

  

K-近邻算法学习的更多相关文章

  1. 机器学习2—K近邻算法学习笔记

    Python3.6.3下修改代码中def classify0(inX,dataSet,labels,k)函数的classCount.iteritems()为classCount.items(),另外p ...

  2. 02-16 k近邻算法

    目录 k近邻算法 一.k近邻算法学习目标 二.k近邻算法引入 三.k近邻算法详解 3.1 k近邻算法三要素 3.1.1 k值的选择 3.1.2 最近邻算法 3.1.3 距离度量的方式 3.1.4 分类 ...

  3. 机器学习实战 - python3 学习笔记(一) - k近邻算法

    一. 使用k近邻算法改进约会网站的配对效果 k-近邻算法的一般流程: 收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据.一般来讲,数据放在txt文本文件中,按照一定的格式进 ...

  4. R语言学习笔记—K近邻算法

    K近邻算法(KNN)是指一个样本如果在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.即每个样本都可以用它最接近的k个邻居来代表.KNN算法适 ...

  5. 基本分类方法——KNN(K近邻)算法

    在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...

  6. 从K近邻算法谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...

  7. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  8. 分类算法----k近邻算法

    K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...

  9. 用Python从零开始实现K近邻算法

    KNN算法的定义: KNN通过测量不同样本的特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.K通 ...

  10. K近邻算法小结

    什么是K近邻? K近邻一种非参数学习的算法,可以用在分类问题上,也可以用在回归问题上. 什么是非参数学习? 一般而言,机器学习算法都有相应的参数要学习,比如线性回归模型中的权重参数和偏置参数,SVM的 ...

随机推荐

  1. Linux环境安装phpredis扩展

    php訪问redis须要安装phpredis扩展.phpredis是用纯C语言写的. phpredis下载地址 https://github.com/phpredis/phpredis 最新的版本号是 ...

  2. 【iOS开发-47】怎样下载iOS 7.1 Simulator 以及iOS 8离线的Documentation这些文件?

    (1)最官方的解决的方法 在Xcode6里面提供下载. 依照下图找到下载就可以. 一般建议把以下的自己主动检查更新和下载的框框勾起来,这样它会帮我们自己主动下载. watermark/2/text/a ...

  3. POJ 3254 Corn Fields 状态压缩DP (C++/Java)

    id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...

  4. opecv2 MeanShift 使用均值漂移算法查找物体

    #if !defined OFINDER #define OFINDER #include <opencv2\core\core.hpp> #include <opencv2\img ...

  5. BZOJ4477: [Jsoi2015]字符串树

    [传送门:BZOJ4477] 简要题意: 给出一棵n个点的树,树上的边都代表一个字符串,给出Q个询问,每个询问输入x,y和字符串s,求出x到y的路径上以s为前缀的字符串个数 题解: 自己yy了一波可持 ...

  6. hpuoj--校赛--爬楼梯(模拟)

    问题 E: 感恩节KK专场--爬楼梯 时间限制: 1 Sec  内存限制: 1000 MB 提交: 382  解决: 89 [提交][状态][讨论版] 题目描述 来机房比赛的时候大家都会爬楼梯,但是每 ...

  7. Autofac依赖注入框架

    最近使用Autofac框架做项目的依赖注入,感觉挺好用的. 没有深入研究,只是拿来用用,具体可以去官网看看:https://autofac.org/. 这里只是贴一下最近项目的配置: public p ...

  8. Edge浏览器开发人员工具

    UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Ch ...

  9. Vue和vue-template-compiler版本之间的问题

    今天把远程仓库拉下项目,运行'npm run dev'时,报错 Module build failed: Error: Cannot find module 'vue-template-compile ...

  10. 紫书 习题 10-3 UVa 1643(计算几何 叉乘)

    直观感觉对角线重合的时候面积最大 然后可以根据方程和割补算出阴影部分的面积 注意知道两点坐标,可以求出与原点形成的三角形的面积 用叉乘,叉乘的几何意义以这两个向量为边的平行四边形的面积 所以用叉乘除以 ...