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 requests 报错方法集锦
Mar 19 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
python清除函数占用的内存方法
Jun 25 Python
python实现将汉字保存成文本的方法
Nov 16 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
python求前n个阶乘的和实例
Apr 02 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 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
IStream与TStream之间的相互转换
2008/08/01 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
php批量删除操作代码分享
2017/02/26 PHP
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
在vue中嵌入外部网站的实现
2020/11/13 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
Python函数和模块的使用总结
2019/05/20 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
python如何安装下载后的模块
2020/07/03 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
知名企业招聘广告词大全
2014/03/18 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
测控技术自荐信
2014/06/05 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
Vue router配置与使用分析讲解
2022/12/24 Vue.js