机器学习随笔之KNN分类

其实想想手写那么多字,偶内心是比较拒绝的。不过今天随笔写一点,刚好手边书翻到了KNN分类,那就写一个哈~~

不过还是期待我的机器学习&深度学习十部曲把!!!!!是不是应该加一句颤抖吧!地球人!!!

看这个就明白的哈~~

http://blog.csdn.net/sunshine_java_l/article/details/77905865

OK~现在的主题

KNN分类,不知道你们对于这个是怎么考虑,不知道你们有没有看过里面的源码,还是直接from sklearn import neighbors。是不是大部分第二个,其实如果理解了公式,直接导入包是一个比较高效的行为,但是前提是你懂

我现在说的是如何深入简单理解KNN.

step 1: 数据

不知道要不要下载一个实际的数据,想想算了,太麻烦。随便设置吧

random.randint(10,size=(6,2))

[[0 2]
[4 8]
[8 9]
[8 4]
[1 8]
[5 7]]

labels不能随便了,随机的那我就自己表一下好了

[0,1,2,2,0,1]

看出来了吗?三类哈~~~

step 2:公式

这里有马氏距离,欧氏距离。嗯~欧氏距离公式好打一点,那就用欧氏距离,还有一个问题,这里没有公式编辑器吗???不会吧,还真没有,嗯嗯~~我自己的博客站一定要有这个

算了,将就吧~~~
弄个公式麻烦死了](https://img-blog.csdn.net/20170909101713484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3Vuc2hpbmVfSmF2YV9M/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

差评!!!

好了,公式简单的想自杀是不是
,我也是这样觉得,相对于那些求导又微分又泰勒的,这个简直业界良心!
其实
思路很简单,对于输入点与已知
数据的距离,最后得到前k小的数据,通过投票机制得到最优分类!
step 3: 代码

import numpy as np
from numpy import  random
import operator
def creatData():
    group = np.array([[0 ,2]
, [4 ,8]
,[8 ,9]
, [8 ,4]
, [1 ,8]
, [5 ,7]])
    labels = [0,1,2,2,0,1]
    return group, labels
def KNN(input, train, labels, k):
    trainSize = train.shape[0]
    diff = np.tile(input, (trainSize, 1))-train#tile是复制函数
    #print(diffMat)
    pow2 = diff**2#开平方
    #print(sqDiffMat)
    pow2Sum = pow2.sum(axis=1)#得到加和
    final = pow2Sum**0.5#开方
    #print(final)
    sortFilan = final.argsort()#这个要注意,这个得到的是排序后的index
    #投票
    #print(sortFilan)
    count = {}
    for i in range(k):
        votes = labels[sortFilan[i]]#0 2 2

        #print(count.get(votes,0))
        count[votes] = count.get(votes, 0)+1#

    print(count)
    sort_Count = sorted(count.values())
    maxVote = max(sort_Count)#得到最大投票

    label = list(count.keys())[list(count.values()).index(maxVote)]

    return label
if __name__=='__main__':
    #print(random.randint(10,size=(6,2)))

    dataSet, labels = creatData()
    label = KNN([0,1], dataSet, labels, 3)
    print(label)

step 4:运行得到[0,1]属于第0类。是不是很简单啊!!!
其实自己写明白所有公式比起来自己直接导入包更又成就感,Then, 你可以自己封装KNN包,自己调用,多好~
是吧!!!
打了这么多字,太累了!!!!!!!
再次推荐我即将上线的个人博客

http://blog.csdn.net/sunshine_java_l/article/details/77905865

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值