python之KNN算法的简单实现
2017-11-16 12:38
686 查看
KNN算法又称k近邻分类(k-nearest neighbor classification)算法。它是一种有监督学习,它是根据不同特征值之间的距离来进行分类的一种简单的机器学习方法。
算法介绍网上很多,我也是参考网上的描述,下面有一个python实现的简单knn算法
大体描述:
事先有样本数据,每个数据都有标签,然后拿一个未知样本,让程序判断它属于什么标签类别。
基本思想就是:
根据未知样本的分布,计算它到各个已知样本的距离,取距离未知样本为K的所有已知样本点并且对样本的标签进行统计排序,如果在这个K个范围标签数量最多的为A类型,那么就认为这个未知样本的分类为A
具体算法如下(参考的网上的,自己添加了注释):
算法介绍网上很多,我也是参考网上的描述,下面有一个python实现的简单knn算法
大体描述:
事先有样本数据,每个数据都有标签,然后拿一个未知样本,让程序判断它属于什么标签类别。
基本思想就是:
根据未知样本的分布,计算它到各个已知样本的距离,取距离未知样本为K的所有已知样本点并且对样本的标签进行统计排序,如果在这个K个范围标签数量最多的为A类型,那么就认为这个未知样本的分类为A
具体算法如下(参考的网上的,自己添加了注释):
#!/usr/bin/python # -*- coding: UTF-8 -*- # @Time : 17/11/15 下午11:44 # @Author : lijie # @File : myknn01.py import operator import numpy ##创建模拟样本和类别标签 def createDataSet(): sample = ([[175, 50], [160, 70], [170, 90], [165, 60], [165, 50], [180, 100], [180, 65]]) labels = ["s", "f", "f", "s", "s", "f", "s"] return numpy.array(sample), labels ##knn def samplePross(inX, dataSet, labels, k): # 获取行数这里总共7行 # 打印出7 dataSetSize = dataSet.shape[0] # 将需要分类的数据纵向增加7行和样本数据做减法 # [[5 20] # [20 0] # [10 -20] # [15 10] # [15 20] # [0 -30] # [0 5]] diffMat = numpy.tile(inX, (dataSetSize, 1)) - dataSet # 对上面的矩阵内部的所有数做平方运算 # [[25 400] # [400 0] # [100 400] # [225 100] # [225 400] # [0 900] # [0 25]] sqDiffMat = diffMat ** 2 # 对上一行代码返回的矩阵做横向相加 # [425 400 500 325 625 900 25] sqDistances = sqDiffMat.sum(axis=1) # 对上面的一位矩阵所有元素做开平方根 # [20.61552813 20 22.36067977 18.02775638 25 30 5] distances = sqDistances ** 0.5 # 对距离进行参数排序从小到大的下标 # [6 3 1 0 2 4 5] sortedDistIndicies = distances.argsort() classCount = {} for i in range(k): #取出来最近的k个值 voteIlabel = labels[sortedDistIndicies[i]] #当字典classCount有标签就取出标签加1 没有就为0 然后再放回 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 #对上面已经计算完成的classCount的value排序(key=operator.itemgetter(1)表示取map的value) # classCount.iteritems()为sorted函数参数需要的迭代器, #默认从小到大 reverse=True 即从大到小 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) #返回出现次数最多的一个label return sortedClassCount[0][0] # 分类测试 sample, labels = createDataSet() print samplePross([180, 70], sample, labels, 3)
相关文章推荐
- K最近邻结点算法(k-Nearest Neighbor algorithm)KNN——python简单实现
- KNN (K最近邻接算法)python 语言下的简单实现
- kNN算法python实现和简单数字识别的方法
- kNN算法python实现和简单数字识别
- python KNN算法的简单实现
- Python简单实现KNN算法及绘图练习
- [机器学习]kNN算法python实现(实例:数字识别)
- 机器学习经典算法详解及Python实现--K近邻(KNN)算法
- Python机器学习(二)--kNN算法实现
- 简单的神经元算法实现(python)
- 机器学习与数据挖掘-K最近邻(KNN)算法的实现(java和python版)
- 简单的神经元算法实现(python)
- 用python实现kNN分类算法
- Python实现的knn算法示例
- KNN的简单实现(python)
- 数据挖掘10大算法(6)-K最近邻(KNN)算法的实现(java和python版)
- 数据挖掘(Python)——利用sklearn进行数据挖掘,实现算法:svm、knn、C5.0、NaiveBayes
- Python实现KNN算法
- KNN分类算法--python实现
- Python实现KNN算法