无监督的数据挖掘算法-聚类

  • 聚类算法的目的:依据已知的数据,将相似度高的样本集中到各自的簇中。如:借助电商平台用户的历史交易数据,将其划分为不同的价值等级(高价值,潜在价值,低价值等);利用在各城市的交易数据划分不同的消费等级等。除了用于数据分割还可监控异常点,如:电商平台交易中一张银行可被用于上百个用ID的支付,并且送货地址都在相似的区域,则可能是黄牛的出现。

    tips:对于聚类,如果数据有量纲上的差异有必要做特征缩放,如标准化处理sklearn.preprocessing.scale,变为均值为0标准差为1的数据;sklearn.preprocessing.minmax_scale,变为[0,1]之间的数据。
    
  • 主要介绍Kmeans,DBSCAN和层次聚类。

Kmeans:

  1. 思想:从数据中挑选k个样本点作为原始的聚类中心;计算剩余样本与簇中心的距离,并把各样本标记为离k个簇中心最近的类别;重新计算各簇中样本点的均值,并以均值作为新的k个簇中心;重复前边的两步直至簇内样本的离差平方和趋于稳定。
  2. PYTHON的实现:sklearn.cluster.Kmeans
  3. 重点:最佳k值的确定。拐点法(簇内离差和趋于稳定时,即斜率由大变小时)和轮廓系数法(考虑簇的密集性a(i)和分散性b(i),S(i)=(b(i)-a(i))/max(a(i),b(i)),近似1时分配是合理的)。代码如下:
    在这里插入图片描述
    在这里插入图片描述

DBCSCAN:

  1. 思想:基于密度的聚类(Density-Based Special Clustering of Applications with Noise),密度可以理解为样本点的紧密程度,用半径eps和最小样本量min_samples评估。从某个点出发,不停的向外扩张,直到获得一个最大的密度相连。较之Kmeans不容易受到异常点的影响以及可以对非球形样本进行合理的聚类
  2. PYTHON的实现:sklearn.cluster.DBSCAN
  3. 重点:确定eps和min_samples
    在这里插入图片描述
  4. tips:需要不断的调试eps和min_samples;对于聚为多少类可以用Kmeans算法进行探索性分析/用主成分分析将多个原始变量降维至两个主成分然后画散点图发现数据点的分布块;会返回异常点,且异常点的label为-1。

层次聚类:

  1. 思想:计算各簇内样本点的相似度,并通过相似度的结果构建层次树。将数据集中的每个样本点当作一个类别;计算所有样本点间的两两距离,并从中挑选出最小距离的两个点构成一个簇;继续计算剩余样本点之间的两两距离和点与簇之间的距离,将最小距离的点和簇合并到一起;重复前边的步骤,直至满足聚类的个数或者其他设定的条件。
  2. PYTHON的实现:sklearn.cluster.AgglomerativeClustering
  3. 重点:簇间的距离度量,最小距离法,最大距离法,平均距离法。
  4. tips:不会返回异常点。

猜你喜欢

转载自blog.csdn.net/weixin_43962871/article/details/87453957