聚类随笔

作者: zidea | 来源:发表于2019-11-12 19:22 被阅读0次
    机器学习基础

    聚类分析

    个人认为这是一个比较简单容易理解的机器学习算法

    一个例子

    假设我们在超市做客群分析,不同顾客有不同关注点,不同顾客按特征可以划分为不同群体,但是如何划分和划分为那些群体我们都不知道。

    我们可以让没有任何知识背景的小朋友尝试对动物进行分类,他们就可以根据动物体型和颜色、有没有翅膀等一些特征对动物做出简单分类。

    相似的东西进行分组

    无监督学习

    • 难于评估
    • 难于调参

    基本概念

    • 要得到簇的数量,需要指定 k 值
    • 质心:均值,即向量各个维度平均即可
    • 距离度量: 常用欧几里得距离和余弦相识度
    • 优化目标:min \sum_{i=1}^k \sum_{x \in C_i} dist(c_i,x)^2

    距离

    明氏距离

    对于样本点x_i(x_{1}^i,x_{2}^i,\dots , x_{m}^i) 和样本点x_i(x_{1}^j,x_{2}^j,\dots , x_{m}^j)
    d_{min}(x_i,x_j) = (\sum_{k=1}^m|x_{ik} - x_{jk}|^p)^{\frac{1}{p}}

    根据明氏距离我们根据不同 p 取值来得到曼哈顿距离、欧式距离和切比雪夫距离

    • 当 p = 1 时,曼哈顿距离(街区距离)(Manhattan Distance)
      d_{min}(x_i,x_j) = (\sum_{k=1}^m|x_{ik} - x_{jk}|)

    • 当 p = 2 时,欧式距离(Euclidean Distance)
      d_{min}(x_i,x_j) = \sqrt{\sum_{k=1}^m|x_{ik} - x_{jk}|^2}

    • p \rightarrow \infty 切比雪夫距离(Chebyshev Distance)

    d_{min}(x_i,x_j) = \lim_{p \rightarrow \infty}(\sum_{k=1}^m|x_{ik} - x_{jk}|^p)^{\frac{1}{p}} = \max_{k} (|x_{k}^i - x_{k}^j|)

    kmean 算法

    1. 指定聚类 k
    2. 初始化 k 个类群的质心,初始化质心的方法有如下两种
    • 随机法:这个比较好理解就是随机指定初始化质心
    • 最远距离法
    1. 依次计算每一个样本点到各类群质心的距离,根据最小距离的原则,把每一个样本点分配到距离他最近的质心。
    2. 分配完每一个样本点,更新每一个类群的质心,Kmeans 算法的质心计算公式为该类群所有样本点的均值向量,第 i 类群的C_i 的质心计算公式为
      \mu_i =\frac{1}{n_i} \sum_{x \in C_i} x
    3. 判断是否满足停止条件
    • 指定迭代次数
    • 指定质心变动范围阈值 \xi 如果 |\mu_t - \mu_{t-1}| < \xi

    kmean 算法

    • 技术型方法
      希望每一个样本离他被分配到的簇尽可能地近,而离其他簇尽可能地远,对应样本点 i 的轮廓系数,有
      s(i) = \frac{b(i) - a(i)}{\max \{ b(i), a(i) \}} = \frac{\min \{ D_{iC_{j}} , j \ne i \}}{\max \{ \min \{ D_{iC_{j}}, D_{iC_{j}} \} \}}

      • a(i) 就是同类间距离
      • b(i) 就是与异类的距离
      • 同类间距离 a(i) = avg
      • 异类间距离 b(i) = \min\{ C_{avg} D_{avg} \dots \}
      • 其实实际上我们并不是将样本点与其他类别每一个样本点求距离,取而代之是计算样本点和其他类别的质心的距离。
    • 业务方法
      在我们聚类结束之后,需要观察分类结果,然后推断这些群体是否有对应业务场景。

    聚类的注意事项

    • 连续类型数据标准化
      因为我们选择不同单位我们数据变化会很大,也会影响距离的计算。
      所以在做聚类之前需要对数据进行标准化
      x_i = \frac{x_i - x_{min}}{x_{max} - x_{min}}
    • 分类型数据标准化
      由于聚类算法的距离计算是面对数值型变量,因此当变量中包括分类类型变量时,聚类算法不能直接处理,而要先对分类类型变量进行数值化处理,引入虚拟变量
    记录 x x_1 x_2 x_3
    1 A 1 0 0
    2 A 0 1 0
    3 A 0 0 1

    但是值得注意是,虽然采用虚拟变量的方法来解决了分类型变量的距离计算问题,但是通过虚拟变量进行计算将导致分类型变量的权重大于其他数值型变量。例如上表所示,记录1和记录2虽然只是一个相差一个水平,但是两者在变量x距离变为
    \sqrt{(1-0)^2 + (0-1)^2 + (0 -0)^2} = \sqrt{2} \approx 1.414

    为了保证分类类型变量的权重和数值型变量一致,会同样要对虚拟变量进行标准化,
    \sqrt{\frac{1}{2}} =\approx 0.707

    \sqrt{(\sqrt{\frac{1}{2}}-0)^2 + (0-\sqrt{\frac{1}{2}})^2 + (0 -0)^2} = 1

    相关文章

      网友评论

        本文标题:聚类随笔

        本文链接:https://www.haomeiwen.com/subject/iknqictx.html