zoukankan      html  css  js  c++  java
  • python机器学习一:KNN算法实现

    所谓的KNN算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。

    这里举一个很简单的例子来理解一下KNN算法的原理,假设有以下数据,根据微信、电话、短信联系的次数将朋友进行归类为认识、普通、好友三个类别,如下:

    根据A-J的特征来确定K应该属于哪一类朋友?

    那么就可以用下面的代码来进行归类:

    #! /usr/bin/env python
    # encoding:utf-8
    import math
    def KNNAlg():
        base_data = {"A": [2, 0, 0, "认识"],
                     "B": [5, 1, 0, "认识"],
                     "C": [30, 5, 2, "好友"],
                     "D": [10, 3, 1, "好友"],
                     "E": [8, 2, 5, "普通"],
                     "F": [32, 5, 2, "好友"],
                     "G": [6, 2, 1, "普通"],
                     "H": [9, 3, 0, "普通"],
                     "I": [11, 1, 4, "好友"],
                     "J": [2, 0, 2, "认识"]}
        
        target = [20,4,3] #K的数据
        KNN =[]
        for key,v in base_data.items():
            d = math.sqrt((target[0]-v[0])**2 + (target[1]-v[1])**2 + (target[2]-v[2])**2)  #计算距离
            KNN.append([key,round(d,2)])  #取两位小数
        KNN.sort(key=lambda dic:dic[1])   #根据第二项排序
        KNN = KNN[:6] #取距离最近的6个邻居
        print(KNN)
    
        labels = {"认识": 0, "好友": 0, "普通": 0}
        for s in KNN:
            temp = base_data[s[0]]
            #print(temp)
            labels[temp[3]] += 1
        labels = sorted(labels.items(),key = lambda dic: dic[1],reverse=True)
        print(labels,labels[0][0],sep='
    ')
    
    
    if __name__ == '__main__':
        KNNAlg()
    

      最后的输出:

    [('好友', 4), ('普通', 2), ('认识', 0)]
    好友

    可以看到K是属于好友类别的。

    KNN是属于惰性学习的,样本数据已经很明确的归类,新的数据只需要归类就好了,并没有一个训练的过程。其次,根据K的大小和样本容量的分布,很容易得出错误的结论,再次,样本容量很大时,计算会变得很复杂,计算量大

      



  • 相关阅读:
    谷歌浏览器最新版下载链接
    第二章 算法——程序的灵魂
    第一章:程序设计和C语言
    C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂
    面向对象之类的其他方法
    面向对象之反射、包装、(定制)
    PyCharm使用秘籍视频
    re模块(详解正则)
    ATM购物车程序项目规范(更新到高级版)
    音乐脚本
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8430525.html
Copyright © 2011-2022 走看看