手把手教你使用KNN算法(Python实现)

上节我们简单进行了KNN算法的说明,想想假期结束再回味一下!

Knn算法基本原理:

假设我有如下两个数据集:

dataset = { 'black':[ [1,2], [2,3], [3,1] ], 'red':[ [6,5], [7,7], [8,6] ] }

另外有一点绿颜色标记(3.5,5.3), KNN的任务就是判断这个点(下图中的绿点)该划分到哪个组。


KNN分类算法超级简单:只需使用初中所学的两点距离公式(欧拉距离公式),计算绿点到各组的距离,看绿点和哪组更接近。K代表取离绿点最近的k个点,这k个点如果其中属于红点个数占多数,我们就认为绿点应该划分为红组,反之,则划分为黑组。如果有两组数据(如上图),k值最小应为3(X轴坐标3.5)。

除了K-Nearest Neighbor之外还有其它分组的方法,如Radius-Based Neighbor。此方法后面在做介绍。

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import math
import numpy as np
from matplotlib import pyplot
from collections import Counter
import warnings
 
# k-Nearest Neighbor算法
def k_nearest_neighbors ( data , predict , k = 5 ) :
 
     if len ( data ) >= k :
         warnings . warn ( "k is too small" )
 
     # 计算predict点到各点的距离
     distances = [ ]
     for group in data :
         for features in data [ group ] :
             #euclidean_distance = np.sqrt(np.sum((np.array(features)-np.array(predict))**2))   # 计算欧拉距离,这个方法没有下面一行代码快
             euclidean_distance = np . linalg . norm ( np . array ( features ) - np . array ( predict ) )
             distances . append ( [ euclidean_distance , group ] )
 
     sorted_distances = [ i [ 1 ]    for i in
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值