机器学习算法应用——关联规则分析(4-4)

关联规则分析(4-4)

关联规则分析(Association Rule Mining)是一种基于频繁项集的分析方法,它以最常出现在一起的元素之间的关系作为分析对象,主要用于发掘大数据中隐藏的关联规则,是数据挖掘技术的重要组成部分。关联规则分析的应用非常广泛,包括但不限于以下几个方面:

  1. 发现物品之间的关联性:通过发现某些物品经常出现在一起,从而发现两个物品之间的关联性。例如,在购买计算机的顾客中,有20%的人也同时购买了打印机。
  2. 预测消费者行为:当消费者购买某一物品时,可以利用关联规则分析来预测他们会购买哪些其他物品。例如,当顾客购买了牛奶和面包时,系统可以推荐给他们黄油或果酱。
  3. 电商交叉销售:在电商平台上,关联规则可以用于交叉销售。通过分析用户的购买历史,找出不同商品之间的关联关系,可以为用户推荐其他相关商品。例如,当用户购买了一台电视机时,可以推荐给他们音响或电视机支架。
  4. 商品陈列优化:关联规则可以用于优化商品陈列。通过分析商品销售数据,挖掘出不同商品之间的关联关系,可以调整商品陈列的位置。例如,如果某个商品与其他商品之间存在较强的关联关系,可以将它们放在相同的陈列区域,以提高销售额。
  5. 预防保健:关联规则可以用于预防保健。通过分析人群的健康数据,挖掘出不同健康指标之间的关联关系,可以为人们提供个性化的健康建议。例如,如果某个人的体重超标,可以建议他进行减肥并加强运动。

关联规则分析的具体方法包括Apriori算法等。Apriori算法是一种经典的关联分析算法,它通过逐层搜索的方式发现频繁项集。该算法首先扫描数据集,统计每个项的支持度,然后根据最小支持度阈值生成候选项集。接下来,通过连接和剪枝操作,逐渐生成更大的候选项集,直到不能再生成新的频繁项集为止。最后,根据频繁项集生成关联规则,并计算它们的置信度。

需要注意的是,关联分析方法在实际应用中需要注意以下几点:首先,选择合适的支持度和置信度阈值,以过滤掉不重要的规则,提高关联分析的效率和准确性。其次,处理大规模数据集时需要考虑算法的效率,选择合适的关联分析算法以提高计算效率。最后,关联分析结果需要结合业务实际进行解释和应用,在发现了关联规则之后,需要进一步分析规则的意义,结合实际情况进行解释,并制定相应的营销策略或业务决策。

  1. 安装mlxtend

        pip install mlxtend

  1. 数据读取与预处理
# 步骤2:数据读取与预处理
data = {
    'I1': ['西红柿', '排骨', '鸡蛋', '毛巾', '水果刀', '苹果'],
    'I2': ['西红柿', '茄子', '水果刀', '香蕉'],
    'I3': ['鸡蛋', '袜子', '毛巾', '肥皂', '苹果', '水果刀'],
    'I4': ['西红柿', '排骨', '茄子', '毛巾', '水果刀'],
    'I5': ['西红柿', '排骨', '酸奶', '苹果'],
    'I6': ['鸡蛋', '茄子', '酸奶', '肥皂', '苹果', '香蕉'],
    'I7': ['排骨', '鸡蛋', '茄子', '水果刀', '苹果'],
    'I8': ['土豆', '鸡蛋', '袜子', '香蕉', '苹果', '水果刀'],
    'I9': ['西红柿', '排骨', '鞋子', '土豆', '香蕉', '苹果']
}

transactions = list(data.values())
  1. 使用TransactionEncoder将上图中列表转换为下图中所示DataFrame
# 步骤3:使用TransactionEncoder将列表转换为DataFrame
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
print(te_ary)
df = pd.DataFrame(te_ary, columns=te.columns_)
  1. 使用apriori算法挖掘频繁项集(最小支持度为0.3),并输出结果
# 步骤4:使用apriori算法挖掘频繁项集(最小支持度为0.3),并输出结果
frequent_itemsets_apriori = apriori(df, min_support=0.3, use_colnames=True)
print("使用Apriori算法挖掘频繁项集:")
print(frequent_itemsets_apriori.to_string(index=False))

(4)使用FP-growth算法挖掘频繁项集(最小支持度为0.3),并输出结果,与上一问结果进行对比

# 步骤5:使用FP-growth算法挖掘频繁项集(最小支持度为0.3),并输出结果,与上一问结果进行对比
frequent_itemsets_fpgrowth = fpgrowth(df, min_support=0.3, use_colnames=True)
print("\n使用FP-growth算法挖掘频繁项集:")
print(frequent_itemsets_fpgrowth.to_string(index=False))

(5)生成强规则(最小置信度为0.5, 提升度>1),并输出结果

# 步骤6:生成强规则(最小置信度为0.5, 提升度>1),并输出结果
rules = association_rules(frequent_itemsets_apriori, metric="confidence", min_threshold=0.5)
rules = rules[rules['lift'] > 1]
print("\n强规则:")
print(rules.to_string(index=False))

完整代码:

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, fpgrowth, association_rules

# 步骤2:数据读取与预处理
data = {
    'I1': ['西红柿', '排骨', '鸡蛋', '毛巾', '水果刀', '苹果'],
    'I2': ['西红柿', '茄子', '水果刀', '香蕉'],
    'I3': ['鸡蛋', '袜子', '毛巾', '肥皂', '苹果', '水果刀'],
    'I4': ['西红柿', '排骨', '茄子', '毛巾', '水果刀'],
    'I5': ['西红柿', '排骨', '酸奶', '苹果'],
    'I6': ['鸡蛋', '茄子', '酸奶', '肥皂', '苹果', '香蕉'],
    'I7': ['排骨', '鸡蛋', '茄子', '水果刀', '苹果'],
    'I8': ['土豆', '鸡蛋', '袜子', '香蕉', '苹果', '水果刀'],
    'I9': ['西红柿', '排骨', '鞋子', '土豆', '香蕉', '苹果']
}

transactions = list(data.values())

# 步骤3:使用TransactionEncoder将列表转换为DataFrame
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
print(te_ary)
df = pd.DataFrame(te_ary, columns=te.columns_)

# 步骤4:使用apriori算法挖掘频繁项集(最小支持度为0.3),并输出结果
frequent_itemsets_apriori = apriori(df, min_support=0.3, use_colnames=True)
print("使用Apriori算法挖掘频繁项集:")
print(frequent_itemsets_apriori.to_string(index=False))

# 步骤5:使用FP-growth算法挖掘频繁项集(最小支持度为0.3),并输出结果,与上一问结果进行对比
frequent_itemsets_fpgrowth = fpgrowth(df, min_support=0.3, use_colnames=True)
print("\n使用FP-growth算法挖掘频繁项集:")
print(frequent_itemsets_fpgrowth.to_string(index=False))

# 步骤6:生成强规则(最小置信度为0.5, 提升度>1),并输出结果
rules = association_rules(frequent_itemsets_apriori, metric="confidence", min_threshold=0.5)
rules = rules[rules['lift'] > 1]
print("\n强规则:")
print(rules.to_string(index=False))

 

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张謹礧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值