1.KNN算法作为分类的算法,也被成为k近邻算法。
2.KNN算法的核心思想是新增一个样本在特征空间中,k个最近的样本大多数是 一类的,那么这个样本也属于这一类。
这里我们利用欧拉公式计算样本间的距离。
import math
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
raw_data_X = [[3.393533211, 2.331273381],
[3.110073483, 1.781539638],
[1.343808831, 3.368360954],
[3.582294042, 4.679179110],
[2.280362439, 2.866990263],
[7.423436942, 4.696522875],
[5.745051997, 3.533989803],
[9.172168622, 2.511101045],
[7.792783481, 3.424088941],
[7.939820817, 0.791637231]
]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
X_train = np.array(raw_data_X)
y_train = np.array(raw_data_y)
首先,我们将建立数据,然后将数据转换成numpy数组。
plt.scatter(X_train[y_train == 0,0],X_train[y_train == 0,1],color = 'g')
plt.scatter(X_train[y_train == 1,0],X_train[y_train == 1,1],color = 'r')
plt.show()
然后利用matplotlib画出相应的散点图。
然后,插入一个新的点。
x = np.array([8.093607318, 3.365731514])
plt.scatter(X_train[y_train == 0,0],X_train[y_train == 0,1],color = 'g')
plt.scatter(X_train[y_train == 1,0],X_train[y_train == 1,1],color = 'r')
plt.scatter(x[0],x[1],color = 'b')
plt.show()
利用欧拉距离公式,判定新的点,为哪一类。
我们将最近的六个点的距离组为判定依据。
distances = []
for x_train in X_train:
d = sqrt(np.sum((x_train - x)**2))
distances.append(d)
nearest = np.argsort(distance)
c = [y_train[k] for k in nearest[:6]]
输出c为:
可知,将新的数据点判定为1.
如果数据点多的话,也可利用collections.
from collections import Counter
vote = Counter(c)
vote.most_common()
输出为
来源:CSDN
作者:喜欢你的小小叔
链接:https://blog.csdn.net/qq_45779388/article/details/104532401