python实现K最近邻算法


Posted in Python onJanuary 29, 2018

KNN核心算法函数,具体内容如下

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : KNNdistance.py
# author : zoujiameng@aliyun.com.cn

import math

def getMaxLocate(target): # 查找target中最大值的locate
 maxValue = float("-inFinIty")
 for i in range(len(target)):
  if maxValue < target[i]:
   maxValue = target[i]
   flag = i
 return flag

def KDistance(K, dest, source):
 destlen = len(dest)
 source1len = len(source[1])
 sourcelen = len(source)
 KNN = []
 locate = source # 准备从source中剔除N-K个最大值

 if destlen == source1len:
  for i in range(sourcelen):
   delta = 0
   for j in range(source1len):# 毕达哥拉斯公式
    delta += (dest[j] - source[i][j])*(dest[j] - source[i][j])
   KNN.append(math.sqrt(delta))

  for k in range(sourcelen, K, -1):
   flag = getMaxLocate(KNN)
   #print("%s 最大元素位置为%d" % (KNN, flag))
   KNN.remove(KNN[flag]);
   locate.remove(locate[flag])# 移除对应位置的元素
   #print(locate)
  return locate # 返回最终K个最接近的元素
 else:
  return None

假设你在伯克利开个小小的面包店,每天都做新鲜面包,需要根据如下一组特征预测当天该烤多少条面包:

a. 天气指数1~5(1表示天气很糟,5表示天气非常好);
b. 是不是周末或节假日(周末或节假日为1,否则为0);
c. 有没有活动(1表示有,0表示没有)。

已知

historyA(5, 1, 0) = 300
historyB(3, 1, 1) = 225
historyC(1, 1, 0) = 75
historyD(4, 0, 1) = 200
historyE(4, 0, 0) = 150
historyF(2, 0, 0) = 50

回归:周末,天气不错

Now(4, 1, 0) = ?

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : KNNdistance.py
# author : zoujiameng@aliyun.com.cn

if __name__ == "__main__":

 history = {}
 history[5, 1, 0] = 300
 history[3, 1, 1] = 225
 history[1, 1, 0] = 75
 history[4, 0, 1] = 200
 history[4, 0, 0] = 150
 history[2, 0, 0] = 50

 dest = [4, 1, 0]
 source = []
 for i in history:
  source.append(i)
 print(source)

 from KNNdistance import KDistance
 K = 4
 locate = KDistance(K, dest, source)
 avg = 0
 for i in range(len(locate)):
  avg+=history[locate[i]]
 avg/=K
 print("回归结果:今天应该烤%d个面包" % round(avg))

KNN算法:

  • 创建分类系统
  • 分类(分组),特征抽取(得到相似程度)
  • 回归,即预测数值
  • KNN算法真的是很有用,堪称你进入神奇的机器学习领域的领路人!机器学习旨在让计算机更聪明。你见过一个机器学习的例子:创建推荐系统。
  • OCR指的是光学字符识别 (optical character recognition),这意味着你可拍摄印刷页面的照片,计算机将自动识别出其中的文字。Google使用OCR来实现图书数字化。
  • 一般而言,OCR算法提取线段、点和曲线等特征。
  • OCR中的特征提取要复杂得多,但再复杂的技术也是基于KNN等简单理念的。这些理念也可用于语音识别和人脸识别。你将照片上传到Facebook时,它有时候能够自动标出照片中的人物,这是机器学习在发挥作用!
  • OCR的第一步是查看大量的数字图像并提取特征,这被称为训练(training)。大多数机器学习算法都包含训练的步骤:要让计算机完成任务,必须先训练它。

samples:

a. 垃圾邮件过滤器, 使用一种简单算法——朴素贝叶斯分类器(Naive Bayes classifier)
b. 预测股票市场, 使用机器学习来预测股票市场的涨跌真的很难。对于股票市场,如何挑选合适的特征呢?股票昨天涨了,今天也会涨,这样的特征合适吗?又或者每年五月份股票市场都以绿盘报收,这样的预测可行吗?在根据以往的数据来预测未来方面,没有万无一失的方法。未来很难预测,由于涉及的变量太多,这几乎是不可能完成的任务。

conclude:

机器学习是个很有趣的领域,只要下定决心,你就能很深入地了解它。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用nntp读取新闻组内容的方法
May 08 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
解决Python对齐文本字符串问题
Aug 28 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
Python连接mysql方法及常用参数
Sep 01 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
Jan 15 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
python简单实现操作Mysql数据库
Jan 29 #Python
Django框架教程之正则表达式URL误区详解
Jan 28 #Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 #Python
python中的随机函数小结
Jan 27 #Python
python中的随机函数random的用法示例
Jan 27 #Python
Python闭包之返回函数的函数用法示例
Jan 27 #Python
详解如何利用Cython为Python代码加速
Jan 27 #Python
You might like
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
Python的argparse库使用详解
2018/10/09 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
简单的命令查看安装的python版本号
2020/08/28 Python
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
银行职业规划书范文
2013/12/28 职场文书
行政部岗位职责范本
2014/03/13 职场文书
小班下学期评语
2014/05/04 职场文书
保密工作目标责任书
2014/07/28 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
边城读书笔记
2015/06/29 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python