上节我们简单进行了KNN算法的说明,想想假期结束再回味一下!
Knn算法基本原理:
假设我有如下两个数据集:
dataset = {
'black':[ [1,2], [2,3], [3,1] ], 'red':[ [6,5], [7,7], [8,6] ] }
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
|