机器学习——K-近邻(KNN)算法
机器学习——K-近邻(KNN)算法
MichaelShu 发表于2个月前
机器学习——K-近邻(KNN)算法
  • 发表于 2个月前
  • 阅读 13
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

机器学习——KNN(K Nearest Neigbour)算法,其实挺简单的,计算欧氏距离,排序,但是这就是最简单的通过对已有的分类的数据后,来喂数据来完成机器学习的。

机器学习最重要的2点:1.分类  2.回归预测    

这是个很好的简单的例子

Python3.6下编译通过

先编写一个KNN.py文件,如下:

from numpy import *

##给出训练数据以及对应的类别
def createDataSet():
    group = array([[1.0, 2.0], [1.2, 0.1], [0.1, 1.4], [0.3, 3.5]])
    labels = ['A', 'A', 'B', 'B']
    return group, labels

###通过KNN进行分类
def classify(input, dataSet, label, k):
    dataSize = dataSet.shape[0]
    print("dataSize = %d" % dataSize)

    ####计算欧式距离
    diff = tile(input, (dataSize, 1)) - dataSet
    sqdiff = diff ** 2
    print(diff)
    print(sqdiff)
    squareDist = sum(sqdiff, axis=1)  ###行向量分别相加,从而得到新的一个行向量
    dist = squareDist ** 0.5
    print(dist)

    ##对距离进行排序
    sortedDistIndex = argsort(dist)  ##argsort()根据元素的值从小到大对元素进行排序,返回下标
    print(sortedDistIndex)

    classCount = {}
    for i in range(k):
        print("i = %d"% i)
        voteLabel = label[sortedDistIndex[i]]
        print("voteLabel = %s" % voteLabel)
        ###对选取的K个样本所属的类别个数进行统计
        classCount[voteLabel] = classCount.get(voteLabel, 0) + 1

    ###选取出现的类别次数最多的类别
    maxCount = 0
    for key, value in classCount.items():
        if value > maxCount:
            maxCount = value
            classes = key

    return classes

然后编写测试文件:

ML_test.py

import KNN
from numpy import *

dataSet,labels = KNN.createDataSet()
input = array([1.1, 0.3])
K = 3
output = KNN.classify(input,dataSet,labels,K)
print("测试数据为:",input,"分类结果为:",output)

参考:http://www.cnblogs.com/ybjourney/p/4702562.html

但有个地方:sortedDistIndex = argsort(dist) ##argsort()根据元素的值从小到大对元素进行排序,返回下标,原文是##argsort()根据元素的值从大到小对元素进行排序,返回下标,此处有误。

其实,KNN算法是监督学习的机器学习,这个例子引领我们机器学习的入门,其实C语言实现也挺简单的,但Python开发快,今后要是涉及到性能问题的时候,可以改用C实现。

共有 人打赏支持
粉丝 0
博文 32
码字总数 6388
×
MichaelShu
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: