1. 聚类算法
聚类概念:
- 无监督问题:我们手里没有标签了
- 聚类:相似的东西分到一组
- 难点:如何评估,如何调参
有个比较好玩的聚类算法可视化网站,可以方便理解聚类算法。
k-means
DBSCAN
1.1 K_means算法
1、基本概念
- 要得到簇的个数,需要指定K值(也就是分为K类)
- 质心:均值,即向量各维取平均即可(K个质心)
- 距离的度量:常用欧几里得距离和余弦相似度(先标准化)
- 优化目标: m i n ∑ i = 1 K ∑ x ∈ C i d i s t ( c i , x ) 2 min \sum \limits_{i=1}^K \sum \limits_{x \in C_i} dist(c_i,x)^2 mini=1∑Kx∈Ci∑dist(ci,x)2
2、工作流程
(a)一堆没有标签的样本点
(b)随机初始化两个中心点(一红标签一蓝标签)
(c)遍历所有样本点,样本点到哪个中心点的距离最短,就贴上相应的标签。
(d)分别计算红色簇和蓝色簇的质心,作为新的中心点
(e)根据新中心点,重复(c)步骤
(f)重复(d)步骤
一直到质心不再改变,有时候可能会无限迭代下去,这时可以设置最大迭代次数。
由于是随机初始化中心点,所以同样的数据集,相同的K值,运行多次,每次得到的聚类效果可能都不一样。sklearn工具包中的k-means算法是默认跑10次然后取最好的那一次。
3、评估方法
注意:这里的评估方法只是一个参考,并不代表最佳的参数选择方案。
- Inertia指标:也就是每个样本与其质心的距离的平方的总和,在sklearn工具包中,这个指标值可以通过
kmeans.inertia_
属性来获得 - 轮廓系数:
- 𝑎𝑖 : 计算样本i到同簇其他样本的平均距离ai。ai 越小,说明样本i越应该被聚类到该簇。将ai 称为样本i的簇内不相似度。
- 𝑏𝑖: 计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, …, bik}
- 结论:
- si接近1,则说明样本i聚类合理;
- si接近-1,则说明样本i更应该分类到另外的簇;
- 若si 近似为0,则说明样本i在两个簇的边界上。
4、优劣势
优势:简单、快速、适合常规数据集(成堆形状的数据集,比如上面流程中的数据集)
劣势:
- K值难确定
- 复杂度与样本呈线性关系
- 很难发现任意形状的簇,比如下面这种
1.2 DBSCAN算法
如果要用聚类算法,首选 DBSCAN算法
1、基本概念
Density-Based Spatial Clustering of Applications with Noise
- 核心对象:若某个点的密度达到算法设定的阈值则其为核心点。(即 r 邻域内点的数量不小于 minPts)
像下面图中的红色点,以其为圆心、半径为 r 画一个圆,圆内的样本数若大于某个值,那红色点就是一个核心对象。
- ϵ-邻域的距离阈值:设定的半径r
- 直接密度可达:若某点p在点q的 r 邻域内,且q是核心点则p-q直接密度可达。
- 密度可达:若有一个点的序列q0、q1、…qk,对任意 q i q_i qi- q i − 1 q_{i-1} qi−1 是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的“传播”。
如下图,q0和q1是直接密度可达,q1和q2直接密度可达,则q0和q2是密度可达。
- 密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连的。
- 边界点:边界点不是核心点,但落在某个核心点的邻域内。
- 噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的。
红色点:核心对象
黄色点:边界点
蓝色点:离群点(噪声点)
2、工作流程
- 参数D:输入数据集
- 参数ϵ:指定半径
- MinPts:密度阈值
3、参数选择
- 半径ϵ,可以根据K距离来设定:找突变点
K距离:给定数据集P={p(i); i=0,1,…n},计算点P(i)到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。 - MinPts: k-距离中k的值,一般取的小一些,多次尝试
4、优劣势
优势:
- 不需要指定簇个数(簇个数由半径 r 决定)
- 擅长找到离群点(检测任务)
- 两个参数就够了
- 可以发现任意形状的簇
劣势:
- 高维数据有些困难(可以做降维)
- 参数难以选择(参数对结果的影响非常大)
- Sklearn中效率很慢(数据削减策略)
5、评估方法
可以用上面提到过的轮廓系数。
2. 支持向量机(SVM)算法
Support Vector Machine
决策边界
选出来离雷区最远的边界(雷区就是边界上的点,要Large Margin)
距离的计算
如果数据的特征是2维的,决策边界为一条线
如果数据的特征是3维的,决策边界为一个面
求出点 x x x 到平面的距离?
现在假设数据的特征是3维度的,决策平面的方程为 W T x + b = 0 W^Tx+b=0 WTx+b=0
在决策平面上有两个点 x ′ x' x′、 x ′ ′ x'' x′′,则有 W T x ′ = − b , W T x ′ ′ = − b W^Tx'=-b,W^Tx''=-b WTx′=−b,WTx′′=−b
W(法向量)垂直于决策平面,则 ( x ′ ′ − x ′ ) (x''-x') (x′′−x′)是平面上的一条向量,法向量 W W W 垂直于平面上的任意一条向量,因此两者点积为0,即 W T ( x ′ ′ − x ′ ) = 0 W^T(x''-x')=0 WT(x′′−x′)=0
由以上铺垫可以得到, d i s t ( x , b , w ) = ∣ W T ∣ ∣ W ∣ ∣ ( x − x ′ ) ∣ = 1 ∣ ∣ W ∣ ∣ ∣ W T x + b ∣ dist(x,b,w)=|\frac{W^T}{||W||}(x-x')|=\frac{1}{||W||}|W^Tx+b| dist(x,b,w)=∣∣∣W∣∣WT(x−x′)∣=∣∣W∣∣1∣WTx+b∣
数据标签定义
数据集: ( x 1 , Y 1 ) 、 ( x 2 , Y 2 ) … ( x n , Y n ) (x_1,Y_1)、(x_2,Y_2)… (x_n,Y_n) (x1,Y1)、(x2,Y2)…(xn,Yn)
Y为样本的类别: 当 x x x 为正例时候 Y