文档章节

监督学习算法_k-近邻(kNN)分类算法_源代码

o
 osc_3ysjf99y
发布于 2019/01/17 23:23
字数 878
阅读 11
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

因为自己想学着去写机器学习的源码,所以我最近在学习《机器学习实战》这本书。

《机器学习实战》是利用Python2完成的机器学习算法的源代码,并利用机器学习方法来对实际问题进行分析与处理。

(《机器学习实战》豆瓣读书网址:https://book.douban.com/subject/24703171/)

以下内容是我通过学习《机器学习实战》,以及我对k-近邻(kNN)分类算法的理解,所总结整理出的内容,其中kNN分类算法的源码为Python3的代码,希望大家多多批评指正。

 

kNN分类算法是一类有监督的学习算法,kNN分类算法首先计算出测试样本点与已知样本点之间的距离,选择距离测试样本点最近的k个已知样本点,根据k个已知样本点的类别,通过“投票法”得到测试样本点的最终分类。

kNN分类算法的优缺点:优点:精度高、对异常值不敏感、无数据输入假定;缺点:计算复杂度高、空间复杂度高;适用数据范围:数值型和标称型(标称型数据:变量的结果只在有限目标集中取值)。--摘自《机器学习实战》

kNN分类算法通常使用欧氏距离来计算测试样本点与已知样本点之间的距离。

已知两个点A=(x1, y1)、B=(x2, y2),则A和B的欧氏距离为:

Distance = sqrt( (x1-x2)^2 + (y1-y2)^2 )

kNN分类算法的伪代码如下:

Step1:计算出测试样本点与已知样本点之间的距离;

Step2:将距离按照升序排序;

Step3:选择距离测试样本点最近的k个已知样本点;

Step4:计算k个最近的已知样本点所在类别出现的频率;

Step5:k个最近的已知样本点出现频率最高的类别,即为测试样本点的最终分类。

 

kNN分类算法的源码:

 def classify(test, samples, labels, k):

  import numpy as np
  import operator

  # 改变测试样本的格式
  samplesize = samples.shape[0]
  testnew = np.tile(test, (samplesize, 1))

  # 计算测试样本与已知样本之间的距离
  distances2 = (testnew - samples) ** 2
  distances = (distances2.sum(axis = 1)) ** 0.5

  # 对距离进行升序排序,并返回距离的下标
  sortdistances = distances.argsort()

  #计算k个最近的已知样本点所在类别出现的次数
  classcount = {}

  for i in range(k):
    sortedlabels = labels[sortdistances[i]]
    classcount[sortedlabels] = classcount.get(sortedlabels, 0) + 1

  #将k个最近的已知样本点所在类别出现的次数降序排列
  sortedclasscount = sorted(classcount.items(), key = operator.itemgetter(1), reverse = True)

  #返回k个最近的已知样本点出现频率最高的类别,即为测试样本点的最终分类
  return sortedclasscount[0][0]

对 kNN分类算法的源码进行测试:

import numpy as np

import operator
test = [0, 1]
samples = np.array([[1, 1], [1, 3], [0, 0], [0., .1]])
labels = ['A', 'A', 'B', 'B']
k = 3
print(classify(test, samples, labels, k))

测试代码的输出结果为 'B',即测试样本点[0, 1]的所属类别为:B。 

 

以上是我对kNN分类算法的理解以及kNN分类算法的源代码,欢迎大家多多批评指正。

后续如果有时间的话,我会增加 监督学习算法_k-近邻(kNN)分类算法_实战 这一部分的随笔整理。

 

祝好

希望可以和大家互相学习、共同进步

Violet HE

2019.1.18  00:35

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
N简单CMS

N简单CMS能够让网站开发者更快速、灵活、简单的开发网站。 N简单CMS有以下特点: 更简单和自由的模板标签调用 专注于人性化的管理和操作 基于完全php5框架Kohana2.3.4开发 资源调用和消耗更低...

匿名
2013/02/26
3.2K
0
StreetPass

StreetPass,最初是想模拟任天堂NDS掌机中的StreetPass开发的(但未完成,大体框架已可行)。适用于记录每天在街上偶遇的纸妹Or帅锅的信息。 原理是想采用Wifi hot技术,由此可以在搜索到附近...

口米巴
2013/03/18
1.6K
0
硬实时操作系统--Raw OS

Raw-OS 起飞于2012年,Raw-OS志在制作中国人自己的最优秀硬实时操作系统。 Raw-OS 操作系统特性 内核最大关中断时间无限接近0us, s3c2440系统最大关中断时间实测0.8us。 支持idle任务级别的事...

jorya_txj
2013/03/19
6.2K
1
Python开发者社区整站源码--Pythoner

pythoner.net 整站源代码 依赖模块 Django 1.4.2 PIL DjangoVerifyCode 0.2.2 开发环境配置 运行scripts目录下的setupenv.sh文件,将会自动安装配置所需环境 设置本地环境变量:export env=D...

~T.y~
2013/04/10
3.2K
0
阿里云开放存储服务的C语言SDK--OSSC

OSSC(Aliyun Open Storage Service C SDK)为阿里云开放存储服务(OSS)提供了一套完整易用的C SDK。 OSSC完全采用C语言开发,并实现了类似面向对象的调用方式,遵循了良好的编码规范,目前O...

大卷卷
2012/10/22
4.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

以渠道身份为数据背书,悟空榜如何呈现最真实的市场声音?

文 | 曾响铃 来源 | 科技向令说(xiangling0815) 时至今日,电商节已经成为各巨头零售平台例行的活动,花样在不断创新,玩法也在不断涌现。 在这个过程中,伴随电商节的各种品牌、产品销量榜...

曾响铃
前天
3
0
川普宣布拉黑微信支付!腾讯市值一度蒸发5000亿,45天后跟鹅厂发生交易都属违法

郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 轮到腾讯和微信了。 谁都没想到,川普针对中国企业的举措会进展的这么快,就在刚刚,白宫官方网站po出一条总统行政命令: Executive Order ...

Java旅途
昨天
0
0
图解浏览器安全(同源策略、XSS、CSRF、跨域、HTTPS、安全沙箱等串成糖葫芦)

关注公众号“执鸢者”,获取大量教学视频并进入专业交流群,回复“安全”获取本节思维导图。 一天小林又去面试啦,面试官说:“小林呀,你对浏览器安全了解多少?”。小林摸了摸头说,目前我...

执鸢者
昨天
0
0
《乘风破浪的姐姐》:内容营销研究报告

《乘风破浪的姐姐》节目表现 大盘:同期热播的综艺中,《乘风破浪的姐姐》全面领先 6月12号以来,同期热播的综艺节目《乘风破浪的姐姐》播映指数排名第一,整体热度相对靠前;好评度、观看度等...

OSC_BMKOlH
昨天
0
0
TikTok遭遇十面埋伏的BGM,是美国Z时代人的抗议声 | 一周之最

原本是来中国街头吃吃吃,积累了不少粉丝的老外博主郭杰瑞,不知是不是因为央视的连线,顺应时势地变成了时政UP主,因疫情回到美国后,一直带着口罩在街头做采访,满足中国网友各种好奇。 从...

紫金山科技
前天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部