深挖聚类算法

前面学习的方法都是有标记值,有y,y是离散的,叫做分类,y是连续的,叫做回归

但是聚类没有标记值 ,所以属于无监督的算法

聚类

聚类分析是没有给定划分类别的情况下,根据样本相似度进行样本分组的一种方法,是一种非监督学习的方法

聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度划分成为若干组,

划分的原则是组内距离最小化组间距离最大化

:K个簇

特征提取角度:只是利用聚类来获取其特征  K << N

聚类一定程度(数据挖掘)上可以看成降维    N 维---> K维

注:矩阵的乘法也可以看做成降维的过程

数据降维

       对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作。降维,简单来说就是说在尽量保证数据本质的前提下数据中的维数降低。降维的操作可以理解为一种映射关系,例如函数z = f(x,y),即由原来的二维转换成了一维。处理降维的技术有很多种,如前面的SVD奇异值分解主成分分析(PCA),因子分析(FA),独立成分分析(ICA)等等。

PCA主成分分析:降维

本身X是m*n的矩阵 m个样本有n个特征(也就是说X是一个长矩阵,不是方阵的情况下)

处理过程:

用X的转置乘以X得到一个n*n的矩阵,于是就就可以求这个方阵的特征值,特征向量,把特征值λ1λ2......λn做一个大到小排列并且相应的特征向量,选择前K大的特征值主元及其所对应的特征向量就完成了X本来是n维的降维到了k维


Goal:

  1. 理解相似度度量的各种方法和相互关系
  2. 掌握K-means聚类思路使用条件
  3. 了解层次聚类的思路和方法
  4. 理解密度聚类并能应用于实践
  5. ·DBSCAN
  6. ·密度最大值聚类
  7. 掌握谱聚类的算法
  8. 考虑谱聚类和PCA的关系

1. 相似度/距离计算方法总结

1.1 闵可夫斯基距离

闵氏距离不是一种距离,而是一组距离的定义

(1) 闵氏距离的定义

两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

其中p是一个变参数。

当p=1时,就是曼哈顿距离;当p=2时,就是欧氏距离;当p→∞时,就是切比雪夫距离

根据变参数的不同,闵氏距离可以表示一类的距离。

(2) 曼哈顿距离

我们可以定义曼哈顿距离的正式意义为L1-距离城市区块距离,也就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。例如在平面上,坐标(x1, y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离为:

要注意的是,曼哈顿距离依赖坐标系统的转度,而非系统在坐标轴上的平移或映射。

通俗来讲,想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。而实际驾驶距离就是这个“曼哈顿距离”,此即曼哈顿距离名称的来源,同时,曼哈顿距离也称为城市街区距离(City Block distance)。

(1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离

(2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的曼哈顿距离

(3) 欧式距离

最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 x = (x1,...,xn) 和 y = (y1,...,yn) 之间的距离为:

(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:

(2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:

(3)两个n维向量a(x11,x12,…,x1n) 与b(x21,x22,…,x2n)间的欧氏距离:

也可以用表示成向量运算的形式:

注意:都是平方!!!

(4) 契比雪夫距离

若二个向量或二个点p and q,其座标分别为及,则两者之间的切比雪夫距离定义如下:

这也等于以下Lp度量的极值:

因此切比雪夫距离也称为L∞度量。

以数学的观点来看,切比雪夫距离是由一致范数(uniform norm)(或称为上确界范数)所衍生的度量,也是超凸度量(injective metric space)的一种。

在平面几何中,若二点p及q的直角坐标系坐标为,则切比雪夫距离为:

玩过国际象棋的朋友或许知道,国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?。你会发现最少步数总是max( | x2-x1 | , | y2-y1 | ) 步 。有一种类似的一种距离度量方法叫切比雪夫距离。

(1)二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离

(2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的切比雪夫距离   

这个公式的另一种等价形式是

1.2 余弦相似度

几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异,不一定是要用距离。 

(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

(2)两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦

(3)两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度,即:      

夹角余弦取值范围为[-1,1]。

夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。

当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。

1.3 皮尔逊相似系数(Pearson Correlation Coefficient)

  在具体阐述皮尔逊相关系数之前,有必要解释下什么是相关系数 ( Correlation coefficient )与相关距离(Correlation distance)。

  相关系数的定义是:

(其中,E为数学期望或均值,D为方差,D开根号为标准差,E{ [X-E(X)] [Y-E(Y)]}称为随机变量X与Y的协方差,记为Cov(X,Y),即Cov(X,Y) = E{ [X-E(X)] [Y-E(Y)]},而两个变量之间的协方差和标准差的商则称为随机变量X与Y的相关系数,)

  相关系数衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。

   具体的,如果有两个变量:X、Y,最终计算出的相关系数的含义可以有如下理解:

·当相关系数为0时,X和Y两变量无关系。

·当X的值增大(减小),Y值增大(减小),两个变量为正相关,相关系数在0.00与1.00之间。

·当X的值增大(减小),Y值减小(增大),两个变量为负相关,相关系数在-1.00与0.00之间。

  相关距离的定义是:

OK,接下来,咱们来重点了解下皮尔逊相关系数。

  在统计学中,皮尔逊积矩相关系数(英语:Pearson product-moment correlation coefficient,又称作 PPMCC或PCCs, 用r表示)用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间

通常情况下通过以下取值范围判断变量的相关强度:
相关系数 0.8-1.0 极强相关
0.6-0.8 强相关
0.4-0.6 中等程度相关
0.2-0.4 弱相关
0.0-0.2 极弱相关或无相关

在自然科学领域中,该系数广泛用于度量两个变量之间的相关程度。它是由卡尔·皮尔逊从弗朗西斯·高尔顿在19世纪80年代提出的一个相似却又稍有不同的想法演变而来的。这个相关系数也称作“皮尔森相关系数r”。

(1)皮尔逊系数的定义:

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差标准差

以上方程定义了总体相关系数, 一般表示成希腊字母ρ(rho)。

基于样本对协方差和方差进行估计,可以得到样本标准差, 一般表示成r:

一种等价表达式的是表示成标准分的均值。基于(Xi, Yi)的样本点,样本皮尔逊系数是


  其中,分别是标准分、样本平均值和样本标准差。

换一种方式讲解,如下:

假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:

公式一:

注:勿忘了上面说过,“皮尔逊相关系数定义为两个变量之间的协方差和标准差的商”,其中标准差的计算公式为:

公式二:

公式三:

公式四:

以上列出的四个公式等价,其中E是数学期望,cov表示协方差,N表示变量取值的个数。

(2)皮尔逊相关系数的适用范围
当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

两个变量之间是线性关系,都是连续数据。

两个变量的总体是正态分布,或接近正态的单峰分布。

两个变量的观测值是成对的,每对观测值之间相互独立。

(3)如何理解皮尔逊相关系数

rubyist:皮尔逊相关系数理解有两个角度

其一, 按照高中数学水平来理解, 它很简单, 可以看做将两组数据首先做Z分数处理之后, 然后两组数据的乘积和除以样本数,Z分数一般代表正态分布中, 数据偏离中心点的距离.等于变量减掉平均数再除以标准差.(就是高考的标准分类似的处理)

样本标准差则等于变量减掉平均数的平方和,再除以样本数,最后再开方,也就是说,方差开方即为标准差,样本标准差计算公式为:

所以, 根据这个最朴素的理解,我们可以将公式依次精简为:

其二, 按照大学的线性数学水平来理解, 它比较复杂一点,可以看做是两组数据的向量夹角的余弦。下面是关于此皮尔逊系数的几何学的解释,先来看一幅图,如下所示:

回归直线: y=gx(x) [红色] 和 x=gy(y) [蓝色]

如上图,对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。
对于没有中心化的数据 (也就是说, 数据移动一个样本平均值以使其均值为0), 相关系数也可以被视作由两个随机变量 向量 夹角 的余弦值(见下方)。
举个例子,例如,有5个国家的国民生产总值分别为 10, 20, 30, 50 和 80 亿美元。 假设这5个国家 (顺序相同) 的贫困百分比分别为 11%, 12%, 13%, 15%, and 18% 。 令 x 和 y 分别为包含上述5个数据的向量: x = (1, 2, 3, 5, 8) 和 y = (0.11, 0.12, 0.13, 0.15, 0.18)。
利用通常的方法计算两个向量之间的夹角  (参见 数量积), 未中心化 的相关系数是:
          

我们发现以上的数据特意选定为完全相关: y = 0.10 + 0.01 x。于是,皮尔逊相关系数应该等于1。将数据中心化 (通过E(x) = 3.8移动 x 和通过 E(y) = 0.138 移动 y ) 得到 x = (−2.8, −1.8, −0.8, 1.2, 4.2) 和 y = (−0.028, −0.018, −0.008, 0.012, 0.042), 从中

(4)皮尔逊相关的约束条件

从以上解释, 也可以理解皮尔逊相关的约束条件:

1 两个变量间有线性关系

2 变量是连续变量

3 变量均符合正态分布,且二元分布也符合正态分布

4 两变量独立

在实践统计中,一般只输出两个系数,一个是相关系数,也就是计算出来的相关系数大小,在-1到1之间;另一个是独立样本检验系数,用来检验样本一致性。

1.4 Jaccard相似系数:

理解:在那些可以看成是集合的问题上,可以应用此相似度

两个人喜欢看的电影的集合分别为A,B。用两个集合的交比上两个集合的并得到Jaccard相似系数

但是:对于热门电影可能需要加权  

2 聚类

合理的划分:

给定一个有N个对象的数据集,构造数据的k个簇,K≦n.满足以下条件:

每一个簇至少包含一个对象

每一个对象属于且仅属于一个簇

将满足上述条件的k个簇称作一个合理的划分

2.1 基本思想:

对于给定的类别数目k,首先给出初始化分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好

2.2 K-Means算法

也叫K-平均值or k-均值,一种广泛使用的聚类算法,或者成为其他聚类算法的基础

假定输入样本为S=X1,X2......XM,算法步骤为:

1. 选择初始的k个类别中心,u1,u2.....uk

2. 对于每一个样本Xi,将其标记为距离类别中心最近的类别,即:

3. 将每个类别中心更新为隶属该类别的所有样本的均值

4. 重复最后两步,直到类别中心的变化小于某阈值

终止条件:

  1. 迭代次数

  2. 簇中心变化率

  3. 最小平方误差MSE(Minimum Squared Error)

K-Means算法过程

问题1  初值的选择对于最终的结果到底有没有影响,如果没有,那么闭着眼睛随便选。有的话,就好好选

问题2  做K均值,K应该选择几?一般情况下好选,有些新的数据不容易选。

问题3  这种做法一定会收敛吗?收敛性是如何保证的?

问题4  什么样的问题适合用K均值?

问题5  K均值的损失函数是什么?

面试的时候,K-Means算法的损失函数是什么?很多人不知道

对K-menas的思考:

K-Means将簇中所有点的均值作为新质心,若簇中含有异常点,将导致均值偏离严重。

例如:一维数据 1、2、3、4、100均值为22,显然距离大多数的数据1234比较远

Solution:中位数更稳妥,一定程度地降低异常值对于结果的影响

这种聚类的方式叫做:K-Mediods聚类(K中值聚类)

几个关键的问题,分门别类详细扯扯:


初值的选择,对聚类结果有影响吗?

敏感!!!

上面图中表示,如果K-Means算法不好好选择初值的话,得到的结果可能不会使我们满意

选初值的方法!!!

第一种:二分K-Means

当我们分好之后,计算中心点μ1μ2μ3到每个簇内其他点的均方误差MSE,得到三个值;

当我们分析的时候,发现大多数的MSE都是非常接近的,唯独有一个的MSE非常大,我们就有理由相信,这个簇应该分成两个类别

我们去看其他的分类,假如他们的MSE比较小而且均值离得比较近的,我们就有理由相信,这两个簇应该合成一个簇

做完一次K-Means之后不要着急进行下一次,而是做一个二分,从MSE比较大的簇中任意选择两个点,两个簇MSE比较小又比较接近的簇中任意选择一个点作为中心点,此时再进行下一次的K-Means

第二种:K-Means++

很多时间浪费在了选初值上,运行的时间要稍微慢一些,但是效果好一小点

我们任意选择一个中心点μ1,然后计算其余的n-1个点到中心点的距离,我们就得到d1,d2.....dn-1一共n-1个距离,然后以距离的大小作为权值,假设d1=0.01,d2=1,那么距离中心点为d2的点被选中当下一个中心点的概率就是d1的100倍(一共需要选k个中心点,k个簇嘛),目的就是让选择的聚集中心之间距离尽量远一些

但是:我们不是选择距离权值最大的值!!!而是距离权值相对较大的随机选被选中的几率更大!!!

进一步思考:

引例:

分值推荐:

假定歌曲库中N首歌,每首歌给定一个整数分数。现在要求从N首歌中随机选择若干首歌推荐给用户,要求推荐的这若干首歌和其分数是成正比的。

给定整数数组A[0...N-1],按照A[I]的值作为权值随机取数。(得分高的更容易排在前面而已,不是一定就是得分最高的那一首),方法如下:累积概率!!!

最终:我们根据上面方法选了K个初值,以大概率离得比较远


K-Means算法如何从损失函数的角度解释他!

K-Means的公式化解释:GMM

解释:

(最大似然估计:概率密度函数相乘,不同的高斯分布的概率密度中的参数(方差是一样的)不一样,但是其表达式可以写成相同的,实际中使用对数似然。注意:Log和指数相抵消,然后指数项上的负号下落,求最大似然最后变成了求Min

我们分了三个簇,假设每一个簇都服从高斯分布(两个参数可能不一样哈,认为方差是一样的),于是得到了f(x),将这三个簇的概率密度取log(对数似然)(大π变成了叠加符号)相乘,相等的系数什么的不要了,然后得到

记K个簇中心为μ1,μ2...μk,每个簇的样本数目为N1,N2...NK

使用平方误差作为目标函数

对关于μ1,μ2...μk的函数求偏导,其驻点为:

如果满足方差相同的混合高斯分布(GMM),我们就可以使用K-Means算法!!

思路整理一下:

我们分了K个类别(这里的K是认为指定的!!!)(K个簇),然后我们认为这K个簇中的样本服从方差相等的混合高斯模型GMM,于是,我们将其密度函数f(x)就可以分别写出来,然后我们得到了K个f(x)的乘积(我们需要的是做最大似然估计,就是概率相乘取log,抵消掉指数项,负号落下,求最大似然变成了求最小),接着将f(x)前面的系数去掉(都一样,求导后为1),于是得到了我们的目标函数:

对于目标函数,我们对每一个μ1,μ2,...μk求偏导令其为0,于是得到了μj(这不就是我们的类别中心嘛!!!!!!)

于是K-Means的算法取均值得以解释!还是做了一个梯度下降!!!

所以,我们也可以将聚类的K-means算法看成是梯度下降的一个使用例子,注意,梯度下降中所出现的问题在聚类中也有可能出现,比如出现震荡,收敛不到全局最小值。

这就是我们初值假如选不好就会使得收敛不到最小值的情况,如右图,初值选在靠左边的位置就会出现局部最小值,选在右边就会收敛到全局最小值。多极值算法。

亦可以是多做几回K-means算法,看看哪个效果最好(就是使得目标函数最小)就选哪个。

机器学习的套路:不管什么问题,给定一个合适的目标函数(当其为求最小值的时候又叫损失函数或者是代价函数),选择一个合适的优化算法就能得到。

-------------------------------------梯度下降算法复习--------------------------------------

·批量梯度下降;

批量梯度下降法的思路是更新每一个参数都会使用到所有的样本 这种方法可以看出每次迭代都需要所有的样本

·随机梯度下降:

通过每个样本迭代更新一次

我们把所有的加起来除以Nj,不就是批量梯度下降算法吗?

·MBGD:小批量梯度下降算法

小批量梯度下降法考虑以上两种方法的优缺点,做出改进。也就是在每次更新参数时候,使用固定a个样本。如总样本1000,取a=10

-----------------------------------梯度下降算法复习结束------------------------------------------

使用小批量梯度下降算法得到的K-Means叫做:

Mini-batch k-Means算法

不是一次性地用所有的Nj,而是取前若干个进行梯度下降,可能是10个,20个......

尽量使用随机梯度下降:因为快


K-means算法的适用范围:

·K值的选取不当结果就会不一样。

·对于分布不会GMM,那么结果就不会好了。

事先我们不知道样本的分布啊,假如知道了之后就已经可以分开了。

·方差不相同的高斯分布可以使用EM算法。

如果是不用欧式距离,而是使用其他的距离度量-----可能不收敛

怎么度量好坏?MSE就可以,简单好用!

K的选取

更多的情况下我们要考虑业务逻辑

Elbow method

发现有这么一个K值,开始的时候下降的比较快的,然后又下降的比较慢了------选择此K(图中的K*)

这就是K值的选取:手肘法 elbow method

这只手一个辅助的手段,更多的时候我们需要考虑业务逻辑

业务逻辑是我们首先考虑的,真的找不着了,然后我们看变化比较快的K  

·纵轴MSE(把所有其他点距离初值点的误差加起来,K比较大时(比如等于N时,MSE=0),MSE比较小。当K比较小时,MSE比较 大)

·横轴就是逐渐增大的K值

K均值的K的选择其实是一个很大的难点

总结:

Means算法总结:

优点

是解决聚类问题的一种经典算法,简单,快捷

对处理大数据集时,该算法保持可伸缩性和高效率

当簇近似为高斯分布时,效果好

缺点

簇的平均值可被定义的情况下才能使用,可能不适用于某些应用

必须事先给出K(要生成K的数目),而且对初值敏感,对于不同的初值,可能会导致不同的结果

不适合于发现非凸形状或者大小差别很大的簇

噪声和孤立点数据敏感

可作为其他聚类方法的基础算法,比如谱聚类

猜你喜欢

转载自blog.csdn.net/mr_xiaoz/article/details/81211315