- 原始k-NN (k临近算法)
样本集中每一个数据都有所属分类的标签,在输入没有标签的新的数据后,选择样本数据集中与心得数据最相近的k个数据,再选择k个最相似数据中出现次数最多的分类,将新数据归为该分类。
距离计算的时间复杂度:计算新的数据点与样本集中每一个数据点的距离,这样才能找到最近的k个数据点。时间复杂度为O(样本点数据个数)。
- k-NN拓展应用
在进行训练时,若样本集中的数据都只含有一个相同的标签,即只有一种分类(例如:在异常检测中,正常情况数据多,而异常情况数据非常少,新的异常通常是不会提前知晓的,只能通过正常数据判断当前新的数据是否为异常的)。测试新数据时,计算与样本点的距离,通过设置阈值,判断该数据是正常数据还是异常数据。
距离计算的时间复杂度:将样本集中的数据的向量进行聚类(聚类方法:k-mean,AP),例如800个数据,聚成4类,每一类通过这一类中的所有数据点,计算一个中心点,该中心点可能只是虚拟点,然后找到距离该虚拟点最近的一个真实数据点。这样当检测一个新的数据点时,只需要计算新的数据点与4个聚类的中心点的距离即可。时间复杂度减少为O(4)。
- 阈值的设置
阈值设置凭经验,凭借训练时TPR(正确率)、FPR(误报率)来确定。每一个阈值产生一对TPR、FPR。如下图,坐标点表示测试数据与样本点数据的距离,红色点代表异常点,共12个;蓝色点代表正常点。
阈值1:TPR(恶意点)=5/12,FPR(恶意点)=0(没有将正常点检测为恶意点)
阈值2:TPR(恶意点)=8/12,FPR(恶意点)=2/所有正常点个数
阈值3:TPR(恶意点)=1(恶意点全部检测出来),FPR(恶意点)=25/所有正常点个数
- ROC曲线图
ROC曲线图可以衡量分类算法、特征种类的优劣。ROC曲线图横坐标为FPR,纵坐标为TPR。将每个阈值点产生的每一对TPR、FPR点连接,形成ROC曲线图。同一FPR,TPR越高,分类算法越好。