zoukankan      html  css  js  c++  java
  • 【机器学习与R语言】10- 关联规则

    1.理解关联规则

    1)基本认识

    • 购物篮分析:用来判别事务型数据中商品之间关联的机器学习方法,在零售店之间广泛使用。
    • 购物篮分析的结果是一组指定商品之间关系模式的关联规则
    • 表现形式:{花生酱,果冻}——>{面包},即如果购买了花生酱和果冻,就很有可能购买面包。商品的集合称为项集。
    • 特点:无监督学习,不能预测,智能发现知识;不能衡量算法性能,只能定性地评估。
    • 其他应用场景:癌症种寻找DNA和蛋白质频繁出现的模式;信用卡欺诈和保险或医疗津贴的模式等。

    2)Apriori算法

    • Apriori:a priori,即事先
    • 事务型数据特点:一般很庞大,潜在的项集数量随着特征的数量呈指数增加。给定k个项,则有2^k个可能的项集必须用于规则的搜索。
    • 采用启发式算法来减少需要搜索的项集数,如广泛使用的Apriori算法,利用了一个简单的先验信念作为准则来减少关联规则的搜索空间(Apriori性质:一个频繁项集的所有子集必须也是频繁的)。

    image.png

    度量规则兴趣度:支持度和置信度

    • 支持度:一个项集或规则在数据中出现的频率。项集可以是多个项{A,B},也可是单个{A}。
      N是数据库中交易次数,count(X)是项集X的交易次数
    • 置信度:规则的预测能力或准确度度量,即表交易中项集X的出现导致项集Y出现的比例,和贝叶斯概率P(A|B)类似。
      同时包含项集X和Y的支持度与只包含项集X支持度之商

    用Apriori性质建立规则

    • 如果{A,B}是频繁的,那么{A}和{B}必须是频繁的。通过Apriori算法可提前排除潜在的关联规则。
    • 过程:一是通过多次迭代-停止的过程来识别所有满足最小支持度阈值的项集;二是根据满足最小置信度阈值的这些项集来创建规则。

    2.关联规则应用示例

    用关联规则确定经常一起购买的食品杂货

    1)收集数据

    来自某超市经营一个月的购物数据,包含9835次交易,大约每天327次交易。不考虑品牌,将食品杂货数量归为169个类型,探究哪种类型的商品有可能一起购买。

    数据下载:

    链接: https://pan.baidu.com/s/11xTz8xkJxXTuj0hc5THTZA 提取码: s5pr

    2)探索和准备数据

    不同于矩阵,事务型数据形式更自由,每一行为案例(一次交易),每条记录包括用逗号隔开的任意数量的产品清单,一至多个。也就是说案例之间的特征可能是不同的。

    ①为交易数据创建一个稀疏矩阵
    传统的数据框一旦增加额外的交易和商品,会变得过大而导致内存不足,因此用稀疏矩阵(购买了该单元格为1,否则为0,169列商品大部分单元为0)在内存中没有存储完整的矩阵,只是存储了由一个商品所占用的单元。

    使用arules包中的read.transactions函数创建事务型数据的稀疏矩阵。

    ## Example: Identifying Frequently-Purchased Groceries ----
    ## Step 2: Exploring and preparing the data ----
    
    # load the grocery data into a sparse matrix
    library(arules)
    groceries <- read.transactions("groceries.csv", sep = ",")
    summary(groceries)
    
    # look at the first five transactions
    inspect(groceries[1:5])
    
    # examine the frequency of items
    itemFrequency(groceries[, 1:3])
    

    ②可视化商品的支持度(商品频率)

    # plot the frequency of items
    itemFrequencyPlot(groceries, support = 0.1) #支持度至少10%
    itemFrequencyPlot(groceries, topN = 20) #支持度前20的商品
    

    10%
    top20

    ③可视化稀疏矩阵(商品交易)
    矩阵中有黑色填充的,说明被购买了。大多数情况下,图形是比较随机的。
    对于超大型交易数据集不适合全部展示,这时可以对交易进行随机抽样并可视化。

    # a visualization of the sparse matrix for the first five transactions
    image(groceries[1:5])
    
    # visualization of a random sample of 100 transactions
    image(sample(groceries, 100))
    

    image.png

    3)训练模型

    apriori函数很简单,但要找到支持度和置信度参数来产生合理数量的关联规则,需要大量的试验和误差评估。参数阈值设置太高,可能没有规则或规则太普通,太低则可能导致规则数量庞大,耗时耗内存。

    训练模型函数说明:

    #找出关联规则
    myrules=arules::apriori(data, 
            parameter = list(
                         support = 0.1,  #最低支持度
                         confidence = 0.8, #最低置信度
                         minlen = 1)) #最低项数
    
    # 检验关联规则
    inspect(myrules)
    
    • 支持度的阈值设置:考虑规则之前,事先想好需要最小的交易数量,如某商品一天购买2次(一月约60次)时可考虑建立规则,则支持度设为60/9835=0.006。
    • 置信度的阈值设置:涉及一个巧妙的平衡。绝大部分取决于分析目标,如从保守值开始,若无可行性规则,再降低要求拓宽范围。
    • minlen设定为2有助于消除包含少于两类商品的规则,防止仅仅是由于某商品被频繁购买而创建的无趣规则。
    ## Step 3: Training a model on the data ----
    library(arules)
    
    # default settings result in zero rules learned
    apriori(groceries)
    
    # set better support and confidence levels to learn more rules
    groceryrules <- apriori(groceries, parameter = list(support =
                              0.006, confidence = 0.25, minlen = 2))
    groceryrules
    

    建立的关联规则数

    4)评估性能

    • 规则的大小:前项(条件项/左项,lhs)和后项(结果项/右项,rhs)之和,如{peanut butter, jully}=>{bread}的大小为2+1=3.
    • 度量规则质量的统计量:支持度(support),置信度(confidence)和提升度(lift)。提升率是指一类商品相对于它的一般购买率,被购买的可能性有多大。若lift大于1,则说明商品关联一起比单类商品购买更常见。
      提升率与置信度不同,与商品购买顺序无关,lift(X—>Y)和lift(Y—>X)一样
    • 需要注意一些平凡的规则和令人费解的规则(可能只是随机模式)
    ## Step 4: Evaluating model performance ----
    # summary of grocery association rules
    summary(groceryrules)
    
    # look at the first three rules
    inspect(groceryrules[1:3])
    

    规则结果
    查看前三项规则

    5)提高模型性能

    ①对关联规则集合排序
    最有用的规则或许是那些具有最高支持度、置信度和提升度的规则,所以对其进行排序来寻找感兴趣的规则。

    # sorting grocery rules by lift
    inspect(sort(groceryrules, by = "lift")[1:5])
    

    lift排序top5

    ②提取关联规则的子集
    假如只对某种商品和其他商品关联感兴趣,,如浆果berries,则可以提取包含berries的所有规则。

    # finding subsets of rules containing any berry items
    berryrules <- subset(groceryrules, items %in% "berries")
    inspect(berryrules)
    

    image.png

    ③将关联规则保存到文件或数据框中
    转化数据框使用as函数。

    # writing the rules to a CSV file
    write(groceryrules, file = "groceryrules.csv",
          sep = ",", quote = TRUE, row.names = FALSE)
    
    # converting the rule set to a data frame
    groceryrules_df <- as(groceryrules, "data.frame") 
    str(groceryrules_df)
    

    image.png


    机器学习与R语言系列推文汇总:
    【机器学习与R语言】1-机器学习简介
    【机器学习与R语言】2-K近邻(kNN)
    【机器学习与R语言】3-朴素贝叶斯(NB)
    【机器学习与R语言】4-决策树
    【机器学习与R语言】5-规则学习
    【机器学习与R语言】6-线性回归
    【机器学习与R语言】7-回归树和模型树
    【机器学习与R语言】8-神经网络
    【机器学习与R语言】9-支持向量机
    【机器学习与R语言】10-关联规则
    【机器学习与R语言】11-Kmeans聚类
    【机器学习与R语言】12-如何评估模型的性能?
    【机器学习与R语言】13-如何提高模型的性能?

  • 相关阅读:
    hibernate对应关系详解(转)
    mybatis genertor两种使用方式(文件+项目)
    YII2 union 不同数据结构时 解决方案
    Yii2 分表后 使用 union all 分页实现代码
    Beyond Compare 4.2.10手动破解
    Xshell 6+Xftp 6官方下载免费版
    Navicat Premium
    yii2的Console定时任务创建
    内嵌多个youtube视频并展现该频道所有视频列表
    video.js 动态获取URL 并播放youtube视频
  • 原文地址:https://www.cnblogs.com/jessepeng/p/13644841.html
Copyright © 2011-2022 走看看