监督学习使用标记数据对 学习函数: 。但是,如果我们没有标签呢?这类没有标签的学习方式被称为无监督学习。
无监督学习:如果训练样本全部无标签,则是无监督学习。例如聚类算法,就是根据样本间的相似性对样本集进行聚类试图使类内差距最小化,类间差距最大化。
主要用途:
- 自动组织数据。
- 理解某些数据中的隐藏结构。
- 在低维空间中表示高维数据。
将物理或抽象对象的集合分成由类似的对象组成的多个类或簇的过程被称为聚类。数据聚类是一个无监督的学习问题。
- 前提: 个未标记的样本 ,样本种类数量 。
- 目标:将 个样例分成 类。
聚类使用的唯一信息是示例之间的相似性,并且一个好的聚类应该达到:高的簇内相似性低的簇间相似性。
距离:在一个集合中,如果每一对元素均可为唯一确定一个实数,使得三条距离公理(正定型,对称性,三角不等式)成立,则该实数可称为这对元素之间的距离。
余弦距离满足正定性和对称性,但是不满足三角不等式,因此它并不是严格定义的距离。
正定性:
根据余弦距离的定义,有:
考虑到 ,因此有 恒成立。
有
因此余弦距离满足正定性。
对称性:
根据余弦距离的定义,有:
因此余弦距离满足对称性。
三角不等式:
该性质并不成立,例如给定 ,,,则有
因此有:
欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。【例如】用户A的观看向量为(0,1),用户B为(1,0);两者余弦距离很大,而欧式距离很小;分析两个用户对于不同视频的偏好,更关注相对差异。而当分析用户活跃度,以登录次数和平均观看时长作为特征时,余弦距离会认为(1,10)、(10,100)两个用户距离很近;但显然这两个用户活跃度是有着极大差异的,此时更关注数值绝对差异,应当使用欧式距离。
相似性度量的选择对于聚类非常重要,通常情况下用样本之间的距离表示相似度,且相似性与距离成反比。常用的相似度度量公式:
- 欧式距离:
- 曼哈顿距离:
- 余弦相似度:,关注的是向量之间的角度关系,并不关心它们的绝对大小,其取值范围是[-1,1]。
- 皮尔森系数:,可以描述为不同对象偏离拟合的中心程度。
- 相对熵(K-L距离):
- Jaccard系数:,常用于二值型数据相似度计算。在数据挖掘中将属性值二值化,通过计算Jaccard相似度,可以简单快速地得到两个对象的相似程度。
- 核化(非线性)距离:,其中 表示 的核函数。
对于左图,欧式距离可能是合理的;对于右边的图,核化距离似乎更合理。
层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。
层次聚类算法是通过将数据组织为若干组并形成一个相应的树来进行聚类的。在实际应用中一般有两种层次聚类方法:凝聚层次聚类方法&分裂层次聚类方法。
缺点:分层聚类虽然比较简单,但经常会遇到选择合并点或者分裂点的问题。这种选择非常关键,因为一旦一组对象被合并或者分裂,下一步的工作就是在新形成的类上进行,已做的处理不能撤销,类之间也不能交换对象。如果合并或者分裂的决定不合适,就可能得出低质量的聚类结果。而且,分层聚类算法没有很好的可伸缩性,在决定合并或者分裂之前需要检查和估算大量的对象和类。
凝聚(自底向上)聚类:
- 将样本集中所有的样本点当做一个独立的类簇。
- 计算两两类簇之间的距离,找到最小距离的两个类簇 。
- 合并类簇 为一个类簇 ,重复2~3直到全部分类或者达到指定的 。
可以使用不同的 值查看不同粒度级别的分区(即,可以细化/粗化集群)。例如下面的凝聚层次聚类方法。
- ,层次聚类结果:。
- ,层次聚类结果:。
分裂(自上而下)聚类:
- 将样本集中的所有样本归为一个类簇。
- 之后将已有类中相距最远的样本分到两个新的簇。
- 重复此操作直到满足停止条件。
- 得到层次化的类别。
凝聚的层次聚类要找到距离最近的子类(样本点对),分裂的层次聚类要找到距离最远的子类(样本点对),其中距离的计算可以采用不同的方法,主要有如下几种:
以自底向上为例,每次聚类划分都需要重新计算各个样本之间的距离,但是实际上每次合并都会有 个样本不会之间的相似度不会发生改变,因此可以减轻计算负担。
如上图所示,通过对比发现 的距离最小,相似度最高,因此将 进行合并,只需要重新与新簇之间的距离,而 之间的相似度并未受到影响,因此可以减少很大的计算量。
DBSCAN密度聚类:与划分和层次聚类方法不同,DBSCAN是一个比较有代表性的基于密度的聚类算法。它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。
密度:空间中任意一点的密度是以该点为圆心,以扫描半径构成的圆区域内包含的点数目。
DBSCAN使用两个超参数:扫描半径 (eps)和最小包含点数(minPts)来获得簇的数量,而不是猜测簇的数目。
- 扫描半径 (eps):用于定位点/检查任何点附近密度的距离度量,即扫描半径。
- 最小包含点数(minPts) :聚集在一起的最小点数(阈值),该区域被认为是稠密的。
DBSCAN算法将数据点分为三类:
- 核心点:在半径Eps内含有超过MinPts数目的点。
- 边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内的点。
- 噪音点:既不是核心点也不是边界点的点。
DBSCAN密度聚类的算法流程:
- 将所有点标记为核心点、边界点或噪声点;
- 如果选择的点是核心点,则找出所有从该点出发的密度可达对象形成簇;
- 如果该点是非核心点,将其指派到一个与之关联的核心点的簇中;
- 重复以上步骤,直到所点都被处理过。
【例子】:有如下13个样本点,使用DBSCAN进行聚类:
首先随机从数据集中选取 个点,每个点初始地代表每个簇的聚类中心,然后计算剩余各个样本到聚类中心的距离,将它赋给最近的簇,接着重新计算每一簇的平均值,整个过程不断重复,如果相邻两次调整没有明显变化,说明数据聚类形成的簇已经收敛。
Input: ,分类数 。
Initialize: 个簇中心 。
Iterate:
K-means目标函数:
- 为 个簇的中心。
- 表示样本点 是否属于簇 。
- K-means目标最小化点到其聚类中心的距离之和:
- K-means目标的精确优化是NP困难的。K-均值算法是一种收敛于局部最优解的启发式算法。
为了保证 一定属于某个 ,因此可以推出:。
因此需要判定K-means目标函数在约束条件下的优化,即求最大相似度,距离最小值:
由于这是NP问题,无法同时优化 ,因此采用分步优化的方法。用坐标表示为:
(1)给定 优化
对上图来说,簇中心点确定,为了保证目标函数最小,可以通过设定目标点 所属的簇来减少距离。
例如:对 来说,给定 ,可以算出距离最小值的簇中心为 。而 的这有:
此时, 为能使目标函数最小点的值。扩展到全部的样例点,利用所有的 不同组合序列都可求得 ,取最小值对应的 序列即为 的优化。 此为排序问题,对于给定的 ,总能找到 序列使得 取最小值。
(2)给定 优化
第 次更新:
第 次更新:
即:
单调下降,此时还需要证明有下界。
因此,一定存在下界, 一定大时,下界为0。
K-means对群集中心初始化极为敏感,错误的初始化可能导致:
- 收敛速度差。
- 整体聚类不好。
选择措施:
- 选择第一个中心作为示例之一,第二个中心离第一个中心最远,第三个中心离两个中心都最远,依此类推。
假设第一个中心点为 。
......
- 尝试多次初始化并选择最佳结果。
- 其他更智能的初始化方案。
K值的选择:现在我们需要找到簇的数量。通常通过“肘部法则”进行计算。我们可能会得到一条类似于人的肘部的曲线。图中,代价函数的值会迅速下降,在 =3的时候达到一个肘点。在此之后,代价函数的值会就下降得非常慢,所以,我们选择 =3。这个方法叫“肘部法则”。
优点:
- 鲁棒性高;
- 速度快、易于理解、效率高;
- 计算成本低、灵活性高;
- 如果数据集是不同的,则结果更好;
- 可以产生更紧密的簇;
- 重新计算质心时,簇会发生变化。
缺点
(1)将点硬指定给簇:
- 点要么完全属于簇,要么根本不属于簇。
- 没有软分配的概念(即分配给每个集群的概率:假设K=3,对于某个点 ,p1=0.7,p2=0.2,p3=0.1)。
- 高斯混合模型和模糊K-均值允许软分配。
(2)对异常值示例敏感(此类示例会对平均值产生很大影响):
- K-medians算法是一种更为稳健的异常数据替代方法。
- 原因:在存在异常值的情况下,中值比均值更稳健。
(3)K-means对群集中心初始化极为敏感,错误的初始化可能导致:
- 收敛速度差。
- 整体聚类不好。
(4)K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始
化的情况。为了解决这个问题,我们通常需要多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。(5)仅适用于圆形和大小/密度大致相等的簇。
(6)如果簇具有非凸形状,则效果会很差:谱聚类或核化K-均值可以作为替代方法。
(7)不适用于非线性数据集,如果遇到非常大的数据集,那么计算机可能会崩溃。
(8)欧几里德距离可以不平等的权重因素,限制了能处理的数据变量的类型。
数据结构:图(图的抽象数据类型、图的表现和实现)_燕双嘤-CSDN博客1,图及其抽象数据类型图(Graph)是一种较线性表和树更为复杂的数据结构:在线性表中,数据元素之间仅有线性关系,即每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素 之间有着明显的层次关系,虽然每一层上的数据元素可能和下一层中多个元素(孩子) 相关,但只能和上一层中一个元素(双亲)相关。而在图形结构中,结点之间 的关系可以是任意的,任意两个数据元素之间都可能相关。1.1,图的基本概念图G(Graph)是由顶点(Vertex)集合V和顶点间的关系集合E(边Edghttps://shao12138.blog.csdn.net/article/details/115002316数据结构:图(图的遍历、最小生成树、最短路径)_燕双嘤-CSDN博客1,图的遍历和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中所有顶点各作一次访问。若给定的图是连通图,则从图中任一顶点出发顺着边可以访问到该图中所有的顶点,但是,在图中有回路,从图中某一顶点出发访问图中其它顶点时,可能又会回到出发点,而图中可能还剩余有顶点没有访问到,因此,图的遍历较树的遍历更复杂。我们可以设置一个全局型标志数组visited来标志某个顶点是否被访问过,未访问的值为0,访问过的值为1。根据搜索路径的方向不同,图的遍历有两种方法:深度优先搜索遍历(DFS)和广度优先搜索https://shao12138.blog.csdn.net/article/details/84860742谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。
目标:给定数据点 和相似性 ,将数据分成若干组,以便一组中的点相似,而不同组中的点不同。对图形进行分区,使组内的边具有较大的权重,而组间的边具有较小的权重。
对每一行每一列来说簇内结点的权重永远大于与其他簇结点的权重。
相似图:数据点之间的局部邻域关系模型。
例如,高斯核相似函数:
其中超参数 用来控制邻域的大小。
Min-cut:将图分成两个集合A和B,使得连接A中顶点和B中顶点的边的权重最小。
也就是求解最小生成树,所用方法:Prim算法或Krushal算法(具体参考上面博客),以Prim算法为例。
将最后的最小生成树中最小权重的边 AD=10 作为切割线,可得到两个簇:。
从结果看,这种做法似乎有些问题,通常情况下我们希望簇之间的结点的数目尽可能一致,否则会出现不令人满意的分区-通常会隔离顶点。
Normalized cut:将图分成两个集合A和B,使得连接A中顶点和B中顶点的边的权重最小&A和B的大小非常相似。由于子图样本的个数多并不一定权重就大,切图时基于权重也更合我们的目标,因此一般来说Ncut切图优于RatioCut切图。
但是对我们来说,NP很难解决!!光谱聚类是这个方法的一种松弛。
令 表示图的邻接矩阵。
令 ,
因此,我们的目标转变为:
从原始无松弛下而来,e为向量(1,1,1,1...,1):
对上式求转置可得:
,同乘单位向量。
,根据D和W的关系。
由于L是半正定矩阵,因此L的最小特征值为0,进而通过在0处设置阈值 来获得群集分配。
设 是对应于广义矩阵求解问题的第二小的特征向量,等价于对应于归一化拉普拉斯函数的第二个最小值的特征向量。
通过选择最小的k个特征值(一般情况选择大于k的,因为存在误差和噪声)和对应的特征向量,将特征向量k-means聚类(少量的特征向量)。
数据被投影到一个低维空间(光谱/特征向量域),在那里它们很容易分离,比如说使用k-均值。
图中有三个相连的分量——前三个特征向量在每个分量上都是常数(所有的)。
如果图是连通的,第一拉普拉斯算子evec是常数(都是1);如果图是不连通的(k个连通分量),拉普拉斯算子为块对角线,前k拉普拉斯算子为:
若集群不对应于图中的连接组件,那个么所有希望都破灭了吗?不!如果簇是松散连接的(小的离块对角线企业),则第一拉普拉斯偶数都是1,但第二evec得到第一个切割(最小归一化切割)。
块权重矩阵(断开连接的图形)产生块特征向量:
轻微扰动不会显著改变特征向量的范围:
无论数据顺序如何,嵌入都是相同的:
【问题】阐述K-means和谱聚类算法的工作原理,并比较他们的优缺点。
K-means:事先给定一组 个中心 ,将每一个样本 分配给距离它最近的中心,即 ,将分好的簇记为 ,重新计算中心点 ,重复多次计算直到各簇之间不发生变化。
谱聚类:根据数据构造一个 , 的每个节点对应一个数据,将相似的连接起来,并用边的权重表示数据之间的相似度,用邻接矩阵 表示;构造 ,并得出 :求出 的前 个非0特征值及对应的特征向量;把这 个特征向量排列在一起组成一个新的矩阵,并将每一行看作 维空间中的向量,并将其作为给定中心用 算法进行聚类。
一方面,K-means对于中心的给定比较敏感,差的中心极有可能得到较慢的收敛速率和较差的结果,而谱聚类的算法可以帮助我们快速找到合适的聚类中心,避免因为中心的影响而导致结果的不理想;
另一方面,谱聚类考虑了邻里之间的关系,而K-means并没有,因此谱聚类可以适用于更多的非圆形中心,而K-means只对圆形中心有更好的聚类;
此外,谱聚类要求样本的权重 非负,这极大的限制了它的运用范围,而K-means没有。
【问题】假设数据有多重特征表示,即 ,其中代表数据的第 个特征,请设计能够融合这些不同特征的聚类算法。
【第一步】使用核函数思想,即 ,通过核K-means算法对其聚类。在算法中,我们需要确定一个能够表征所有特征的核函数 ,这个核函数应该与每一个特征相关。
【第二步】如果我们引用高斯核函数,那么,每一个 都对应一个不同的核函数,不同的特征对应不同的核函数 ,而其线性组合得到的核函数 必然是可以通过多个高斯基函数 线性组合近似得到的,通过这组高斯基函数 并将其线性组合即可得到一个具有多种特征的高斯核函数 ,得到新的核函数。
【第三步】先给定一组 的值,带入给定样本中进行学习这一核函数 ,通过不断调整线性组合系数 得到不同的簇,并根据已知的训练样本分簇与上述聚类样本对比,选择聚类情况最优时对应的核函数 即为学习得到最优的核函数,此时的核函数能够较友好反应样本的特征。
通过以三步,我们确定了最优的核函数,可以将其带入K-Means算法中,可以对更多的样本进行分类。
给定样本集合 ,其中 独立同分布,, 为第 个样本的缺失指示矩阵,即 表示样本 的第 个特征可观测( ),否则表示该特征值缺失。
(1)请设计分类算法以处理数据中含确实特征的情形。
【第一步】首先对于样本中缺失的数据 ,将 缺失的特征记为0,但不改变样本标签,仍然使 ,则 样本每个特征上都存在特定的值。
【第二步】分析问题给定 个类别和初始标签 ,将 视为原有标签。通过核SVM分类算法对所得样本 进行分类,并通过交叉验证的方法不断调整松弛因子 得到分类器和 个最终类别。
【第三步】我们认为每一个分在同一类的样本具有较强的相关性,则可以用该类别中样本该特征非缺失值的均值逐一对样本中缺失的值补齐,更新样本 ,并不改变 的标签,仍看作为缺失值。
【第四步】用更新后的样本重复多次进行核SVM分类,得到该次样本,当第 次样本某个特征与第 次样本对应特征之差在一个可以容忍的区间时(由初始给定的一个预设值),并将标签改为 ,停止该样本该特征的更新,直到每一个样本都不在更新,得到最后样本和类别。
(2)请设计聚类算法以处理数据中含有缺失特征的情形。
【第一步】首先对于样本中缺失的数据 ,将 缺失的特征记为0,,但不改变样本标签,仍然使 ,则 样本每个特征上都存在特定的值。
【第二步】通过谱聚类的方法取非0最大的前 个特征值和特征向量,并将其作为给定中心用K-means算法进行聚类,得到有 个类别。
【第三步】我们认为每一个同一类的样本具有较强的相关性,则可以用该类别中样本该特征非缺失值的均值逐一对样本中所缺失的值补齐,更新样本 ,并不改变 的标签,仍看作为缺失值。
【第四步】用更新后的样本重复多次进行聚类分析,得到该次样本,当第 次样本某个特征与第 次样本对应特征之差在一个可以容忍的区间时(由初始给定的一个预设值),并将标签改为 ,停止该样本该特征的更新,直到每一个样本都不在更新,得到最后样本和类别。