• KNN原理及优缺点
  • KNN的python实现
  • KNN的python代码中的数据格式

KNN原理及优缺点

KNN算法又称为k近邻分类(k-nearest neighbor classification)算法。

算法原理是,从训练集中找到和新数据距离最接近的k条记录,然后根据这K条记录的分类来决定新数据的类别。所以Knn的关键是,训练集与测试集、距离或相似的衡量、k的大小及分类决策规则。一旦他们确定了,则结果就确定了。常用的距离度量公式是欧氏距离,K值的选择反映了对近似误差与估计误差之间的权衡,K值的选择会对结果产生重大的影响,通常由交叉验证选择最优的K值。

KNN算法的优点:
简单,易于理解,易于实现,无需估计参数,无需训练; 适合对稀有事件进行分类;特别适合于多分类问题, kNN比SVM的表现要好

缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大(我自己够用)

KNN的python实现

#-*- coding: utf-8 -*-
from numpy import *
import operator'''从文件中读取数据,将文本记录转换为矩阵,提取其中特征和类标'''
def filematrix(filename):fr=open(filename)arrayOLines=fr.readlines()numberOfLines=len(arrayOLines)        #得到文件行数returnMat=zeros((numberOfLines,7))     #创建以零填充的numberOfLines*7的NumPy矩阵classLabelVector=[]index=0for line in arrayOLines:              #获取数据,获取特征矩阵line=line.strip()##文本分割listFromLine=line.split('\t')# print(listFromLine[1:8])##获取XreturnMat[index, : ]=listFromLine[1:8]##获取标签YclassLabelVector.append(listFromLine[-1])index+=1return returnMat,classLabelVector     #返回特征矩阵和类标集合'''归一化数字特征值到0-1范围,防止特大值与特小值的影响'''
'''输入为特征值矩阵'''
def autoNorm(dataSet):minVals=dataSet.min(0)maxVals=dataSet.max(0)ranges=maxVals-minValsnormDataSet=zeros(shape(dataSet))m=dataSet.shape[0]normDataSet=dataSet-tile(minVals,(m,1))normDataSet=normDataSet/tile(ranges,(m,1))return normDataSet, ranges, minValsdef classify(sample,dataSet,labels,k):dataSetSize=dataSet.shape[0]     #数据集行数即数据集记录数'''距离计算'''diffMat=tile(sample,(dataSetSize,1))-dataSet         #样本与原先所有样本的差值矩阵sqDiffMat=diffMat**2      #差值矩阵平方sqDistances=sqDiffMat.sum(axis=1)       #计算每一行上元素的和distances=sqDistances**0.5   #开方sortedDistIndicies=distances.argsort()      #按distances中元素进行升序排序后得到的对应下标的列表(索引值)'''选择距离最小的k个点'''classCount={}for i in range(k):voteIlabel=labels[sortedDistIndicies[i]]classCount[voteIlabel]=classCount.get(voteIlabel,0)+1'''从大到小排序'''sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)return sortedClassCount[0][0]def ClassTest():hoRatio=0.20          #测试样例数据比例datingDataMat,datingLabels=filematrix('user_info_and_topic_5topicand50word.txt')#将测试集数据标准化,转化为0-1之间normMat, ranges, minVals=autoNorm(datingDataMat)##样本总数目m =normMat.shape[0]##测试集的数目numTestVecs=int(m*hoRatio)precisionCount=0.0##运行时,设置K的数目来调解算法的准确率k=35##对测试集一个一个与训练集算距离for i in range(numTestVecs):classifierResult=classify(normMat[i, : ],normMat[numTestVecs:m, : ], datingLabels[numTestVecs:m],k)print("The classifier came back with: %s, the real answer is: %s" % (classifierResult, datingLabels[i]))##如果真实类别的和预测的类别相同,则加1if(classifierResult == datingLabels [i] ) :precisionCount += 1.0print("the total precision rate is: %f" % (precisionCount/float(numTestVecs)))def main():ClassTest()if __name__=='__main__':main()

KNN的python代码中的数据格式

如图所示,为以上算法的数据格式,但是在运用是需要将数据的第一行删除,只保留数字。并将其转化为.txt文档,注意最好是utf-8的形式。以下代码中的,其中7表示age,user_province,topic1……..topic5七个变量

returnMat=zeros((numberOfLines,7))     #创建以零填充的numberOfLines*7

以下代码是获得变量X的

##获取XreturnMat[index, : ]=listFromLine[1:8]
'''从文件中读取数据,将文本记录转换为矩阵,提取其中特征和类标'''
def filematrix(filename):fr=open(filename)arrayOLines=fr.readlines()numberOfLines=len(arrayOLines)        #得到文件行数returnMat=zeros((numberOfLines,7))     #创建以零填充的numberOfLines*7的NumPy矩阵classLabelVector=[]index=0for line in arrayOLines:              #获取数据,获取特征矩阵line=line.strip()##文本分割listFromLine=line.split('\t')# print(listFromLine[1:8])##获取XreturnMat[index, : ]=listFromLine[1:8]##获取标签YclassLabelVector.append(listFromLine[-1])index+=1return returnMat,classLabelVector     #返回特征矩阵和类标集合

如下图所示,为KNN算法,针对我的数据跑出的精度,以及预测的标签,通过调节K值来调解预测的精度。

Knn原理及Python实现、数据展示相关推荐

  1. Python大数据综合应用 :零基础入门机器学习、深度学习算法原理与案例

    机器学习.深度学习算法原理与案例实现暨Python大数据综合应用高级研修班 一.课程简介 课程强调动手操作:内容以代码落地为主,以理论讲解为根,以公式推导为辅.共4天8节,讲解机器学习和深度学习的模型 ...

  2. Python数据展示之雷达图

    Python数据展示之雷达图 简单实例 需求:雷达图方式验证霍兰德人格分析 输入:各职业人群结合兴趣的调研数据 输出:雷达图 使用库:matplotlib+numpy 代码 import numpy ...

  3. python同花顺股票实时数据_web实时股票数据展示

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 所有这些都是实时发生的,并推送到仪表板供用户评估事物和行为. 最终,为了能够从任 ...

  4. python使用pyecharts展示中国各城市天气数据

    Python数据挖掘+数据图像化展示 数据来源中国气象局 require: v1.9.1 pyecharts/pandas/request 先看看最终效果 1. 数据获取 爬虫现在不能发了... im ...

  5. wps两列数据分别作为xy轴_【python实战】用KNN算法实现数据分类和数据预测

    导语:数据挖掘,又译为数据采矿,是指从大量的数据中通过算法搜索隐藏于其中信息的过程.本篇内容主要向大家讲述如何使用KNN算法进行数据分类和数据预测. 1.数据分类基础概念 数据分类就是相同内容.相同性 ...

  6. 【Python百日进阶-Web开发-Feffery】Day343 - fac数据展示01:AntdAvatar头像(阿凡达)

    文章目录 前言:fac是什么? "人生苦短,我用Python:Web开发,首选Feffery!" ↓↓↓ 今日笔记 ↓↓↓ 一.fac数据展示:AntdAvatar头像(阿凡达) ...

  7. Python爬虫原理与常用模块——数据提取与清洗策略

    1 正则表达式 1.1概念 世界上信息非常多,而我们关注的信息有限.假如我们希望只提取出关注的数据,此时可以通过一些表达式进行提取,正则表达式就是其中一种进行数据筛选的表达式. 正则表达式(Regul ...

  8. python图片保存和图片展示顺序_【IT专家】【 python 】 —— 数据预处理:(1) 读取与显示图片 + 图像通道顺序变换...

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 [ python ] -- 数据预处理: (1) 读取与显示图片 + 图像通道顺 序变换 2018/05/31 29 # ---- 用 OPENC ...

  9. 【Python案例】爬取某bo热搜榜并做动态数据展示

    目录 前言 正文 基本开发环境 相关模块的使用 需求数据来源分析 代码实现 动态数据展示 前言 嗨嗨,大家好啊 最近有没有在某bo吃瓜啊,今年的瓜好像不少哦,近期的李某某事件真的令我大为震惊

最新文章

  1. alarm项目bug
  2. springboot能用python吗_Python与springboot的对接
  3. 用sublime Text2来开发ruby on rails项目
  4. 微信公众开放平台开发04---百度BAE,java应用部署服务器,jetty了解
  5. X86Windows 相关链接....持续更新中....
  6. dw cs 5 安装失败解决方案
  7. Keil 安装 配置
  8. 用微信名片制作软件打造专属的电子名片
  9. PPT,我的视频制作利器
  10. Redis 下载与安装(Windows版)
  11. base64、File、Blob、ArrayBuffer互转
  12. arcmap叠置分析_ArcGIS常见的叠加操作分析情况汇总
  13. oracle多次发运,EBS 发运管理操作实例11——延迟交货(Backorder)
  14. 重庆美食地图(绝对霸道)
  15. 百度旋转验证码(8-24,js逆向)
  16. 综合案例 跳转到主页面
  17. unable to locate解决方法
  18. Oracle数据库基本使用
  19. 买卖股票跟帮老婆买菜是一码事
  20. 面试(hardware)

热门文章

  1. Windows XP减肥法
  2. 我的城市,我的汽车:Autoblog 摄影大赛
  3. 常数中有换行符的错误
  4. SpringBoot 计划任务
  5. Nginx 极简入门教程
  6. 解决ERROR 1396 (HY000): Operation ALTER USER failed for root@localhost
  7. 支付宝一键清除首页各种广告
  8. leetcode 删除链表的倒数第N个节点
  9. leetcode 存在重复元素
  10. 【Vue.js源码解析 二】-- 虚拟 DOM