kNN算法 k-Nearest Neighbors algorithm
2015-11-16 22:59
477 查看
对照着书中的代码,自己有一定的python基础,但是会的比较简单,参考网上的python教程,推荐一下
廖雪峰先生的网站,http://www.liaoxuefeng.com/
#我用的是win10 因为官网上的numpy是32位的,下载了安装不靠谱,用的python **install也不行,所以参考了下面的方法
http://blog.csdn.net/hechenghai/article/details/47703079 如果出现pip的问题,是配置不对,
http://www.crifan.com/run_pip_install_django_error_pip_is_not_recognized_as_an_internal_or_external_command_operable_program_or_batch_file/
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):#inX为目标点, dataSet为搜集的4个点, labels为已经分类好的AB, k为前k个最近的点
dataSetSize = dataSet.shape[0]#返回dataSet的行数,即搜集了几个数据
diffMat = tile(inX, (dataSetSize, 1)) - dataSet#tile(list, list2)list是待操作list, list2是要复制的方式
sqDiffMat = diffMat**2#对每一个数字平方
sqDistances = sqDiffMat.sum(axis = 1)#axis=1是对每一行做加法 即 平方和
#print sqDistances
distances = sqDistances**0.5 #开平方
#print "distances", distances
sortedDistance = distances.argsort() #升序排列,获得距离从近到远的排序,返回的是序号
#print 'sortedDistance', sortedDistance
#return sortedDistance
classCount={}#一个空的字典
for i in range(k):
voteIlabel = labels[sortedDistance[i]]#voteIlabel是labels中最近的第一个字母
#print 'voteIlabel', voteIlabel, "-----" ,classCount
classCount[voteIlabel] = classCount.get(voteIlabel, 0 ) + 1 #get函数 如果查voteIlabel不存在字典中,取0,存在就+1
sortedClassCount = sorted(classCount.iteritems(),
key = operator.itemgetter(1), reverse=True)
#operator.itemgetter(1)应该是区标号为1的值 iteritems是为字典序列化, reverseTrue是默认false 升序
return sortedClassCount[0][0] #返回数组
#asdf
group, labels = createDataSet()
print group, labels
print classify0([0,0], group, labels, 4)
#当k=4的时候是没有意义的,因为k=4的时候会对数组中的数据自动排序,A会跑到前面,
#因为sorted()是按照第字典的第二个数据排序的,当4个都检查完毕的时候,会把A放在前面
#我用的是win10 因为官网上
廖雪峰先生的网站,http://www.liaoxuefeng.com/
#我用的是win10 因为官网上的numpy是32位的,下载了安装不靠谱,用的python **install也不行,所以参考了下面的方法
http://blog.csdn.net/hechenghai/article/details/47703079 如果出现pip的问题,是配置不对,
http://www.crifan.com/run_pip_install_django_error_pip_is_not_recognized_as_an_internal_or_external_command_operable_program_or_batch_file/
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):#inX为目标点, dataSet为搜集的4个点, labels为已经分类好的AB, k为前k个最近的点
dataSetSize = dataSet.shape[0]#返回dataSet的行数,即搜集了几个数据
diffMat = tile(inX, (dataSetSize, 1)) - dataSet#tile(list, list2)list是待操作list, list2是要复制的方式
sqDiffMat = diffMat**2#对每一个数字平方
sqDistances = sqDiffMat.sum(axis = 1)#axis=1是对每一行做加法 即 平方和
#print sqDistances
distances = sqDistances**0.5 #开平方
#print "distances", distances
sortedDistance = distances.argsort() #升序排列,获得距离从近到远的排序,返回的是序号
#print 'sortedDistance', sortedDistance
#return sortedDistance
classCount={}#一个空的字典
for i in range(k):
voteIlabel = labels[sortedDistance[i]]#voteIlabel是labels中最近的第一个字母
#print 'voteIlabel', voteIlabel, "-----" ,classCount
classCount[voteIlabel] = classCount.get(voteIlabel, 0 ) + 1 #get函数 如果查voteIlabel不存在字典中,取0,存在就+1
sortedClassCount = sorted(classCount.iteritems(),
key = operator.itemgetter(1), reverse=True)
#operator.itemgetter(1)应该是区标号为1的值 iteritems是为字典序列化, reverseTrue是默认false 升序
return sortedClassCount[0][0] #返回数组
#asdf
group, labels = createDataSet()
print group, labels
print classify0([0,0], group, labels, 4)
#当k=4的时候是没有意义的,因为k=4的时候会对数组中的数据自动排序,A会跑到前面,
#因为sorted()是按照第字典的第二个数据排序的,当4个都检查完毕的时候,会把A放在前面
#我用的是win10 因为官网上
相关文章推荐
- google开源其机器学习系统-TesnorFlow
- Lingo中命令脚本文件使用范例
- 巴黎事件发生后,Facebook、Twitter、Google和Uber都做了什么?
- (imooc)sublime中的goto anything
- 基于Google云存储的开放Maven镜像中央仓库
- Django卸载重新安装
- Educational Codeforces Round 1 D. Igor In the Museum
- Gym 100796E Permutation Polygon [树状数组]
- FOJ有奖月赛-2015年11月 Problem F 攻占计划
- FOJ有奖月赛-2015年11月 Problem A 据说题目很水
- Codeforces 598DIgor In the Museum (BFS加离线优化)
- 【转载】美国人教你这样用Google
- <1> go 继承
- GO 利用 sync 库实现 Barrier
- Git Tutorial 4 - Goto Remote Repository
- 用GO扫描图片像素,复制图片
- mongo的关键字学习一
- Go语言中的时间格式
- Codeforces 592A. PawnChess
- google 搜索 使用美国虚拟主机