聚类算法
-
聚类算法分类:粗聚类、细聚类
-
一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中计算样本和样本之间的相似性,一般使用欧式距离
-
sklearn.cluster.KMeans(n_clusters=8)
- 参数:n_clusters:开始的聚类中心数量
-
k-means其实包含两层内容:
- k – 选几个中心店
- means – 均值计算
-
流程
- 随机设置K个特征空间内的点作为初始的聚类中心
- 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
- 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)可能不是实际存在的点
- 如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程
-
kmeans由于要计算质心到每一个样本的距离,所以其收敛速度比较慢
-
模型评估
- 误差平方和 sse=求和k个类 (求和每个类中点 (点到类中心点)^2) 误差平方和 值越小越好
- 肘部法 确定k值的方法
- 迭代计算k from 1 to n 每次聚类后计算每个点到其所属的中心的距离的平方和
- 下降率突然变缓时即认为是最佳的k值
- 轮廓系数法 SC系数 S = (b-a)/max(b,a) 内部距离最小化 外部距离最大化
- a: 样本i到同一类内其他点不相似程度的平均值
- b: 样本i到其他类的平均不相似程度的最小值
- 取值为[-1, 1],其值越大越好
- CH系数 分数s高则聚类效果越好
- 类别内部数据的距离平方和越小越好,类别之间的距离平方和越大越好
- CH需要达到的目的:用尽量少的类别聚类尽量多的样本,同时获得较好的聚类效果。
-
算法优化
- k_means优点:简单,容易理解缺点:特别人容易陷入到局部最优解
- Canopy 通过绘制同心圆,进行k值选择筛选需要确定同心圆的半径t1,t2
- K-means++ 距离平方进行求解保证下一个质心到当前质心,距离最远
- 二分k-means 通过误差平方和sse,设置阈值,然后进行划分
- 上面的算法都在用来选质心,避免落入局部最优
- k-medoids(k-中心聚类算法)
- 和kmeans选取中心点的方式不同通过从当前点选择中心点(质心)进行判断
- 速度慢,但是鲁棒性好
- 总体n个样本点中任意选取k个点作为medoids
- 按照与medoids最近的原则,将剩余的n-k个点分配到当前最佳的medoids代表的类中
- 对于第i个类中除对应medoids点外的所有其他点,按顺序计算当其为新的medoid时,代价函数的值,遍历所有可能,选取代价函数最小时对应的点作为新的medoids
- 重复2-3的过程,直到所有的medoids点不再发生变化或已达到设定的最大迭代次数
- 产出最终确定的k个类
- kernel kmeans【了解】映射到高维空间
- ISODATA【了解】动态聚类可以更改k值的大小
- Mini-batch K-Means【了解】大数据集分批聚类
-
特征降维
- 就是改变特征值,选择哪列保留,哪列删除
- 目标是得到一组”不相关“的主变量
- 降维的两种方式
- 特征选择
- 主成分分析(可以理解一种特征提取的方式)
-
特征选择 提出数据中的冗余变量
- Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
- 方差选择法:低方差特征过滤
- 相关系数
- Embedded (嵌入式):算法自动选择特征(特征与目标值之间的关联)
- 决策树:信息熵、信息增益
- 正则化:L1、L2
- 深度学习:卷积等
- 低方差特征过滤
- 特征方差小 某个特征大多样本的值比较接近
- 把方差比较小的某一列进行剔除
- api:sklearn.feature_selection.VarianceThreshold(threshold = 1.0)
- 删除所有低方差特征
- 注意,参数threshold一定要进行值的指定
- 相关系数
- 皮尔逊相关系数 通过具体值的大小进行计算
- from scipy.stats import pearsonr
- 返回值,越接近|1|,相关性越强;越接近0,相关性越弱
- (-1,1) 当>0时正相关,<0 时负相关
- 一般划分为三级 <0.4 低度相关 0.4<=r<-.7 显著性相关 0.7<=r<1 高度线性相关
- 斯皮尔曼相关系数
- from scipy.stats import spearmanr
- 返回值,越接近|1|,相关性越强;越接近0,相关性越弱
- 皮尔逊相关系数 通过具体值的大小进行计算
- Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
-
主成分分析 pca
- 高维数据转换为低维数据,在此过程中可能会舍弃原有数据、创造新的变量
- 数据唯独压缩,经可能降低原数据的维度,损失少量信息
- sklearn.decomposition.PCA(n_components=None)
- n_components 整数 – 表示降低到几维 小数 – 保留百分之多少的信息