分类知识
分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中。机器学习中常见的分类算法有:SVM(支持向量机)、KNN(最邻近法)、Decision Tree(决策树分类法)、Naive Bayes(朴素贝叶斯分类)、Neural Networks(神经网络法)等。
但当对海量数据进行分类时,为了降低数据满足分类算法要求所需要的预处理代价,往往需要选择非监督学习的聚类算法,如K-Means Clustering(K均值聚类)。
算法原理
选择K个不相同的点作为初始质心
repeat
将每个点指派到最近的质心,形成K个簇
重新计算每个簇的质心
until 簇不发生变化或达到最大迭代次数
质心计算
对于分类后的产生的k个簇,分别计算到簇内其他点距离均值最小的点作为质心(对于拥有坐标的簇可以计算每个簇坐标的均值作为质心)
距离度量
一般情况下,在欧式空间中采用的是欧式距离,在处理文档中采用的是余弦相似度函数,有时候也采用曼哈顿距离作为度量
欧式距离:
d ( x , y ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ⋯ + ( x n − y n ) 2 = ∑ i = 1 n ( x i − y i ) 2 d(x, y)=\sqrt{\left(x_{1}-y_{1}\right)^{2}+\left(x_{2}-y_{2}\right)^{2}+\cdots+\left(x_{n}-y_{n}\right)^{2}}=\sqrt{\sum_{i=1}^{n}\left(x_{i}-y_{i}\right)^{2}} d(x,y)=(x1−y1)2+(x2−y2)2+⋯+(xn−yn)2=∑i=1n(xi−yi)2
余弦相似度:
给定两个属性向量,A和B,其余弦相似性 θ 由点积和向量长度给出,如下所示:
cos ( θ ) = A ⋅ B ∥ A ∥ ∥ B ∥ = ∑ i = 1 n A i × B i ∑ i = 1 n ( A i ) 2 × ∑ i = 1 n ( B i ) 2 \cos (\theta)=\frac{A \cdot B}{\|A\|\|B\|}=\frac{\sum_{i=1}^{n} A_{i} \times B_{i}}{\sqrt{\sum_{i=1}^{n}\left(A_{i}\right)^{2}} \times \sqrt{\sum_{i=1}^{n}\left(B_{i}\right)^{2}}} cos(θ)=∥A∥∥B∥A⋅B=∑i=1n(Ai)2×∑i=1n(Bi)2∑i=1nAi×Bi
给出的相似性范围从-1到1:-1意味着两个向量指向的方向正好截然相反,1表示它们的指向是完全相同的,0通常表示它们之间是独立的,而在这之间的值则表示中间的相似性或相异性。
曼哈顿距离:
d ( i , j ) = ∣ x i − x j ∣ + ∣ y i − y j ∣ d(i, j)=|xi-xj|+|yi-yj| d(i,j)=∣xi−xj∣+∣yi−yj∣
聚类效果评价
轮廓系数结合了聚类的凝聚度和分离度, 用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。具体计算方法如下:
- 对于每个样本点 i i i,计算点i与其同一个簇内的所有其他元素距离的平均值,记作 a ( i ) a(i) a(i),用于量化簇内的凝聚度。
- 选取i外的一个簇 b b b,计算 i i i与 b b b中所有点的平均距离,遍历所有其他簇,找到最近的这个平均距离,记作 b ( i ) b(i) b(i),即为i的邻居类,用于量化簇之间分离度。
- 对于样本点 i i i,轮廓系数 s ( i ) = ( b ( i ) – a ( i ) ) / ( m a x ( a ( i ) , b ( i ) ) ) s(i) = (b(i) – a(i))/(max({a(i),b(i)})) s(i)=(b(i)–a(i))/(max(a(i),b(i)))计算所有i的轮廓系数,求出平均值即为当前聚类的整体轮廓系数,度量数据聚类的紧密程度。
从上面的公式,不难发现若 s ( i ) s(i) s(i)小于0,说明i与其簇内元素的平均距离大于最近的其他簇,表示聚类效果不好。如果 a ( i ) a(i) a(i)趋于0,或者 b ( i ) b(i) b(i)足够大,即 a ( i ) a(i) a(i)远远小于 b ( i ) b(i) b(i),那么 s ( i ) s(i) s(i)趋近与1,说明聚类效果比较好。另外需要注意的是,使用轮廓系数,族数量必须大于等于2
另外,还有sklearn聚类算法评估方法:Calinski-Harabaz Index、互信息…
K-Means算法优缺点
优点
- 原理易懂、易于实现;
- 当簇间的区别较明显时,聚类效果较好;
缺点
- 当样本集规模大时,收敛速度会变慢;
- 容易局部最优,对孤立点数据敏感,少量噪声就会对平均值造成较大影响;
- k的取值十分关键,对不同数据集,k选择没有参考性,需要大量实验;