- 概述
KNN(K-Nearest Neighbors),又称K-近邻算法。
简单来讲,K-近邻算法采用不同特征值之间的距离方法进行分类。
2. 前提准备
https://www.runoob.com/numpy/numpy-matplotlib.html
- 手动算法实践
导包:
import numpy as np
import matplotlib.pyplot as plt
模拟数据集:
train_data = np.array([np.random.random() * 10 for i in range(20)]).reshape((10,2))
创建训练集对应的标签(历史样本都包含特征和标签):
train_label = np.array([0,0,0,0,0,1,1,1,1,1])
绘制历史样本的分布:
plt.scatter(train_data[train_label == 0, 0], train_data[train_label == 0, 1], c='r')
plt.scatter(train_data[train_label == 1, 0], train_data[train_label == 1, 1], c='g')
plt.show()
预测样本在历史样本中的分布:
predict_sample = np.array([np.random.random() * 10, np.random.random()
* 10])
画出分布图:
plt.scatter(train_data[train_label == 0, 0], train_data[train_label == 0, 1], c='r')
plt.scatter(train_data[train_label == 1, 0], train_data[train_label == 1, 1], c='g')
plt.scatter(predict_sample[0], predict_sample[1], c='b')
plt.show()
计算预测样本与每一个历史样本的距离:
distances = []
for data in train_data:
# (x1 - x2)^2 + (y - y2)^2 开根号,算距离
distance = np.sqrt(np.sum((predict_sample - data) ** 2))
# 将计算出的距离添加到distances集合中
distances.append(distance)
distances = np.array(distances)
取距离预测样本最近的前k个样本对应的标签,假设k=5:
k = 5
# .argsort返回的是一个数组(数组中存储的是数据从小到大的坐标)然后用切片的方式取出数组
predict_label = [train_label[i] for i in distances.argsort()[:k]]
得出结果:
from collections import Counter
# .most_common,取出集合中最多的次数的
Counter(predict_label).most_common(1)[0][0]
4. Sklearn_KNN
5. Sklearn_KNN2
续:
补充:
https://blog.csdn.net/weixin_41445387/article/details/96024886
本文使用的软件的名字及版本:
Anaconda3-2019.07-Windows-x86_64
not learn to live:
有一次 国王为美丽的公主开宴会
有个士兵在一旁站岗
看到公主经过他的面前
她是绝色佳人 他立刻爱上了她
但卑微的士兵
怎配得上国王的女儿?
有一天 他终于设法接近她
并告诉她 没有她活不下去
公主被他的深情所感动 她告诉士兵
“如果你能等我100天 且日日夜夜在阳台下等我 百日之后我就是你的”
听了这话 士兵在阳台下等
一天 两天 十天 二十天
公主每晚往外探 他仍伫立终宵
风雪雨都抵挡不了他
鸟停在头上 蜜蜂叮他 他都不动
但是······在第九十天时
士兵全身已······苍白且瘦削
眼泪从眼眶里面流出来
他已撑不住了
甚至连睡觉的力气都没有
公主一直注视着他
最后 在第九十九天的晚上
士兵站了起来
提起椅子 走了! 走了!
前面的九十九天是爱的表现,最后一天是为了尊严。爱,是双方一起付出的。