首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【python】KNN及实例

【python】KNN及实例

作者头像
司六米希
发布2022-11-15 19:02:41
发布2022-11-15 19:02:41
5660
举报
文章被收录于专栏:司六米希司六米希

KNN

1. 什么是KNN

KNN(K-Nearest Neighbors, k近邻算法)用于分类的算法

2. KNN流程

  1. 计算新样本与所有样本之间的距离(①欧氏距离: 两点之间的直线距离 ②曼哈顿距离:坐标轴距离的绝对值的和)
  2. 按照由近及远顺序排列(knn中的k是邻居个数,离的最近的k个样本来判断新数据的类别)
  3. 再按K值确定分类 (对此knn缺点:数据越多knn计算量越大,很难应用到较大数据集中)

3. KNN案例

  1. 创造数据集
  2. KNN函数,进行分类
  3. 计算欧式距离
  4. 排序,对数据进行排序,并返回排序前所在位置的索引
  5. 创建字典并初始化
  6. 统计表决,对字典进行填充
  7. 表决后进行降序排序,距离最近的k个训练数据中大多数所属的类别即为测试数据的类别
  8. 测试数据

4. 完整实例代码python

代码语言:javascript
复制
import numpy as  np
import operator

def DataSet():
    group=np.array([[50,2],[45,3],[46,1],[3,36],[4,35],[2,38]])
    labels=['司六','司六','司六','米希','米希','米希']
    return group,labels
def KNN(x_input,x_labels,y_labels,k):
    x_labels_size=x_labels.shape[0]
    # 在numpy中,np.tile(a, (2))函数的作用就是将函数将函数沿着X轴扩大两倍。如果扩大倍数只有一个,默认为X轴
    # np.tile(a, (2, 1))第一个参数为Y轴扩大倍数,第二个为X轴扩大倍数
    # **2是平方
    distances=(np.tile(x_input,(x_labels_size,1))-x_labels)**2
    # sum()函数axis=1按列进行相加
    # **0.5开方
    ou_distances=distances.sum(axis=1)**0.5
    # argsort()排序
    sq_distances=ou_distances.argsort()
    classdict={}
    # 利用字典统计列表中元素出现次数
    # a={}
    # for i in range(2):
    #     a['kk']=a.get('kk',2)+2
    #     print(a)
    #     print(a['kk'])
    for i in range(k):
        index_label=y_labels[sq_distances[i]]
        # print(index_label)
        classdict[index_label]=classdict.get(index_label,0)+1
        # print(classdict)
        # print(classdict[index_label])
    sort_classdict=sorted(classdict.items(),key=operator.itemgetter(1),reverse=True)
    # print(sort_classdict)
    # print(sort_classdict[0])
    # print(sort_classdict[0][0])
    return  sort_classdict[0][0]
if __name__ == '__main__':
    group,labels=DataSet()
    test_x=[30,2]
    print('输入数据的类型为:{}'.format(KNN(test_x,group,labels,3)))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • KNN
  • 1. 什么是KNN
  • 2. KNN流程
  • 3. KNN案例
  • 4. 完整实例代码python
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档