机器学习——聚类分析——关联规则(K-means算法)

这里写图片描述

一、聚类分析

1.1 聚类分析

聚类:
    把相似数据并成一组(group)的方法。‘物以类聚,人以群分’
    不需要类别标注的算法,直接从数据中学习模式
    所以,聚类是一种 数据探索 的分析方法,他帮助我们在大量数据中探索和发现数据结构

1.2 相似度与距离度量

定义距离来度量表示相似度:
    欧式距离,曼哈顿距离,闵氏距离

距离与变量量纲的关系
    变量标准化方法:
        0-1 标准化
        区间缩放法 (a,b)=(0,1)
        类别变量onehot

1.3 K均值算法基本原理

常见的两类聚类算法:
    层次聚类算法(Hierarchical)
    基于划分的方法(Partitional)
    基于密度 和 基于模型

基于划分的方法(Partitional):K-means(K均值)
    1 随机选取K个数据点作为‘种子’
    2 根据数据点与‘种子’的距离大小进行类分配
    3 更新类中心点的位置,以新的类中心点作为‘种子’
    4 按照新的‘种子’对数据归属的类进行重新分配
    5 更新类中心点(-->3-->4),不断迭代,直到类中心点变得很小

1.4 聚类模型评估

K-means(K均值)算法总结:
    优点:算法原理简单,处理快
          当聚类密集时,类与类之间区别明显,效果好

    缺点:K是事先给定的,K值选定难确定
          对孤立点敏感
          结果不稳定,初始值选定对结果有一定的影响

1.5 K均值算法代码示例

sklearn.cluster.KMeans(
                        n_clusters = 8,         #聚类个数,K值,默认8
                        init = 'k-means++',     
                        n_init = 10,
                        max_iter = 300,
                        tol = 0.0001,
                        precompute_distances = 'auto',
                        verbose = 0,
                        random_state = None,
                        copy_x = True,
                        n_jobs = 1,
                        algorithm = 'auto'
                    )

一些重要的参数:
n_clusters = 8,         #聚类个数,K值,默认8
init = 'k-means++',     #初始化类中心点选择方法,可选:
        {
            'k-means++', #是一种优化选择方法,比较容易收敛
            'random',    #随机选择
            an ndarray   #可以通过输入ndarray数组手动指定中心点
        }
max_iter:               #最大迭代数          
precompute_distances:   #预计算距离,计算速度更快但占用更多内存。auto  True
copy_x                   # True,原始数据不变,False直接在原始数据上做更改                         

1.6 K-means(K均值)算法调参

最合适的K值
    肘部法则(Elbow method):找到随着K值变大,损失函数的拐点。
    损失函数:各个类畸变程度(distortions)之和

J = k = 1 K i C k | x i u k | 2

1.7 聚类模型的评估指标

轮廓系数 (Silhouette Coefficient):

聚类目的是让“组内数据尽量相似”,而“组间数据差异明显”,轮廓系数就是衡量方法

针对每一条数据i
    a(i)数据i与组内其它数据的平均距离
    b(i)数据i与邻组的数据的平均距离

轮廓系数:

S ( i ) = b ( i ) a ( i ) m a x { a ( i ) , b ( i ) } S ( i ) { 1 a ( i ) b ( i ) , a ( i ) < b ( i ) S ( i ) 1 0 a ( i ) = b ( i ) S ( i ) 1 a ( i ) b ( i ) 1 , a ( i ) > b ( i ) S ( i ) 0

数据i的轮廓系数s(i)
s(i) --> 1  样本i聚类合理
s(i) --> -1 样本i应该分到其它类
s(i) --> 0  样本i在两个轮廓的边界 
sklearn.metrics.silhouette_score    
sklearn.metrics.silhouette_score(
                                    X,
                                    labels = 'euclidean',
                                    sample_size = None,
                                    random_state = None
                                    )
一些重要的参数:
    X:      聚类的输入特征数据
    labels:类标签数组
    metrics:
    sample_size:是否抽样计算
1.8 聚类分析总结

二、关联规则

2.1 关联规则

啤酒与尿布的故事
关联规律挖掘:从交易数据中发现:买了X 还会买Y 的规则
关联规律挖掘‘购物篮分析’Market Basket Analysis(MBA)
关联规律->应用于推荐系统

2.2 频繁项集(Frequent Itemset)

项集:Itemset
    一个项集
    K个项集
支持数量(Support count)
    项集中同时出现次数
支持度Support
    支持数量/总交易数量

频繁项集(Frequent Itemset)
    支持度Support大于最小支持度(minsup)的项集合

2.3 关联规则Association Rule

        X->y, X和Y是项集
        example:
            {milk,dipper}->{beer}

2.4 关联规则评估指标

        支持度Support
        可信度Confidence

2.5 关联规则挖掘方法:

        分两步走:
        频繁项集(Frequent Itemset)的生成:生成所有supoort>= minsup的项集合
        关联规则的生成:对每一个频繁项集(XY)进行二元划分,生成confidence最高的一系列规则(X->Y)

2.6 关联规则 Apriori 算法基本原理

复杂度:
    给定d个items:
    总项集数 = 2^d

Apriori 算法思想:(购买A、B、C频繁则分别购买ABC肯定频繁)
    频繁项集的子集也是频繁项集
    反之,非频繁项集的超集必然不是频繁项集

    优点:使用先验性质,大大提高了频繁项集产生的效率
          算法简单易理解,容易实施

    缺点:候选频繁K项集数量巨大
          需要对整个数据库进行扫描,非常耗时
          数据集存放内存中,大数据处理有困难
2.6.1 关联规则lift指标

l i f t ( X Y ) = c o n f ( X Y ) p ( Y ) = p ( X Y ) p ( X ) p ( Y ) = p ( X Y ) p ( X ) p ( Y )

    lift>1 X-y正相关
    lift<1 X-y负相关
    lift=1 X-y无相关

    Support较大的规则lift值会倾向于比较小
    往往lift值特别大的规则,support会非常小
2.6.2 关联规则应用方向:
    交叉销售:向买A的用户推荐B
    捆绑销售:把A和B打包销售
2.6.3 基于support,confidence和lift 筛选规则
    综合使用上述三种规则

2.7 结果理解

2.8 代码演示

    sklearn 没有关联规则算法,寻求GitHub
    https://github.com/asaini/Apriori

    Python Implementation of Apriori Algorithm

2.9 总结

猜你喜欢

转载自blog.csdn.net/wsp_1138886114/article/details/80475981