尤溪网站开发,h5企业网站源码,tq网站漂浮代码,物业网站宣传册怎么做本文是关于聚类算法的第二篇K-means#xff0c;感兴趣的同学可以前往http://ihoge.cn/2018/clustering.html 阅读完整版。
二、K-means
1. 算法步骤 1 选择KK个点作为初始质心 2 Repeat: 3 将每个点指派到最近的质心,形成K role=pre…本文是关于聚类算法的第二篇K-means感兴趣的同学可以前往http://ihoge.cn/2018/clustering.html 阅读完整版。
二、K-means
1. 算法步骤 1 选择KKK个点作为初始质心 2 Repeat: 3 将每个点指派到最近的质心,形成K" role="presentation" style="position: relative;">KKK个簇 4 重新计算每个簇的质心 5 Until: 质心不发生变化终止 2. 距离的度量
闵可夫斯基距离
闵可夫斯基距离不是一种距离而是一类距离的定义。对于 n 维空间中的两个点 x(x1,x2,x3,...,xn)x(x1,x2,x3,...,xn)x(x_1,x_2,x_3,...,x_n)和y(y1,y2,y3,...,yn)y(y1,y2,y3,...,yn)y(y_1,y_2,y_3,...,y_n)那么xxx和y" role="presentation" style="position: relative;">yyy亮点之间的闵可夫斯基距离为
dxy∑i1n(xi−yi)p‾‾‾‾‾‾‾‾‾‾‾‾⎷dxy∑i1n(xi−yi)p
d_{xy}=\sqrt{\sum_{i=1}^{n}{\left( x_{i}-y_{i} \right)^{p}}} 其中p是一个可变参数当p1时被称为曼哈顿距离当p2时被称为欧式距离当p∞∞\infty 时被称为切比雪夫距离。
余弦相似度 cos(Θ)aTb|a|∗|b|cos(Θ)aTb|a|∗|b|
cos(\Theta )=\frac {a^Tb}{|a|*|b|}a,ba,ba,b表示两个向量|a||a||a|和|b||b||b|表示向量的模。 余弦相似度一般衡量两个向量的相似情况常用与文本处理。余弦角越小越相似。
杰卡德Jaccard相似系数 J(A,B)|A⋂B||A⋃B|J(A,B)|A⋂B||A⋃B|
J(A,B)=\frac {|A \bigcap B|}{|A \bigcup B|}这里A、BA、BA、B表示集合A⋂BA⋂BA \bigcap B表示两个集合公共元素的个数A⋃BA⋃BA \bigcup B表示两个集合并集元素的个数。 Jaccard 相似系数适用于度量两个集合的相似程度取值在 01 之间越大越相似。在推荐系统中常用衡量客户或商品的相似度。
3. 变量标准化
在聚类前通常需要对个连续变量进行标准化因为方差大的变量比方差晓得变量对距离或相似度的影响更大从而对聚类结果的影响更大。
常用的方法有
正态标准化xixi−mean(X)std(Xxixi−mean(X)std(Xx_i=\frac {x_i-mean(X)}{std(X} 归一化xixi−min(X)max(X)−min(X)xixi−min(X)max(X)−min(X)x_i=\frac {x_i-min(X)}{max(X)-min(X)}
4. 变量的维度分析
假设一组变量中一个维度有5个变量二另一个维度只有1个变量则第一个维度的权重被明显提高了。一般情况下每个维度上使用的变量个数应该是一样的不过分析人员要结合具体场景不同维度提供不同数量的变量个数这相当于加大了一些维度的权重。
除了机遇业务定义进行变量的选择另一种常用的方法是在聚类之前进行主成分分析。
5. 质心的目标函数
5.1 SSE 误差平方和
聚类的目标通常用一个目标函数表示该函数依赖于点之间或点到簇的质心的临近性 如考虑临近性度量为欧几里得距离的数据我们使用误差平方和SSE作为度量聚类质量的目标函数即最小化簇中点到质心的距离平方和。 SSE也称散布scatter定义如下
SSE∑Ki1∑x∈Cidist(ci,x)2SSE∑i1K∑x∈Cidist(ci,x)2
SSE=∑^K_{i=1}∑_{x\in C_i}dist(c_i,x)^2 其中distdistdist是欧几里得空间中两个对象之间的标准欧几里得距离。给定这些假设实际上可以证明对 SSE 求导另导数为 0 求解 ckckc_k使簇的 SSE 最小的质心是均值 ∂∂ckSSE∂∂ck∑Ki1∑x∈Ci(ci,x)20∂∂ckSSE∂∂ck∑i1K∑x∈Ci(ci,x)20
\frac {\partial }{\partial c_k}SSE =\frac {\partial }{\partial c_k}∑^K_{i=1}∑_{x\in C_i}(c_i,x)^2=0 最终得到
∑x∈Ck2(ck−xk)0⟹mkck∑x∈Ckxk⟹ck1mk∑x∈Ckxk∑x∈Ck2(ck−xk)0⟹mkck∑x∈Ckxk⟹ck1mk∑x∈Ckxk
∑_{x\in C_k}2(c_k-x_k)=0\Longrightarrow m_kc_k=∑_{x\in C_k}x_k \Longrightarrow c_k = \frac 1{m_k}∑_{x\in C_k}x_k文档数据
考虑文档数据和余弦相似性度量。这里我们假定文档数据用文档——词矩阵表示我们的目标是最大化簇中文档与簇的质心的相似性该量乘坐簇的凝聚度cohesion。对于该目标可以证明与欧几里得数据一样簇的质心是均值。总 SSE 的类似量是总凝聚度total cohesion
TotalCohesion∑Ki1∑x∈Cicosine(ci,x)TotalCohesion∑i1K∑x∈Cicosine(ci,x)
Total Cohesion=∑^K_{i=1}∑_{x\in C_i}cosine(c_i,x)关于凝聚度的知识会在下文模型评估里面详细介绍
5.2 SAE 绝对误差和
为了表明KKK均值可以用各种不同的目标函数,我们考虑如何将数据分成K" role="presentation" style="position: relative;">KKK个簇使得点到其簇中心的曼哈顿距离之和最小。如下式绝对误差和SAE SAE∑Ki1∑x∈Ci|ci−x|SAE∑i1K∑x∈Ci|ci−x|
SAE = ∑^K_{i=1}∑_{x \in C_i}|c_i-x|∂∂ckSAE∂∂ck∑Ki1∑x∈Ci|ci−x|0∂∂ckSAE∂∂ck∑i1K∑x∈Ci|ci−x|0
\frac {\partial }{\partial c_k}SAE =\frac {\partial }{\partial c_k}∑^K_{i=1}∑_{x\in C_i}|c_i-x|=0 最终得到
∑x∈Ck∂∂ck|ck−x|0⟹∑x∈Cksign(x−ck)0⟹ckmedian{x∈Ck}∑x∈Ck∂∂ck|ck−x|0⟹∑x∈Cksign(x−ck)0⟹ckmedian{x∈Ck}
∑_{x\in C_k}\frac {\partial }{\partial c_k}|c_k-x|=0\Longrightarrow ∑_{x\in C_k}sign(x-c_k )=0 \Longrightarrow c_k=median\{x\in C_k\} 即簇中点的中位数。一组点的中位数的计是直截了当的并且减少受离群值的影响。5.3 常见的邻近度、质心和目标函数组合
邻近度函数质心目标函数曼哈顿距离中位数最小化对象与质心的绝对误差和SAE平方欧几里得距离均值最小化对象与质心的误差平方和SSE余弦均值最大化对象与质心的余弦相似度和Bregman散度均值最小化对象到质心的Bregman散度和
Bregman散度实际上是一类紧邻性度量包括平方欧几里得距离。Bregman散度函数的重要性在于任意这类函数都可以用作以均值为质心的 K-means 类型的聚类算法的基础。
6. 选择初始质心
当质心随机初始化时K-means 将产生不同的总 SEE。选择适当的初始质心是基本 K-menas 过程的关键步骤。常见的是随机选取但这种情况下簇的质量常常很差。考虑什么情况下选择的初始质心能找到最优解答案是每个簇刚好分到一个质心。事实证明发生这种情况的概率是非常非常低的。
常见一种技术是多次运行然后选取具有最小 SEE 的簇集。该策略虽然简单但是效果可能不太好依然是概率事件。
另一种有效的技术是取一个样本并使用层次聚类技术对他聚类。从层次聚类中提取 KKK 个簇,并用这些簇的质心作为初始质心。该方法虽然有效,但仅对下列情况有效:(1)样本相对较小,例如数百到数千(层次聚类开销较大);(2)K" role="presentation" style="position: relative;">KKK 相对与样本大小较小。
还有一种方法是随机选择第一个点或者所有点到质心作为第一个点。然后对于每个候机初始质心选择里已经选取的初始质心最远的点并且把该方法应用与点样本。 这样可以大大缓解可能会选择离群点作为质心的可能并且大大减小计算量。
另外我们也可以采用对初始化问题不太敏感的 K-means 的变种二分K-means、使用后处理来“修补” 所产生的簇集
7. 时间复杂性和空间复杂性
所需空间O((mK)n)O((mK)n)O((m+K)n)m 是点数 n 是属性数所需时间O(I∗K∗m∗n)O(I∗K∗m∗n)O(I*K*m*n)IIscript typemath/tex idMathJax-Element-34I/script 是收敛所需迭代次数通常很小可以是有界的。
8. K-means 其他问题
8.1 处理空簇
K-means 存在的问题之一是如果所有的点在指派的步骤都为分配到某个簇就会得到空簇。这种情况下需要选择一个替补质心否则误差将会偏大。
方法一 选择一个距离当前任何质心最远的点方法二 从具有最大 SSE 的簇中选择一个替补质心。浙江分裂簇并降低聚类的总 SSE。
8.2 离群点
当然我们想到的第一反应是删除离群点但是有些聚类应用不能删除离群点。在某些情况下财经分析明显的离群点可能是最令人感兴趣的点。
那么问题来了如何识别离群点
方法一聚类前删除离群点方法二后处理离群点。如删除那些具有不寻常影响的点尤其是多次运行算法时另外也可以删除那些很小的簇他们尝尝代表离群点的组。
8.3 后处理降低 SSE
增加簇个数 分裂一个簇通常选择具有最大 SSE 的簇页可以分裂在特定属性上具有最大标准差的簇。引进一个新的质心通常选择离所有质心最远的点。减少簇个数 拆散一个簇 通常选择拆散使总 SSE 增加最少的簇 删除对应的质心合并两个簇 通常选择合并质心最接近的两个簇或者合并两个导致总 SSE 增加最少的簇。这两种方法与层次聚类使用的方法相同分别乘坐质心方法和 Ward 方法。
9. 二分 K-means
二分 K-means 算法时基于 K-means 算法的直接扩充它基于一种简单想法为了得到 K 个簇将所有点的集合分裂成两个簇从这些簇中选取一个继续分裂如此下去知道产生 K 个簇。
算法实现步骤 1 初始化簇表是指包含有所有的点组成的簇。 2 Repeat 3 从簇表中取出一个簇 4 对选出的簇进行多次二分“实验” 5 for i 1 to 试验次数 do 6 使用基本 K-means二分选定的簇 7 end for 8 从二分实验中选择具有最小 SSE 的两个簇 9 将这两个簇添加到簇表中 10 Until 簇表包含 K 个簇。 待分裂的簇有许多不同的选择方法。可以选择最大的簇选择具有最大 SSE 的簇或者使用一个基于大小和 SSE 的标准进行选择。不同的选择导致不同的簇。
我们通常使用结果簇的质心作为基本 K-means 的初始质心对结果逐步求精。 因为尽管 K-means 可以保证找到使 SSE 局部最小的聚类但是自二分 K-means 算法中我们“局部地”使用了 K-means 即二分个体簇。因此最终的簇集并不代表使 SSE 局部最小的聚类。
10. K-means优缺点
10.1 优点
简单并且可以用于各种数据类型具备适合的空间复杂度和计算负责度适用于大样本数据K-means 某些变种甚至更有效 二分K-means且不受初始化问题影响。
10.2 缺点
不能处理非球形簇、不同尺寸和不同密度的簇对离群点敏感K-means 仅限于具有中心质心概念的数据。有一种相关的 K-中心点聚类技术没有这种限制但是开销更大。
参考文献