您的位置:首页 > 编程语言 > Python开发

KNN、k-近邻算法,python

2016-09-05 20:18 691 查看
//time :2016-9-5

//blog__author:Inc

//Addr:

原文来源:机器学习一书

实施Knn:

伪代码:

对未知类别属性的数据集中的每个点依次执行一下操作:

(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 classify0(inX,dataSet,labels,k):

dataSetSize=dataSet.shape[0] #得到第一维的维数

diffMat=tile(inX,(dataSetSize,1))-dataSet #

sqDiffMat=diffMat**2#

sqDistances=sqDiffMat.sum(axis=1)#

distances=sqDistances**0.5#欧式距离求当前点和已知类别点之间的距离

sortedDistIndicies=distances.argsort()#当前点与已知点距离排序,递增

classCount={}

for i in range(k):

voteIlabel=labels[sortedDistIndicies[i]] #按顺序得到labels的A 或B

classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #形式{‘B’:1}

sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),

reverse=True)

return sortedClassCount[0][0]

测试:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: