热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习——KMeans算法

相似度或距离假设有$m$个样本,每个样本由$n$个属性的特征向量组成,样本合集可以用矩阵$X$表示$X[x_{ij}]_{mn}\begin{bmatrix}x_{11}&

相似度或距离

  假设有 $m$ 个样本,每个样本由 $n$ 个属性的特征向量组成,样本合集 可以用矩阵 $X$ 表示

    $X=[x_{ij}]_{mn}=\begin{bmatrix}x_{11}&x_{12} &  ... &x_{1n} \\x_{21}&x_{22} &  ... &x_{2n} \\...& ... &  ...& ...\\x_{m1}&x_{m2} & ...&x_{mn}\end{bmatrix}$

  聚类的核心概念是相似度(similarity)或距离(distance),有多种相似度或距离定义。因为相似度直接影响聚类的结果,所以其选择是聚类的根本问题。

闵可夫斯基距离

  闵可夫斯基距离越大相似度越小,距离越小相似度越大。

  给定样本集合 $X$, $X$ 是 $m$ 维实数向量空间 $R^{n}$ 中点的集合,其中

    $x_{i},x_{j}\in X,x_{i}=(x_{1i},x_{2i},...,x_{ni})^{T},x_{j}=(x_{1j},x_{2j},...,x_{nj})^{T}$

  样本 $x_{i}$ 与样本 $x_{j}$ 的闵可夫斯基距离(Minkowski distance)定义为

    $d_{ij}=(\sum \limits_{k=1}^{n}|x_{ki}-x_{kj}|^{p})^{\frac{1}{p}},p\ge 1$

  当 $p=2$ 时称为欧氏距离(Euclidean distance) 

     $d_{ij}=(\sum \limits_{k=1}^n|x_{ki}-_{kj}|^2)^{\frac{1}{2}}$

  当 $p=1$ 时称为曼哈顿距离(anhattan distance)

    $d_{ij}=\sum \limits_{k=1}^n|x_{ki}-x_{kj}|$

  当 $p=\infty$ 时称为切比雪夫距离(Chebyshev distance)

     $d_{ij}=\max_{k}|x_{ki}-x_{kj}|$

相关系数

  • 样本之间的相似度也可以用相关系数(correlation coefficient)来表示。
  • 相关系数的绝对值越接近于1,表示样本越相似,越接近于0,表示样本越不相似。
  • 样本 $x_{i}$ 与样本 $x_{j}$ 之间的相关系数定义为

    $r_{ij}=\frac{\sum_\limits {k=1}^{n}(x_{ki}-\overline{x_{i}})(x_{kj}-\overline{x_{j}}) }{[\sum \limits _{k=1}^{n} (x_{ki}-\overline{x_{i}})^{2}\sum \limits _{k=1}^{n} (x_{kj}-\overline{x_{j}})^{2}]^{\frac{1}{2} }} $    其中$\overline{x_{i}} =\frac{1}{n} \sum \limits_{k=1}^{n} x_{ki},\overline{x_{j}} =\frac{1}{n} \sum \limits_{k=1}^{n} x_{kj}$

夹角余弦

  • 样本之间的相似度也可以用夹角余弦(cosine)来表示。
  • 夹角余弦越接近于1,表示样本越相似
  • 越接近于0,表示样本越不相似。
  • 样本 $x_{i}$ 与样本 $x_{j}$之间的夹角余弦定义为

    $s_{ij}=\frac{\sum_ \limits{k=1}^{n}x_{ki}x_{kj}}{[\sum_ \limits{k=1}^{n} x_{ki}^{2}\sum_ \limits{k=1}^{n} x_{kj}^{2}]^{\frac{1}{2} }} $

相似度

 机器学习——K-Means算法

  • 用距离度量相似度时,距离越小样本越相似;
  • 用相关系数时,相关系数越大样本越相似;
  • 注意不同相似度度量得到的结果并不一定一致。
  • 从右图可以看出,如果从距离的角度看, A和B比A和C更相似,但从相关系数的角度看,A和C比A和B更相似。

类或簇

  • 通过聚类得到的类或簇,本质是样本的子集。
  • 如果一个聚类方法假定一个样本只能属于一个类,或类的交集为空集,那么该方法称为硬聚类(hard clustering)方法。
  • 如果一个样本可以属于多个类,或类的交集不为空集,那么该方 法称为软聚类(soft clustering)方法。
  • 用G表示类或簇(cluster),用$x_{i}$, $x_{j}$表示类中的样本,用$n_{G}$表示 $G$ 中样本的个数,用$d_{ij}$表示样本$x_{i}$与样本$x_{j}$之间的距离。
  • 类或簇有多种定义,下面给出几个常见的定义:

  定义一:设$T$为给定的正数,若集合$G$中任意两个样本$x_{i}$, $x_{j}$,有
    $d_{ij}
  则称 $G$ 为一个类或者簇。
  定义二:设 $T$ 为给定的正数,若集合 $G$ 中任意样本 $x_{i}$,一定存在 $G$ 中的另一个样本 $x_{j} $,使得
    $d_{ij}
  则称$G$为一个类或者簇。
  定义三:设 $T$ 为给定的正数,若集合 $G$ 中任意样本 $x_{i}$, $G$ 中的另一个样本 $x_{j}$满足
    $\frac{1}{n_{G}-1} \sum \limits _{x_{i}\in G}d_{ij}\le T$
  其中 $n_{G}$ 为 $G$ 中样本的个数,则称 $G$ 为一个类或者簇。
  定义四:设 $T$ 和 $V$ 为给定的正数,若集合 $G$ 中任意两个样本 $x_{i}$,$x_{i}$的距离$d_{ij}$满足
    $\frac{1}{n_{G}(n_{G}-1)} \sum \limits _{x_{i}\in G} \sum \limits _{x_{j}\in G}d_{ij}\le T,d_{ij}\le V$
  则称G为一个类或者簇。

类特征

  (1)类中心:即类的均值
    $\bar{x}_{G} =\frac{1}{n_{G}} \sum \limits _{i=1}^{n_{G}}x_{i}$
  式中$n_{G}$是类$G$的样本个数。
  (2)类的直径:$D_{G}$是任意类中两个样本之间的最大距离,即
    $D_{G}=\underset{x_{i},x_{j}\in G}{max} d_{ij}$
  (3)类的样本散布矩阵$A_{G}$与样本协方差矩阵$S_{G}$
  样本散布矩阵$A_{G}$为
    $A_{G}=\sum \limits _{i=1}^{n_{G}}(x_{i}-\overline{x_{G}})(x_{i}-\overline{x_{G}})^T$
  样本协方差矩阵$S_{G}$为
    $S_{G}=\frac{1}{n-1}A_{G} =\frac{1}{n-1}\sum \limits _{i=1}^{n_{G}}(x_{i}-\overline{x_{G}})(x_{i}-\overline{x_{G}})^T$

类与类之间的距离 

  下面考虑类$G_p$与类$G_q$之间的距离$D(p,q)$,也称为连接(linkage)。类与类之间的距离也有多种定义。
  设类$G_p$包含$n_p$个样本,$G_q$包含$n_q$个样本,分别用$\bar{x}_{p}$和$\bar{x}_{q}$表示$G_p$和$G_q$的均值,即类的中心 。
  最短距离或单连接(single linkage)
  定义类$G_p$的样本与$G_q$的样本之间的最短距离为两类之间的距离
    $D_{pq}=min\{ d_{ij}|x_{i} \in G_{p},x_{j} \in G_{q}\}$

  最长距离或完全连接(complete linkage)
  定义类$G_p$的样本与$G_q$的样本之间的最长距离为两类之间的距离
    $D_{pq}=max\{ d_{ij}|x_{i} \in G_{p},x_{j} \in G_{q}\}$

  中心距离
  定义类$G_p$与$G_q$的中心$\bar{x}_{p}$ 与$\bar{x}_{q}$之间的距离为两类之间的距离
    $D_{pq}=d_{\bar{x}_{p}\bar{x}_{q}}$

  平均距离
  定义类$G_p$与$G_q$任意两个样本之间距离的平均值为两类之间的距离
    $D_{pq}=\frac{1}{n_{p}n_{q}}\sum \limits _{x_{i} \in G_{p}}\sum \limits _{x_{j} \in G_{q}}d_{ij}$

 2 K-Means算法

  $K-Means$算法是无监督的聚类算法,实现简单,聚类效果也不错,因此应用很广泛。$K-Means$算法有大量的变体,本文就从最传统的$K-Means$算法讲起,在其基础上讲述$K-Means的$优化变体方法。包括初始化优化$K-Means++$, 距离计算优化$elkan K-Means$算法和大数据情况下的优化$Mini Batch K-Means$算法。

2.1 K-Means原理初探

  $K-Means$算法的思想很简单,对于给定样本集,按照样本之间距离大小,将样本集划分为$K$个簇。让簇内的点尽量紧密相连,让簇间距离尽量大。

  如果用数据表达式表示,假设簇划分为$(C_1,C_2,...C_k)$,则我们的目标是最小化平方误差E:    

    $E = \sum\limits_{i=1}^k\sum\limits_{x \in C_i} ||x-\mu_i||_2^2$

  其中$\mu_i$是簇$C_i$的均值向量,有时也称为质心,表达式为:

    $\mu_i = \frac{1}{|C_i|}\sum\limits_{x \in C_i}x$

  如果我们想直接求上式的最小值并不容易,这是一个NP难的问题,因此只能采用启发式的迭代方法。K-Means采用的启发式方式很简单,用下面一组图就可以形象的描述。

机器学习——K-Means算法

2.2 K-Means的基本步骤

  输入:样本集 $D=\{x_1,x_2,...x_m\}$ ,聚类数 $k$,最大迭代次数 $N$。
  输出:簇划分 $C=\{C_1,C_2,...C_k\}$
  1、从数据集 $D$ 中随机选择 $k$ 个样本作为初始的 $k$个质心向量:$\{\mu_1,\mu_2,...,\mu_k\}$
  2、迭代次数  $n=1,2,...,N$
    a) 将簇划分$C$初始化为 $C_t = \varnothing \;\; t =1,2...k$
    b) 计算样本 $x_i (i=1,2...m)$到各个质心向量 $\mu_j(j=1,2,...k)$的距离:$d_{ij} = ||x_i - \mu_j||_2^2$,将 $x_i$ 标记最小的为$d_{ij}$所对应的类别$\lambda_i$。此时更新$C_{\lambda_i} = C_{\lambda_i} \cup \{x_i\}$
    c) 对 $C_{j} (j=1,2,...,k)$中所有的样本点重新计算新的质心 $\mu_j = \frac{1}{|C_j|}\sum\limits_{x \in C_j}x$
    d) 如果所有的 $k$ 个质心向量都没有发生变化,则转到步骤3)
  3、 输出簇划分 $C=\{C_1,C_2,...C_k\}$

  流程概况:
  1、选定要聚类的类别数目k(如上例的k=3类),选择k个中心点;
  2、针对每个样本点,找到距离其最近的中心点,距离同一中心点最近的点为一个类,完成一次聚类;
  3、判断聚类前后的样本点的类别情况是否相同,如果相同,则算法终止,否则进入步骤4;
  4、针对每个类别中的样本点,计算这些样本点的中心点,当做该类的新的中心点,继续步骤2。

3 质心优化K-Means++

  $k$ 个初始化的质心的位置选择对最后的聚类结果和运行时间有很大的影响,因此需要选择合适的$k$个质心。如果随机选择,可能导致算法收敛很慢。$K-Means++$算法是对$K-Means$随机初始化质心的方法的优化。
  $K-Means++$初始化质心策略如下:
  a) 从输入的数据点集合中随机选择一个点作为第一个聚类中心$\mu_1$
  b) 对于数据集中的每一个点$x_i$,计算它与已选择的聚类中心中最近聚类中心的距离$D(x_i) = arg\;min||x_i- \mu_r||_2^2\;\;r=1,2,...k_{selected}$
  c) 选择一个新的数据点作为新的聚类中心,选择的原则是:$D(x)$较大的点,被选取作为聚类中心的概率较大
  d) 重复b和c直到选择出 $k$ 个聚类质心
  e) 利用这 $k$ 个质心来作为初始化质心去运行标准的 $K-Means$ 算法

4 距离计算优化elkan K-Means

  传统$K-Means$算法中,每轮迭代都要计算所有样本点到所有质心的距离,比较的耗时。那么,如何简化对距离的计算?$elkan K-Means$算法就是从这块加以改进。目标是减少不必要的距离的计算。

  $elkan K-Means$利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。
  第一种规律是对于一个样本点$x$两个质心$\mu_{j_1}, \mu_{j_2}$。如果预先计算出这两个质心之间的距离$D(j_1,j_2)$,如果发现$2D(x,j_1) \leq D(j_1,j_2)$,立即可知$D(x,j_1) \leq D(x, j_2)$。此时不需再计算$D(x, j_2)$,省了一步距离计算。
  第二种规律是对于一个样本点$x$和两个质心$\mu_{j_1}, \mu_{j_2}$。可以得到$D(x,j_2) \geq max\{0, D(x,j_1) - D(j_1,j_2)\}$。
利用上边的两个规律,$elkan K-Means$比起传统的$K-Means$迭代速度有很大的提高。但如果样本的特征是稀疏的,有缺失值,这个方法就不使用,此时某些距离无法计算,则不能使用该算法。

5. 大样本优化Mini Batch K-Means

  在统的$K-Means$算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的$K-Means$算法非常的耗时,就算加上$elkan K-Means$优化也依旧,此时$Mini Batch K-Means$应运而生。

  $Mini Batch$就是用样本集中的一部分的样本来做传统的$K-Means$,可避免样本量太大的计算难题,算法收敛速度大大加快。此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。
  在$Mini Batch K-Means$中,我们会选择一个合适的批样本大小$batch size$,我们仅仅用$batch size$个样本来做$K-Means$聚类。那么这$batch size$个样本怎么来的?一般是通过无放回的随机采样得到的。
  为了增加算法的准确性,我们一般会多跑几次$Mini Batch K-Means$算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

6. K-Means与KNN

  $K-Means$是无监督学习的聚类算法,没有样本输出;而$KNN$是监督学习的分类算法,有对应的类别输出。$KNN$基本不需要训练,对测试集里面的点,需找到在训练集中最近的 $k$个点,用这最近的要$k$个点的类别来决定测试点的类别。而$K-Means$则有明显的训练过程,找到$k$个类别的最佳质心,从而决定样本的簇类别。

 当然,两者也有一些相似点,两个算法都包含一个过程,即找出和某一个点最近的点。两者都利用了最近邻(nearest neighbors)的思想。

参考文献

1.K-Means原理解析


推荐阅读
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 非计算机专业的朋友如何拿下多个Offer
    大家好,我是归辰。秋招结束后,我已顺利入职,并应公子龙的邀请,分享一些秋招面试的心得体会,希望能帮助到学弟学妹们,让他们在未来的面试中更加顺利。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在《数字图像处理及应用(MATLAB)第4章》中,详细探讨了“逢七必过”游戏规则的实现方法,并结合数字图像处理技术进行了深入分析。本章通过丰富的实例和代码示例,展示了如何利用MATLAB实现这一游戏规则,并介绍了数字图像处理的基本原理和技术应用。内容涵盖了图像增强、滤波、边缘检测等多个方面,为读者提供了全面的技术支持和实践指导。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
author-avatar
w4x是真屌丝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有