机器学习&深度学习第一天 K-邻近算法(KNN)

KNN关键步骤

以一个待预测数据A,全部为二维数据为例:
1.计算A和训练数据之间的距离(欧拉距离)
2.根据得到的距离找到前k个最小的距离
3.根据这前k个最小距离,找到对应的标签
4.汇总标签的类别,返回标签最多的对应的那个类别(采用极大似然法)
5.结束

代码简例如下:(在第一步中用张量(tensor),代码比较简洁,当然用numpy也可以)

import torch
import pandas as pd
import numpy as np

// 写成一个函数
// 传进来参数为:待测试的数据,配套的数据集加标签,选取前k个标签进行筛选
// 返回参数为:对于待测试数据预测的一个标签
// 先减,在平方,在相加,在开方,在进行下面的一系列操作
def predicted_label(test, train, labels, k):    // tensor tensor list int
    diff = train - test							// 相减
    diff = diff**2								// 平方
    diff = diff.sum_to_size(len(diff), 1)       // 相加
    diff = diff**0.5							// 开方
    diff = np.array(diff).reshape(-1)			// 变成numpy数据
    diff_indices = diff.argsort()				// 返回每个数所占的排名(占全部数的)
    dir_label = {}								// 统计标签的字典
    for i in range(k):							// 下面为统计的过程
        get_label = labels[diff_indices[i]]
        if get_label not in dir_label.keys():
            dir_label[get_label] = 0
        dir_label[get_label] += 1
    dir_label_order = sorted(dir_label.items(), key = lambda x:x[1], reverse = True)
    return dir_label_order[0][0]

// 测试
train = torch.tensor([[1,101],[5,89],[108,5],[115,8]])		// 训练集
labels = [0,0,1,1]											// 训练集对应标签
test = torch.tensor([100,20])								// 测试数据
k = 3														// 选前k个对应标签
ans = predicted_label(test, train, labels, k)				// 预测
ans		// [1]												// 结果为1这个标签

// 用图来验证
plt.scatter(train[:,0], train[:,1], marker='o')
plt.title('not add test data')
plt.show()

在这里插入图片描述

train_list = train.tolist()
test_list = test.tolist()
train_list.append(test_list)
train_np = np.array(train_list)
plt.scatter(train_np[:,0], train_np[:,1], marker='o')
plt.title('add test data')
plt.show()

在这里插入图片描述

可以明显的看出该数据的分类结果
knn主干思想就是如此。
完整代码链接knn完整实现
结束!!!
✨✨✨✨✨✨

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值