Python3.0 实现 机器学习 K-近邻算法

2017-11-09  本文已影响15人  程序员财富自由之路

K-近邻算法具体思想

(1)计算已知类别数据集中的点于点当前之间的距离

(2)按照距离递增顺序排序

(3)选取与当前距离最小的K个点

(4)确定K个点所在类别出现的频率

(5)返回k个点中出现频率最高的类别作为当前点的预测分类

不多说 直接看代码:

from numpy import *

import operator

#生成数据集

def createDataSet():

data = array([[1.1,1.0],[1,1],[0,0],[0,0.2]])

lables = ['A','A','B','B']

return data,lables

# 定义分类器参数介绍:

# inX 分类的输入向量[0,1]

# lables 指的是数据所属于的分类,['A','A','B','B']

# k是选中k个点 3

# dataSet指的是数据矩阵array([1,1.1],[1.0,1.0],[0,0],[0,0.2]])

def   classify0(inX, dataSet, labels, k):

dataSetSize = dataSet.shape[0]

# 求出坐标x,y差值

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

# 求出差值平方 difx**2 ,dify**y

sqDiffMat = diffMat**2

# 求出坐标差值的平方和

sqDistance = sqDiffMat.sum(axis=1)

# 平方和开根号就是与inX 真正相差的距离

distance = sqDistance**0.5

# 将distance排序,返回排序后的index这样可以定位到lable

sortedDistance = distance.argsort()

print(sortedDistance)

#选择距离最小的k个点

classCount = {}#dict 字典

for i in  range(k):

#选出距离最小排序后的 所属类型

voteLable = labels[sortedDistance[i]]

# 相当于 map 如果能取出 +1 不能默认是0

classCount[voteLable] = classCount.get(voteLable,0) +1

print(classCount.items())

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

return sortedClassCount[0][0]

data,lables = createDataSet()

my = classify0([1,1], data, lables,3)

print(my)

上一篇下一篇

猜你喜欢

热点阅读