监督学习之k Nearest Neighbors算法

首先说kNN算法是一种有监督学习的分类算法。所谓有监督学习,就是在应用算法之前我们必须准备一组训练集,训练集中的每个实例都是由一些特征和一个分类标签组成;通常还会存在一个测试集,用来测试训练出来的分类模型的准确性。其实kNN算法并没有体现出有监督学习的所有特点,没有模型,只有算法。甚至可以说这就是一种暴力扫描法,运行效率上比较低效。


在理解算法之前,先要了解多维空间中两个点之间的距离的概念,这个应该不难,这里的距离使用高中数学中的欧式距离。

d=sqrt( ∑(xi1-xi2)^2 ) 这里i=1,2..n

Nearest Neighbors——最近的邻居——也就是说要判定一个点A属于哪一类,我们就要看离A点最近的那个点属于哪一类;再加一个k,就是说要使用离A点最近的k个点的类别信息来判定:如果k=10,其中有8个点是属于第一类,那么A点就属于第一类。这实际上就kNN算法的核心了。


还有一种情况:现实中的特征向量,可能包含各种维度,比如人的身高、体重、朋友数量,这三个维度的值的比对是没有意义的,具体到空间中的距离计算,可能就会产生某个维度的数据决定了向量之间的距离的情况。因此,我们必须对每个特征向量做标准化处理(normalization)。一般来说,我们可以将维度的值映射到0-1之间的位置上,很容易做到这点:对于每个特征的值,我们只需要应用以下的公式即可:

newValue = (oldValue-min)/(max-min)



你可能感兴趣的:(数据仓库与数据挖掘,机器学习)