1、KNN分类算法

KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法,是一个概念极其简单,而分类效果又很优秀的分类算法。

他的核心思想就是,要确定测试样本属于哪一类,就寻找所有训练样本中与该测试样本“距离”最近的前K个样本,然后看这K个样本大部分属于哪一类,那么就认为这个测试样本也属于哪一类。简单的说就是让最相似的K个样本来投票决定。

KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比。 该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
实现 K 近邻算法时,主要考虑的问题是如何对训练数据进行快速 K 近邻搜索,这在特征空间维数大及训练数据容量大时非常必要。

2、数据集介绍

machine-learning-databases/iris 点击打开链接
数据集信息:

这也许是最著名的数据库模式识别文献中被发现。 费舍尔的论文是一个典型的,经常被引用。 (见杜达&哈特,例如)。 50个实例的数据集包含3类,其中

每个类是指一种虹膜。 一个类是线性可分的从其他2;后者不是线性可分的。

预测属性:类的虹膜。

UCI中的Iris(鸢尾属植物)数据集。Iris数据包含150条样本记录,分剐取自三种不同的鸢尾属植物setosa、versic010r和virginica的花朵样本,每一

类各50条记录,其中每条记录有4个属性:萼片长度(sepal length)、萼片宽度sepalwidth)、花瓣长度(petal length)和花瓣宽度(petal width)。

这是一个极其简单的域。

源代码

import csv     #用于处理csv文件
import random    #用于随机数
import math
import operator  #
from sklearn import neighbors  #加载数据集
def loadDataset(filename,split,trainingSet=[],testSet = []):  with open(filename,"rb") as csvfile:  lines = csv.reader(csvfile)  dataset = list(lines)  for x in range(len(dataset)-1):  for y in range(4):  dataset[x][y] = float(dataset[x][y])  if random.random()<split:  trainingSet.append(dataset[x])  else:  testSet.append(dataset[y])  #计算距离
def euclideanDistance(instance1,instance2,length):  distance = 0  for x in range(length):  distance += pow((instance1[x] - instance2[x]),2)  return math.sqrt(distance)  #返回K个最近邻
def getNeighbors(trainingSet,testInstance,k):  distances = []  length = len(testInstance) -1  #计算每一个测试实例到训练集实例的距离  for x in range(len(trainingSet)):  dist = euclideanDistance(testInstance, trainingSet[x], length)  distances.append((trainingSet[x],dist))  #对所有的距离进行排序  distances.sort(key=operator.itemgetter(1))  neighbors = []  #返回k个最近邻  for x in range(k):  neighbors.append(distances[x][0])  return neighbors  #对k个近邻进行合并,返回value最大的key
def getResponse(neighbors):  classVotes = {}  for x in range(len(neighbors)):  response = neighbors[x][-1]  if response in classVotes:  classVotes[response]+=1  else:  classVotes[response] = 1  #排序  sortedVotes = sorted(classVotes.iteritems(),key = operator.itemgetter(1),reverse =True)  return sortedVotes[0][0]  #计算准确率
def getAccuracy(testSet,predictions):  correct = 0  for x in range(len(testSet)):  if testSet[x][-1] == predictions[x]:  correct+=1  return (correct/float(len(testSet))) * 100.0  def main():  trainingSet = []  #训练数据集  testSet = []      #测试数据集  split = 0.67      #分割的比例  loadDataset(r"../data/iris.txt", split, trainingSet, testSet)   print "Train set :" + repr(len(trainingSet))  print "Test set :" + repr(len(testSet))                  predictions = []  k = 3  for x in range(len(testSet)):  neighbors = getNeighbors(trainingSet, testSet[x], k)  result = getResponse(neighbors)  predictions.append(result)  print ">predicted = " + repr(result) + ",actual = " + repr(testSet[x][-1])  accuracy = getAccuracy(testSet, predictions)  print "Accuracy:" + repr(accuracy) + "%"  if __name__ =="__main__":  main()

4.测试代码

from sklearn.datasets import load_iris
from sklearn import neighbors
import sklearn  #查看iris数据集
iris = load_iris()
print iris  knn = neighbors.KNeighborsClassifier()
#训练数据集
knn.fit(iris.data, iris.target)
#预测
predict = knn.predict([[0.1,0.2,0.3,0.4]])
print predict
print iris.target_names[predict]

5.运行结果

Train set :92
Test set :39
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
>predicted = 'Iris-setosa',actual = 'Iris-setosa'
Accuracy:100.0%
[Finished in 1.4s]

6.总结

在本次作业中,有许多东西都不懂,不得已狠狠恶补了关于机器学习方面的知识,还有就是在网上看了其他人的代码,狠狠的借鉴了一波,总的来说还是比较成功的。

Python实现knn分类算法(Iris 数据集)相关推荐

  1. python分类算法_用Python实现KNN分类算法

    本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下 KNN分类算法应该算得上是机器学习中最简单的分类算法了,所谓KNN即为K-NearestNeighbor(K个最邻 ...

  2. 利用python语言实现分类算法_使用python实现kNN分类算法

    k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很 ...

  3. 使用Python处理KNN分类算法

    简介: 我们在这世上,选择什么就成为什么,人生的丰富多彩,得靠自己成就.你此刻的付出,决定了你未来成为什么样的人,当你改变不了世界,你还可以改变自己. KNN分类算法的介绍 KNN分类算法(K-Nea ...

  4. 【机器学习算法】手动Python实现KNN分类算法,并用iris数据集检验模型效果

    目录 一.KNN算法Python实现 1.导入包 2. 画图,展示不同电影在图上的分布 3.训练样本和待测样本准备 4.计算待测样本点到每个训练样本点的距离 5.查找离待测样本点最近的K个训练样本点的 ...

  5. python knn-基于python实现KNN分类算法

    kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别 ...

  6. 用鸢尾花数据集实现knn分类算法

    一.题目: 原生python实现knn分类算法,用鸢尾花数据集 二.算法设计 1. 准备数据,对数据进行预处理 2. 选用合适的数据结构存储训练数据和测试元组 3. 设定参数,如k 4.维护一个大小为 ...

  7. python KNN分类算法 使用鸢尾花数据集实战

    KNN分类算法,又叫K近邻算法,它概念极其简单,但效果又很优秀. 如觉得有帮助请点赞关注收藏啦~~~ KNN算法的核心是,如果一个样本在特征空间中的K个最相似,即特征空间中最邻近的样本中的大多数属于某 ...

  8. 用Python开始机器学习(4:KNN分类算法)

    转自: http://blog.csdn.net/lsldd/article/details/41357931 1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classi ...

  9. knn分类算法实现手写体数字识别python

    之前写过knn分类算法代码,想把knn用于设别手写体数字,看下正确率. 大概思路:获取图片(可以自己写,我之前有写过黑白图片转文本的代码,也可以网上找,反正数据量大会更好)->转成文本-> ...

最新文章

  1. 《科学美国人》评出2019年十大突破性技术
  2. 3月24日下午专家聊天室:轻松掌握WCF 帮你找到入门砖
  3. Redis 如何分布式,来看京东金融的设计与实践
  4. 环球易购选品:既然选品绕不过,那就让我们好好研究
  5. pytorch基础知识整理(五) 优化器
  6. 面试题64. 求1+2+…+n
  7. STS+Git 项目操作相关
  8. 使用.Net中的WeakDictionary — ConditionalWeakTable
  9. 《代码敲不队》第三次作业:团队项目的原型设计
  10. 离线批量数据通道Tunnel的最佳实践及常见问题
  11. 用python语言写一个简单的计算器
  12. 老板放过我吧!我Java8还没用呢,又让我学习Java14
  13. ES6数组知识点,巧妙运用数组,对循环说88
  14. sqlmap安装(python2或python3都行)
  15. 单片计算机基础及应用答案,单片机原理及应用课后习题参考答案1~6章(DOC)
  16. 使用python抓取分析链家网二手房数据
  17. php读取写入,php操作文件(读取写入文件)
  18. Windows系统下VMware 虚拟机中文件提取到主机的方法
  19. LabVIEW编程LabVIEW开发 控制Keithley 2700例程与相关资料
  20. 80C51单片机的基本信息

热门文章

  1. powerdesign java,PowerDesigner设计数据库表
  2. 美国SIG声学相机G100主要功能
  3. 乡村少年宫计算机活动简报,乡村学校少年宫活动简讯.doc
  4. 【PPT制作工具】超实用!有哪些鲜为人知却好用到爆的PPT辅助工具?
  5. R语言学习之科学计算——求导与积分
  6. Go语言之值传递与引用传递
  7. MySQL工程师干什么,MySQL DBA工程师岗位职责
  8. 华为云数据治理生产线DataArts,让“数据‘慧’说话”
  9. 基础篇——树莓派添加一键锁屏
  10. 值得程序员去学习的一些东西