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 13 Python
解决uWSGI的编码问题详解
Mar 24 Python
关于Python数据结构中字典的心得
Dec 04 Python
wxpython实现图书管理系统
Mar 12 Python
python用插值法绘制平滑曲线
Feb 19 Python
python带参数打包exe及调用方式
Dec 21 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
Python 改变数组类型为uint8的实现
Apr 09 Python
Python urllib2运行过程原理解析
Jun 04 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 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
10个实用的PHP代码片段
2011/09/02 PHP
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
深入理解Vue router的部分高级用法
2018/08/15 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
layui表格数据重载
2019/07/27 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
python reverse反转部分数组的实例
2018/12/13 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
Python正则表达式学习小例子
2020/03/03 Python
python deque模块简单使用代码实例
2020/03/12 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
会计专业大学生求职信范文
2014/01/28 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
交通事故私了协议书
2014/04/16 职场文书
访谈节目策划方案
2014/05/15 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
交通安全温馨提示语
2015/07/14 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL