机械学习- 算法- k-近邻算法 knn算法 -classify0函数详解

我来自Android开发人员,刚刚接触的机械学习,整理了k-近邻算法的classify0函数的具体意义,以及一步一步的步骤讲解,望对大家有用。由于初写,如有纰漏或者错误,欢迎指出。

如,您觉得文章有用,可以分享给小伙伴们一起进步成长。需 附加原文地址
链接 http://www.jianshu.com/p/551fb62a2b94 收藏点赞,是对作者最大的支持,核动力的发动机

先上运行图

如果把 # 零 初始化的数据代入次函数,结果应该是'A'
数据来自于,自己编写的,用于学习测试用,准确度与文章的理解程度,望大家提出我会积极改进。

运算结果

近邻算法的 计算公式精髓,下方会 一步一步 讲解哦!

import numpy as np
#用于分类的输入向量是inX,输入的训练样本集为dataSet,
#标签向量为 labels ,最后的参数 k 表示用于选择最近邻居的数目,其中标签向量的元素数目和矩
#阵 dataSet 的行数相同。
def classify0(inX,dataSet,labels,k):
    # 获取 数组 形状的 第一个 参数 a=[[1,2],[1,2],[1,2]]  a.shape = [3,2] a.shape[0] = 3
# 一、
    dataSetSize = dataSet.shape[0]
    # tile 代表了inX,复制为dataSetSize行,1列的数组
# 二、
    diffMat = np.tile(inX,(dataSetSize,1))-dataSet
    # 平方
    sqDiffMat = diffMat**2
    # axis 等于 1 是将 矩阵的每一行 相加
    sqDistances = sqDiffMat.sum(axis=1)
    # 开方
    distances = sqDistances**0.5
# 三、
    # 从小到大 排列
    sortedDistances = distances.argsort()
    classCount = {}
# 四、求出来 最低距离 的 labels结果,存放在classCount 中
    for i in range(k):
        voteIlabel =labels[sortedDistances[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]
# 零   初始化 clasify0  中所需的数据
inX = [2,3]
# 限度 2,2为中介,距离小于 为不喜欢A,大于为喜欢B
dataSet = np.array([[1,2],
          [3,5],
          [1.5,2.5],
          [2.5,3.5]])
labels = ['A','B','A','B']
k=3
# 一、 求出 dataSet 训练数据的 行向量
dataSetSize = dataSet.shape[0] = 4
1.1
二、 复制 输入inX 行向量  与dataSet 的 行大小一致 ,由上方1.1图可知,向量两点的最短距离为 1.0= (inX 行向量 - dataSet 的行向量)
diffMat  = np.tile(inX,(dataSetSize,1))  - dataSet= 
[[2,3],   - [1,2],     =  [1,1]
[2,3],  - [3,5],       =  [-1,-2]
[2,3],  - [1.5,2.5],   =   [0.5,0.5]
[2,3]] - [2.5,3.5]]    =  [-0.5,-0.5]
# 1.1 = 将 差集 平方 虽有  下一步 行向量相加
sqDiffMat = diffMat**2 
# 1.2 = 行向量相加
sqDistances  = sqDiffMat.sum(axis=1) (行向量相加)
[(1^2 + 1^2),
...]
# 1.3 = 所得和集  再 开方(**0.5 相当于开方), 即  求出来了最短距离是多少、 即上方1.1 图的 d
distances  = sqDistances**0.5 = 
[((2)**0.5)   ≈  1.41421
((5)**0.5)    ≈  2.23606
((0.5)**0.5)  ≈  0.707106
((0.5)**0.5)  ≈  0.707106 
...]
# 三、
# argsort : 将distacnces中的元素从小到大排列,提取其对应的index(索引),然后输出到sortedDistances 
# 即 sortedDistances[0] = distacnces[2] = 0.707106
sortedDistances = distacnces.argsort() = 
[2,3,0,1] 
# 四
# 假设 k=3 i = 0 第一层循环 的结果为
voteIlabel =labels[sortedDistances[i]] = 'A'
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1 = 1 (classCount索引为'A')
# 将遍历存储的 classCount = [('A', 1)]  排序,按照
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
#   返回第一个 最相近的 值,作为结果, 即最相近的近邻算法
return sortedClassCount[0][0]

PS:上方算法内容来自于 机器学习实站 一书,对于一些难理解或者一些知识点的记录,并附加上自己的见解,注释解释等。如,更想快速的学习,可以直接阅读本书

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容