KNN决策树暴力求解

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)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值