工作原理是:
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
流程
k-近邻算法的一般流程
(1) 收集数据:可以使用任何方法。
(2) 准备数据:距离计算所需要的数值,最好是结构化的数据格式。
(3) 分析数据:可以使用任何方法。
(4) 训练算法:此步骤不适用于k-近邻算法。
(5) 测试算法:计算错误率。
(6) 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输
入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。
import numpy as np
import pandas as pd
准备数据
datas = np.array([[80, 10], [15, 60], [76, 18], [19, 62], [90, 5], [13, 50]])
labels = np.array([1, 2, 1, 2, 1, 2])
预测新的样本的所属分类
sample = np.array([50, 30])
将数据转换成pandas
df = pd.DataFrame(datas)
df["labels"] = labels
计算样本到所有已知样本的距离
df["distance"] = np.linalg.norm(sample-datas, axis=1)
对距离进行排序
result = df.sort_values(by="distance")
取出距离sample(待分类样本)最近的前K(3)个
result = result[:3]
统计前k个中标签最多的类别(超过一半)
print(result['labels'].value_counts().idxmax())