K-nearest-neighbor
既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的,又是最好的文本分类算法之一。
消极学习(Lazy Learning)
这种学习方式指不是根据样本建立一般化的目标函数并确定其参数,而是简单地把训练样本存储起来,直到需要分类新的实例时才分析其与所存储样例的关系,据此确定新实例的目标函数值。也就是说这种学习方式只有到了需要决策时才会利用已有数据进行决策,而在这之前不会经历 Eager Learning所拥有的训练过程。KNN就属于这种学习方式。
工作机制:给定测试样本,基于某种距离度量找出训练集中与其最靠近的“k”个训练样本,然后基于这“k”个“邻居”的信息来进行预测。在分类任务中可使用“投票法”,即选择k个样本中出现最多的类别标记作为预测结果;在回归任务中可使用“平均法”,将这k个样本的实值输出标记的平均值作为预测结果。
简单来说,KNN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。
衡量两个样本之间距离除了可以使用欧式距离以外,还可以采用闵可夫斯基距离, 曼哈顿距离,切比雪夫距离,余弦距离等等。
闵可夫斯基距离也叫做明氏距离,计算公式为:(∑ni=1|xi−yi|p)1p(∑i=1n|xi−yi|p)1p。当p=1时,就是曼哈顿距离;当p=2时,就是欧氏距离;当p取无穷时,就是切比雪夫距离:
limp→∞(∑ni=1|xi−yi|p)1p=maxni=1|xi−yi|