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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
python使用pil库实现图片合成实例代码
Jan 20 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
Python 分享10个PyCharm技巧
Jul 13 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
python 5个顶级异步框架推荐
Sep 09 Python
python实现磁盘日志清理的示例
Nov 05 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弱类型的安全问题详细总结
2016/09/25 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
解析js如何获取css样式
2016/12/11 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
python顺序执行多个py文件的方法
2019/06/29 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
2014年元旦促销活动方案
2014/02/22 职场文书
小学二年级评语
2014/04/21 职场文书
企业法律事务工作总结
2015/08/11 职场文书
python百行代码实现汉服圈图片爬取
2021/11/23 Python
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB