MichaelShu 发表于6个月前

• 发表于 6个月前
• 阅读 14
• 收藏 0
• 评论 0

Python3.6下编译通过

```from numpy import *

##给出训练数据以及对应的类别
def createDataSet():
group = array([[1.0, 2.0], [1.2, 0.1], [0.1, 1.4], [0.3, 3.5]])
labels = ['A', 'A', 'B', 'B']
return group, labels

###通过KNN进行分类
def classify(input, dataSet, label, k):
dataSize = dataSet.shape[0]
print("dataSize = %d" % dataSize)

####计算欧式距离
diff = tile(input, (dataSize, 1)) - dataSet
sqdiff = diff ** 2
print(diff)
print(sqdiff)
squareDist = sum(sqdiff, axis=1)  ###行向量分别相加，从而得到新的一个行向量
dist = squareDist ** 0.5
print(dist)

##对距离进行排序
sortedDistIndex = argsort(dist)  ##argsort()根据元素的值从小到大对元素进行排序，返回下标
print(sortedDistIndex)

classCount = {}
for i in range(k):
print("i = %d"% i)
voteLabel = label[sortedDistIndex[i]]
print("voteLabel = %s" % voteLabel)
###对选取的K个样本所属的类别个数进行统计
classCount[voteLabel] = classCount.get(voteLabel, 0) + 1

###选取出现的类别次数最多的类别
maxCount = 0
for key, value in classCount.items():
if value > maxCount:
maxCount = value
classes = key

return classes```

ML_test.py

```import KNN
from numpy import *

dataSet,labels = KNN.createDataSet()
input = array([1.1, 0.3])
K = 3
output = KNN.classify(input,dataSet,labels,K)
print("测试数据为:",input,"分类结果为：",output)```

×