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实现合并两个数组的方法
May 16 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
点球小游戏python脚本
May 22 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
Python3之手动创建迭代器的实例代码
May 22 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
python的scipy实现插值的示例代码
Nov 12 Python
python logging通过json文件配置的步骤
Apr 27 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
python db类用法说明
Jul 07 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 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/05/09 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
详解vue+css3做交互特效的方法
2017/11/20 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
定制FileField中的上传文件名称实例
2017/08/23 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
详解Django admin高级用法
2019/11/06 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
员工合理化建议书
2014/05/19 职场文书
儿园租房协议书范本
2014/12/02 职场文书
作文评语怎么写
2014/12/25 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS