import numpy as np
import operator
# 数据集
def DataSet():
# [打斗次数,kiss次数]
# 矩阵9*2
group = np.array([[3, 104], [2, 100], [1, 81], [101, 10], [99, 5], [98, 2], [10, 10], [80, 80], [20, 20]])
# print(group)
labels = ['love', 'love', 'love', 'move', 'move', 'move', 'love', 'love', 'move']
return group, labels
def KNN(in_x, x_labels, y_labels, k):
# 读取矩阵长度,shape[0]读取行数,shape[1]读取列数
x_labels_size = x_labels.shape[0]
# #np.tile(array1,(y轴方向复制次数,x轴方向复制次数))
# 将待预测数据变为9*1的数组
# (xi-xj)^2
distances = (np.tile(in_x, (x_labels_size, 1)) - x_labels) ** 2
# print(distances)
# 每一行向量求和
ad_distances = distances.sum(axis=1)
# print(ad_distances)
# 开方后得欧氏距离
sq_distances = ad_distances ** 0.5
# 对欧氏距离进行排序返回索引
ed_distances = sq_distances.argsort()
# 存储k个邻近点
classdict = {}
# 得到最近的k个数据的标签并对标签进行计数
for i in range(k):
# 得到对应的标签
votel_label = y_labels[ed_distances[i]]
# 对最近的k个数据的标签进行计数,准备多数表决
#get(key,m) 反悔key的值,若无则返回m
classdict[votel_label] = classdict.get(votel_label, 0) + 1
# 多数表决
sort_classdict = sorted(classdict.items(), key=operator.itemgetter(1), reverse=True)
return sort_classdict[0][0]
if __name__ == '__main__':
group, lables = DataSet()
# x=input("请输入要预测的数据")
test_x = [90, 90]
print('输入数据所对应的类别是:{}'.format(KNN(test_x, group, lables, 3)))
KNN决策树暴力求解
最新推荐文章于 2024-05-31 23:45:33 发布