博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
K临近算法
阅读量:5966 次
发布时间:2019-06-19

本文共 2176 字,大约阅读时间需要 7 分钟。

K临近算法原理

K临近算法(K-Nearest Neighbor, KNN)是最简单的监督学习分类算法之一。(有之一吗?)

对于一个应用样本点,K临近算法寻找距它最近的k个训练样本点即K个Nearest Neighbor。

若在K个邻居中属于某一类别的最多,则认为应用样本点也属于该类别。

KNN算法Python实现

KNN算法无需训练,很容易实现。

from numpy import *import operatorclass KNNClassifier():  def __init__(self):      self.dataSet = []      self.labels = []  def loadDataSet(self,filename):      fr = open(filename)      for line in fr.readlines():          lineArr = line.strip().split()          dataLine = list()          for i in lineArr:              dataLine.append(float(i))          label = dataLine.pop() # pop the last column referring to  label          self.dataSet.append(dataLine)          self.labels.append(int(label))  def setDataSet(self, dataSet, labels):      self.dataSet = dataSet      self.labels = labels  def classify(self, data, k):      self.dataSet = array(self.dataSet)      self.labels = array(self.labels)      self._normDataSet()      dataSetSize = self.dataSet.shape[0]      # get distance      diffMat = tile(data, (dataSetSize,1)) - self.dataSet      sqDiffMat = diffMat**2      distances = sqDiffMat.sum(axis=1)      # get K nearest neighbors      sortedDistIndicies = distances.argsort()      classCount= {}      for i in range(k):          voteIlabel = self.labels[sortedDistIndicies[i]]          classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1      # get fittest label      sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)      return sortedClassCount[0][0]  def _normDataSet(self):      minVals = self.dataSet.min(0)      maxVals = self.dataSet.max(0)      ranges = maxVals - minVals      normDataSet = zeros(shape(self.dataSet))      m = self.dataSet.shape[0]      normDataSet = self.dataSet - tile(minVals, (m,1))      normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide      self.dataSet = normDataSet  def test(self):      self.dataSet = array([[1.0,1.1],[1.0,1.0],[0.9,0.9],[0,0],[0,0.1],[0,0.2]])      self.labels = [1,1,1,2,2,2]      print(self.classify([1.0,1.1], 2))if __name__ == '__main__':  KNN = KNNClassifier()  KNN.loadDataSet('testData.txt')  print(KNN.classify([72011, 4.932976, 0.632026], 5) )  # KNN.test()

转载地址:http://pitax.baihongyu.com/

你可能感兴趣的文章
MVC中的三个模块
查看>>
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
oracle 常用命令大汇总
查看>>
2012年春运火车票电话和网上订票技巧、攻略
查看>>
根据request获取请求路径
查看>>
mysql 并行复制
查看>>
傲不可长,欲不可纵,乐不可极,志不可满——提高个人修养
查看>>
linux系统增加swap容量的方法
查看>>
后台调用gps
查看>>
HTML5标签的语义认知和理解(1)
查看>>
MySQL日志功能详解(2)
查看>>
HP LaserJet 305X 和 339X 系列一体机如何设置手动或自动接收传真?
查看>>
linux之权限之隐藏权限
查看>>
系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常...
查看>>
XDCTF成长记录
查看>>
registered the JDBC driver [com.mysql.jdbc.Driver]
查看>>
Linux系统中的文本处理工具
查看>>
IDE---Python IDE之Eric5在window下的安装
查看>>
python---LineReceiver实现记录服务器
查看>>
Mybatis调用Oracle中的存储过程和function
查看>>