1.聚类算法
1.1 聚类算法概念
⼀种典型的⽆监督学习算法,主要⽤于将相似的样本⾃动归到⼀个类别中。
在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算⽅法,会得到不同的聚类结
果,常⽤的相似度计算⽅法有欧式距离法。
1.1.1 聚类算法·api
- sklearn.cluster.KMeans(n_clusters=8
- 参数
- n_clusters:开始的聚类中⼼数量
- 整型,缺省值=8,⽣成的聚类数,即产⽣的质⼼(centroids)数。
- n_clusters:开始的聚类中⼼数量
- 方法
- estimator.fit(x)
- estimator.predict(x)
- estimator.fit_predict(x)
- 计算聚类中⼼并预测每个样本属于哪个类别,相当于先调⽤fit(x),然后再调⽤predict(x)
- 参数
1.2 K-means 聚类算法实现流程
- k-means其实包含两层内容:
- K : 初始中⼼点个数(计划聚类数)
- means:求中⼼点到其他数据点距离的平均值
k-means聚类步骤
1、随机设置K个特征空间内的点作为初始的聚类中⼼
2、对于其他每个点计算到K个中⼼的距离,未知的点选择最近的⼀个聚类中⼼点作为标记类别
3、接着对着标记的聚类中⼼之后,重新计算出每个聚类的新中⼼点(平均值)
4、如果计算得出的新中⼼点与原中⼼点⼀样(质⼼不再移动),那么结束,否则重新进⾏第⼆步过程
通过下图解释实现流程:
1.3 模型评估
1.3.1 误差平⽅和(SSE \The sum of squares due to error):
举例:(下图中数据-0.2, 0.4, -0.8, 1.3, -0.7, 均为真实值和预测值的差)
1.3.2 “肘”⽅法 (Elbow method) — K值确定
(1)对于n个点的数据集,迭代计算k from 1 to n,每次聚类完成后计算每个点到其所属的簇中⼼的距离的平⽅和;
(2)平⽅和是会逐渐变⼩的,直到k==n时平⽅和为0,因为每个点都是它所在的簇中⼼本身。
(3)在这个平⽅和变化过程中,会出现⼀个拐点也即“肘”点,下降率突然变缓时即认为是最佳的k值。
1.3.2 轮廓系数法(Silhouette Coefficient)
取值为[-1, 1],其值越⼤越好
1.3.3 CH系数(Calinski-Harabasz Index)
类别内部数据的协⽅差越⼩越好,类别之间的协⽅差越⼤越好(换句话说:类别内部数据的距离平⽅和越⼩越好,类别
之间的距离平⽅和越⼤越好),这样的Calinski-Harabasz分数s会⾼,分数s⾼则聚类效果越好
tr为矩阵的迹, B 为类别之间的协⽅差矩阵,W 为类别内部数据的协⽅差矩阵;
m为训练集样本数,k为类别数。
1.4 算法优化
1.4.1 Canopy算法配合初始聚类
优点:
1.Kmeans对噪声抗⼲扰较弱,通过Canopy对⽐,将较⼩的NumPoint的Cluster直接去掉有利于抗⼲扰。
算法优化
213
2.Canopy选择出来的每个Canopy的centerPoint作为K会更精确。
3.只是针对每个Canopy的内做Kmeans聚类,减少相似计算的数量。
缺点:
1.算法中 T1、T2的确定问题 ,依旧可能落⼊局部最优解
1.4.2 K-means++
- 在数据集中随机选择一个样本点作为第一个初始化的聚类中心
- 选择出其余的聚类中心:
- 计算样本中的每一个样本点与已经初始化的聚类中心之间的距离,并选择其中最短的距离,记为d_i
- 选择一个新的数据点作为新的聚类中心,选择的原则是:距离较大的点,被选取作为聚类中心的概率较大
- 重复上述过程,直到k个聚类中心都被确定
对k个初始化的聚类中心,利用K-Means算法计算最终的聚类中心。
1.4.3 ⼆分k-means
实现流程:
1.所有点作为⼀个簇
2.将该簇⼀分为⼆
3.选择能最⼤限度降低聚类代价函数(也就是误差平⽅和)的簇划分为两个簇。
4.以此进⾏下去,直到簇的数⽬等于⽤户给定的数⽬k为⽌。
因为聚类的误差平⽅和能够衡量聚类性能,该值越⼩表示数据点越接近于他们的质⼼,聚类效果就越好。所以需要对误
差平⽅和最⼤的簇进⾏再⼀次划分,因为误差平⽅和越⼤,表示该簇聚类效果越不好,越有可能是多个簇被当成了⼀个
簇,所以我们⾸先需要对这个簇进⾏划分。
1.4.4 k-medoids(k-中⼼聚类算法)
K-medoids和K-means是有区别的,不⼀样的地⽅在于中⼼点的选取
K-means中,将中⼼点取为当前cluster中所有数据点的平均值,对异常点很敏感!
K-medoids中,将从当前cluster 中选取到其他所有(当前cluster中的)点的距离之和最⼩的点作为中⼼点。
算法流程:
( 1 )总体n个样本点中任意选取k个点作为中心点
( 2 )按照与中心点最近的原则,将剩余的n-k个点分配到当前最佳的中心点代表的类中
( 3 )对于第i个类中除对应中心点外的所有其他点,按顺序计算当其为新的中心点时,代价函数的值,遍历所
有可能,选取代价函数最⼩时对应的点作为新的中心点
( 4 )重复2-3的过程,直到所有的中心点不再发⽣变化或已达到设定的最⼤迭代次数
( 5 )产出最终确定的k个类
1.5 特征降维
1.5.1 定义
降维是指在某些限定条件下,降低随机变量(特征)个数,得到⼀组“不相关”主变量的过
1.5.2 降维的两种⽅式
- 特征选择
- 主成分分析(可以理解⼀种特征提取的⽅式)
1.5.2.1 特征选择定义
数据中包含冗余或⽆关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
下面说一下下面两种方法
- ⽅差选择法:低⽅差特征过滤
- 相关系数
1.5.2.1.1 低⽅差特征过滤
删除低⽅差的⼀些特征,前⾯讲过⽅差的意义。再结合⽅差的⼤⼩来考虑这个⽅式的⻆度。
特征⽅差⼩:某个特征⼤多样本的值⽐较相近
特征⽅差⼤:某个特征很多样本的值都有差别
- sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
- 删除所有低⽅差特征
- Variance.fit_transform(X)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有⾮零⽅差特征,即删除所有样本中
具有相同值的特征。
1.5.2.1.2 相关系数
- 主要实现⽅式:
- ⽪尔逊相关系数
- 斯⽪尔曼相关系数
1.5.2.2 主成分分析
定义:⾼维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作⽤:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
API
- sklearn.decomposition.PCA(n_components=None)
- 将数据分解为较低维数空间
- n_components:
- ⼩数:表示保留百分之多少的信息
- 整数:减少到多少特征
- PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]