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实现竖排打印传单手机号码易撕条
Mar 16 Python
python显示生日是星期几的方法
May 27 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
python利用正则表达式提取字符串
Dec 08 Python
Python只用40行代码编写的计算器实例
May 10 Python
Python虚拟环境项目实例
Nov 20 Python
Python进阶之尾递归的用法实例
Jan 31 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
python多任务之协程的使用详解
Aug 26 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
如何基于线程池提升request模块效率
Apr 18 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
破解Session cookie的方法
2006/07/28 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JS打印组合功能
2016/08/04 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
原生js调用json方法总结
2018/02/22 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
Python去除字符串两端空格的方法
2015/05/21 Python
教你学会使用Python正则表达式
2017/09/07 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
python numpy数组复制使用实例解析
2020/01/10 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
优秀学生党员先进事迹材料
2014/05/29 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
永远是春天观后感
2015/06/12 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers