k近邻和k-means

k近邻和k-means,听名称很相似,很容易张冠李戴。其实它们的全名为K近邻分类算法(k-Neighbour,KNN)和K均值聚类算法(K-means clustering algorithm)。

  1. k紧邻是一中基本的分类与回归算法,是监督学习算法,没有明显的训练学习过程。
  2. k-means是聚类算法,是无监督学习算法,有训练步骤。

k近邻

k近邻(k-neareast neighbor)的直观理解就是:给定一个训练数据集T = { ( x i , y i ) , ⋯ , ( x n , y n ) } T = \left \{ \left ( x_{i}, y_{i} \right ), \cdots, \left ( x_{n}, y_{n} \right ) \right \}T={(xi,yi),,(xn,yn)},对于新的实例x xx,在训练集中找到与之相邻的k个实例N k ( x ) N_{k}\left( x\right)Nk(x),这k kk个实例的多数属于哪一类,就把这个实例分到哪一类中。可知,k kk值的选择距离度量分类决策规则 作为k近邻的三要素。
k近邻的分类决策通常会使用多数表决法。新实例x xx的k个最近训练实例点多数属于哪一类别,新实例x xx就属于哪一类别。

k值的选择

k kk值是k近邻算法中的超参数。如果k kk值过小,容易发生过拟合,输入实例对与其邻近的实例点很敏感;如果k kk值过大,容易发生欠拟合,与输入实例距离较远的实例点也会参与到预测中,干扰预测。一般情况下,会使用交叉验证的方法取合适的k kk值。

距离度量

我们定义特征空间中的两个实例点的距离反映两个实例点的相似程度。对于k紧邻算法,它的的特征空间一般是n nn维实向量空间R n \mathbb{R}^{n}Rn。假设特征空间为χ \chiχ,为n nn维实向量空间R n \mathbb{R}^{n}Rn,其中有两点为x i , x j x_{i}, x_{j}xi,xj,分别表示为x i = ( x i 1 , ⋯ , x i n ) T , x j = ( x j 1 , ⋯ , x j n ) T x_{i} = \left ( x_{i}^{1}, \cdots, x_{i}^{n} \right )^{T}, x_{j} = \left ( x_{j}^{1}, \cdots, x_{j}^{n} \right )^{T}xi=(xi1,,xin)T,xj=(xj1,,xjn)T

L p L_{p}Lp定义为:
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i l − x j l ∣ p ) 1 p ≥ 1 L_{p}\left ( x_{i} , x_{j} \right ) = \left ( \sum_{l=1}^{n} \left | x_{i}^{l} - x_{j}^{l} \right |^{p} \right )^{\frac{1}{p}} \qquad \geq 1Lp(xi,xj)=(l=1nxilxjlp)p11
p = 2 p=2p=2时,就是我们常见的欧式距离(Euclidean distance):
L 2 ( x i , x j ) = ∑ l = 1 n ∣ x i l − x j l ∣ 2 L_{2}\left ( x_{i} , x_{j} \right ) = \sqrt{ \sum_{l=1}^{n} \left | x_{i}^{l} - x_{j}^{l} \right |^{2} }L2(xi,xj)=l=1nxilxjl2
p = 1 p=1p=1时,被称为马哈顿距离(Manhattan distance):
L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i l − x j l ∣ L_{1}\left ( x_{i} , x_{j} \right ) = \sum_{l=1}^{n} \left | x_{i}^{l} - x_{j}^{l} \right |L1(xi,xj)=l=1nxilxjl
p = ∞ p=\inftyp=时,为各个坐标距离的最大值
L ∞ ( x i , x j ) = m a x ∣ x i l − x j l ∣ L_{\infty}\left ( x_{i} , x_{j} \right ) = max \left | x_{i}^{l} - x_{j}^{l} \right |L(xi,xj)=maxxilxjl

k-means

k-means是一种聚类算法,是无监督学习算法。假设有训练数据T = { x i , ⋯ , x n } T = \left \{ x_{i}, \cdots,x_{n} \right \}T={xi,,xn},它将训练数据分为k组,每一组是一个簇,随机选择k个实例作为初始的聚类中心点,对于每一个实例,计算它和这k个聚类中心的距离,然后把它分配到与它距离最近的聚类中心所在的簇中去;计算每个簇中所有实例的平均值,作为新的聚类中心点,以此往复,直至聚类中心点不再发生明显变化。

k-means算法最后得到k个簇,记为C = { C 1 , ⋯ , C k } C = \left\{ C_{1}, \cdots, C_{k}\right\}C={C1,,Ck},每个簇内的实例相似度高,不同簇中的实例相似度低。计算实例点和聚类中心点的距离一般可以使用欧氏距离。

k-means


版权声明:本文为weixin_42111770原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。