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 编码处理-str与Unicode的区别
Sep 06 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
python获取服务器响应cookie的实例
Dec 28 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
python多线程同步实例教程
Aug 11 Python
Django视图扩展类知识点详解
Oct 25 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
Python定义一个函数的方法
Jun 15 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
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
JavaScript QueryString解析类代码
2010/01/17 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Python中encode()方法的使用简介
2015/05/18 Python
Python实现的字典值比较功能示例
2018/01/08 Python
python实现简单名片管理系统
2018/11/30 Python
python执行精确的小数计算方法
2019/01/21 Python
详解python-图像处理(映射变换)
2019/03/22 Python
pytorch 求网络模型参数实例
2019/12/30 Python
Python 实现简单的客户端认证
2020/07/29 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
C# .NET面试题
2015/11/28 面试题
自主招生自荐信范文
2013/12/04 职场文书
超市中秋节活动方案
2014/02/12 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
单位介绍信格式
2015/01/31 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers