一、KNN算法概述:

1.KNN算法的工作原理是:

(1)存在一个训练样本集,并且知道样本集中每一数据与所属分类的对应关系,即每个数据都存在分类标签。 (2)若此时输入不带标签的新数据之后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后用算法提取出样本集中特征最相似数据的分类标签。 (3)最后,选择K个(可根据实际情况自由选择不大于20的整数)最相似数据中出现次数最多的分类,作为新数据的分类。

2.KNN算法优缺点:

(1)优点:精度高、对异常值不敏感、无数据输入假定。 (2)缺点:计算复杂度高、空间复杂度高。 适用范围:数值型和标称型数据。

二、KNN算法实战1:以电影分类为例

1.数据预处理

为了便于测试,在给原始数据贴标签时,只分为两类。具体python代码如下所示:from numpy import *import operatordef createDataSet():

group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

labels = ['A','A','B','B']    return group,labels

2.对未知类别属性的数据集中的每个点依次执行以下操作:

(1)计算已知类别数据集中的点与当前点之间的距离; (2)按照距离递增次序排序; (3)选取与当前点距离最小的K个点; (4)确定前K个点所在类别出现的频率; (5)返回前K个点出现频率最高的类别作为当前点的预测分类。

3.KNN算法实现:def classify0(inX,dataSet,labels,k):

dataSetSize = dataSet.shape[0]    #第一步,计算欧式距离

diffMat = tile(inX,(dataSetSize,1)) - dataSet

sqDiffMat = diffMat ** 2

sqDistances = sqDiffMat.sum(axis=1)

distances = sqDistances ** 0.5

sortedDistIndicies = distances.argsort()

classCount = {}    for i in range(k):

voteIlabel = labels[sortedDistIndicies[i]]

classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

sortedClassCount = sorted(classCount.iteritems(),

key = operator.itemgetter(1),reverse = True)return sortedClassCount[0][0]

测试:

三、KNN算法实战2:手写识别数字

1.数据预处理

本次构建基于KNN算法的手写识别系统需要两个数据集trainingDigits 和 testDigits,其中trainingDigits数据集包含约2000个样本,用来训练分类器;testDigits数据集包含约900个样本,用来测试分类器的效果。

实现代码如下所示:def img2vector(filename):

returnVect  = zeros((1,1024))

fr = open(filename)    for i in range(32):

lineStr = fr.readline()        for j in range(32):

returnVect[0,32*i+j] = int(lineStr[j])    return returnVect

2.用KNN算法识别手写数字def handwritingClassTest():

llLabels = []

trainingFileList = listdir('trainingDigits')

m = len(trainingFileList)

trainingMat = zeros((m,1024))    for i in range(m):

fileNameStr = trainingFileList[i]

fileStr = fileNameStr.split('.')[0]

classNumStr = int (fileStr.split('_')[0])

llLabels.append(classNumStr)

trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr)

testFileList = listdir('testDigits')

errorCount = 0.0

mTest = len(testFileList)    for i in range(mTest):

fileNameStr = testFileList[i]

fileStr = fileNameStr.split('.')[0]

classNumStr = int(fileStr.split('_')[0])

vectorUnderTest = img2vector('testDigits/%s' % fileNameStr)

classifierResult = classify0(vectorUnderTest,\

trainingMat,llLabels,3)        print "the classifier came back with : %d, the real answer is : %d "\

% (classifierResult,classNumStr)        if (classifierResult != classNumStr) :

errorCount += 1.0

print "\nThe total number of errors is : %d " % errorCountprint "\nThe total error rate is : %f " % (errorCount/float(mTest))

测试结果:

四、小结

KNN算法是分类数据最简单有效的算法,是基于实例的学习,但在使用算法时必须有接近实际数据的训练样本数据。 如果训练数据集较大时,必须要使用大量的存储空间和计算时间。

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

python的knn算法list_机器学习实战学习笔记1——KNN算法相关推荐

  1. 机器学习实战(笔记)------------KNN算法

    1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例:         假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...

  2. 机器学习实战读书笔记--k邻近算法KNN

    k邻近算法的伪代码: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别数据集中的点与当前点之间的距离: (2)按照距离递增次序排列 (3)选取与当前点距离最小的k个点 (4)确定 ...

  3. 机器学习实战学习笔记 一 k-近邻算法

    k-近邻算法很简单,这里就不赘述了,主要看一下python实现这个算法的一些细节.下面是书中给出的算法的具体实现. def clssify(inX,dataset,label,k):#计算距离data ...

  4. 《机器学习实战 学习笔记》(二):端到端的机器学习项目

    文章目录 第2章 端到端的机器学习项目   1 使用真实数据( 加州房价预测 )      1.1 流行的各个领域的开放数据集存储库   2 观察大局      2.1 框架问题      2.2 选 ...

  5. 机器学习实战 学习笔记

    jupyter notebook机器学习基础from numpy import * random.rand(4,4) randMat=mat(random.rand(4,4)) mat 把数组转化为矩 ...

  6. Selenium2 Python 自己主动化測试实战学习笔记(五)

    7.1 自己主动化測试用例 无论是功能測试.性能測试和自己主动化測试时都须要编写測试用例,測试用例的好坏能准确的体现了測试人员的经验.能力以及对项目的深度理解. 7.1.1 手工測试用例与自己主动化測 ...

  7. knn的python代码_《机器学习实战》之一:knn(python代码)

    数据 标称型和数值型 算法 归一化处理:防止数值较大的特征对距离产生较大影响 计算欧式距离:测试样本与训练集 排序:选取前k个距离,统计频数(出现次数)最多的类别 def classify0(inX, ...

  8. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

  9. 机器学习实战2.3. k-近邻算法例子-识别手写数字

    机器学习实战2.3. k-近邻算法例子-识别手写数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多机器学习干货 csdn:https://blog.csdn.net/ ...

最新文章

  1. IT工作者,你们的爱情是这样的吗?
  2. Python2 编码问题分析
  3. sqlite+php+函数大全,PHP SQLite SQLite 函数_编程学问网
  4. ASP.NET Web Pages 的冲突版本问题
  5. Java虚拟机:类加载机制详解
  6. java基础 第八章(静态成员的调用 、 封装)
  7. gtx780有html接口吗,笔记本玩转游戏大作 达人外接GTX780Ti
  8. python input函数详解_Python如何使用input函数获取输入,看完你就会了
  9. android 简介动画,android动画简介
  10. matlab 音频fftshift,matlab使用杂谈5-fftshift函数的使用
  11. 同人游戏开发手记(三) - 第二章 守护者之剑系列 (2.1 ~ 2.2)
  12. PLC编程实例(一) 基本电路
  13. python复制上一行到下一行_eclipse复制当前行到下一行-eclipse复制-eclipse复制一行快捷键...
  14. 关于PC下安装MAC苹果系统!
  15. 「 神器 」强大的系统清理工具
  16. 32位计算机装64位操作系统,电脑应该装32位还是64位系统?
  17. 判断某整数是正整数、负整数还是零
  18. Python一键更换证件照背景色
  19. 华为wifi信号如何连接到服务器,如何解决华为路由器搜到信号却无法连接
  20. sourctree Commit merged changes immediately选项解读

热门文章

  1. 格式化Mybatis返回的Date时间
  2. Pytorch 中的 non_blocking
  3. comsol中材料定义总结
  4. C4d 基础学习(一)
  5. 猿创征文|基于物联网的门禁与考勤系统_阿里云_2022
  6. python录音pyaudio_python调用pyaudio使用麦克风录制wav声音文件的教程
  7. 人工智能 | ShowMeAI资讯日报 #2022.06.02
  8. zookeeper c api主备切换例子
  9. 2021-05-24,2020版PS抹除海报文字方法
  10. 精读《低代码逻辑编排》