通俗易懂之KNN算法

KNN算法

- 什么是KNN算法?

一般来说KNN算法 指的是临近算法,或者说K最近邻分类算法 洋名:k-NearestNeighbor,就是一个分类算法。
见名知意,他的意思就是找每个样本的k个邻居,用k个邻居来证明你是一个什么样本。所以样本周围的邻居就显得尤为重要了。还不懂?我在来举个栗子。

栗子

  • 在一个某个学校中的某个班级。你想要知道某一名学生是一名考试成绩优秀的学生,还是一名学习成绩一般的学生,可以通过调查他周围朋友的成绩,或者跟他的关系最亲密的人的成绩来推算这名学生的成绩,这种寻找这名学生的朋友的行为就是KNN临近算法。总之~中国有句古话,叫做物以类聚,人以群分。就能很好的应征这个KNN算法。即K最临近分类算法。
    KNN临近算法

KNN算法有什么作用?

  • 他的作用很简单就是分类。他是一枚分类算法。当然与分类相关的匹配也可以。都是KNN算法的作用

KNN算法进行分类的过程&决策的过程

KNN算法讲解

  • 如图所示:

  • 1.中间的绿色的圆就是一个位置样本,那么现在我们要对这个绿色的圆形进行分类。之前说道KNN算法就是找周围的邻居。

  • 2.那么我们给K一个值,让K=3,那么就是寻找绿色的圆形周围最近的三个邻居,就是如图所示的实线的圆形内的邻居,这个圆形周围最近的邻居里面有三个三角形,一个矩形,那么我们就可以将这个圆形堪称是三角形。

  • 3.如果我们将K的值变成5,那么K = 5 就变成寻找最近的5个邻居,那么情况就变了。如图所示。看虚线圆内的情况,绿色的圆周围的5个邻居变成3个矩形,2个三角形,那么这个绿色的圆形就是一个矩形。

  • 这就是KNN算法的一个分类的过程。大家可以看到影响KNN分类的第一个就是K的值,周围邻居的数量的种类。那么影响周围邻居数量的种类的又是什么呢? 答案就是距离,就是看看谁距离这这个圆形近,谁优先成为邻居,那么就优先影响这个样本的属性。

如何实现KNN算法

  • 在刚才的分类过程&决策过程中可以看出。影响样本的属性的就是周围邻居的属性,影响周围邻居属性的就是邻居与向本之间的距离。

  • 那么这个举例是什么呢?这个举例就是欧式距离

    • 欧式距离
      原名:欧几里得度量&欧几里得距离
      意义:欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。
      还不明白?就是初中物理中的位移,就是两点之间最短的距离两点连线。即两个点之间的真实距离
      二维空间公式:
      在这里插入图片描述
      在这里插入图片描述
      不负责解答公式了,自己研究一下。
    • 三维空间的公式
      在这里插入图片描述
      在这里插入图片描述
  • n维空间的公式
    在这里插入图片描述

  • 当然关于举例还有曼哈顿举例,马氏距离,闵氏距离等等,大家有空可以研究一下,活到老,学到老!

    欧式距离算法可以算出N维向量之间的距离。
    那么我们怎么利用欧式距离算法求出两个样本之间的距离?
    把两个样本里的n个属性都用数字描述,然后用欧式距离算法求出n个属性之间的距离。

    from sklearn.neighbors import KNeighborsClassifier
    neigh = KNeighborsClassifier(n_neighbors=3)
    身高、体重、鞋的尺寸
    X = np.array([[181,80,44],[177,70,43],[160,60,38],[154,54,37], [166,65,40],[190,90,47],[175,64,39],[177,70,40], [159,55,37],[171,75,42],[181,85,43]])
    display(X) y =[‘male’,‘male’,‘female’,‘female’,‘male’,‘male’,‘female’,‘female’,‘female’,‘male’,‘male’]
    第1步:训练数据
    neigh.fit(X,y)
    第2步:预测数据
    Z = neigh.predict(np.array([[190,70,43],[168,55,37]]))
    display(Z)
    在jupyter或者pychram再或者cmd,都能运行。当然要安装包

    扩展一下,加一个项目。

    坐标阿里巴巴的天池大数据竞赛项目,用KNN算法诊断乳腺癌。过两天我回另外再写一个博文。来单独的说一下这个乳腺癌诊断项目。

PS:博文编写难免有失误之处,如果失误之处还请大神斧正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值