机器学习——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 KNNfrom numpy import *dataSet,labels = KNN.createDataSet()input = array([1.1, 0.3])K = 3output = 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实现。