import tensorflow as tf
import matplotlib.pyplot as plt
#from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
#from numpy import * #直接使用命名空间,后面不用使用.引用
import operator as op
def createData():
group = np.array([[1, 1.1],
[1, 1],
[0, 0],
[0, 0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels
#k临近算法
# 计算数据集和当前点之间的距离
# 选择距离最小的k个点
# 从最近的k个点中按照投票方法统计出现各个标签出现次数放入classCount中
# 输入向量inx n行,两列
def classify(inX, dataSet, label, k):
dataSetSize = dataSet.shape[0]
diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
sqdiffMat = diffMat**2 #只有在.dot才当做矩阵相乘
sqDistance = sqdiffMat.sum(axis=1)
distance = sqDistance**0.5
sortdisindex = np.argsort(distance) #从小到大依次返回对应元素下标而非值
classCount = {}
for i in range(k):
votelable = label[sortdisindex[i]]
classCount[votelable] = classCount.get(votelable, 0)+1
# 对字典排序方法: .iterms()得到字典返回的列表形似
# a = {'a':1,'b':3} a.items() 返回a = [('a',1),('b',3)]
# 使用operator.itemgetter(1)得到的是一个函数,用来得到一个列表中第几个元素
# 使用sorted内置函数默认按从大到小顺序排列
sortclassCount = sorted(classCount.items(), key=op.itemgetter(1), reverse=True)
return sortclassCount[0][0] #sortclassCount ('A', 2)
group, labels = createData()
print(classify([0, 0], group, labels, 3))