目录
3)使用python简单的实现Apriori算法进行关联分析
4、感谢你阅览至此,相信你已经对关联分析和生成决策树有了一定的了解,在当今数据爆炸的时代,合理的进行大数据分析和数据挖掘,有利于筛选出我们需要的信息。如果觉得不错的话,求个三连!!!
1、下载SPSS 18
可以选择官网下载SPSS官网,当然需要破解直装版可以三连私聊我哦!
2、数据导入
数据集下载:数据集点这 ,提取码:pemu
3、使用SPSS进行关联分析
1)关联分析
步骤:
- 打开并查看数据文件。利用“变量文件”节点将“BASKETS1n”添加节点中。然后使用“输出”选项卡下的“表”查看数据,如图所示。这里的数据是某商场中的购买记录,共18个字段,1000条记录,在后面的列中,值“T”表示已购买该商品,值“F”表示没有购买该商品。
- 确定关联分析字段。在这里中,需要对购买商品之间进行关联分析,即确定客户购 买商品之间是否存在关联性,也就是说客户在购买一种商品时,购买另一种商品的 概率是多少。所以,在这里,将选择记录中能够体现是否购买某商品的字段进行关 联分析,其中有fruitveg,freshmeat,dairy,cannedveg,cannedmeat,frozenmeal,beer,wine,softdrink,fish,confectionery,共11个字段。
- 读入分析字段的类型。在工作区生成“类型”节点,并双击编辑,将上一步骤选出的11个字段的角色设定为“任意”,其他字段的角色设定为“无”,如下图。
- 添加模型节点。分别在“类型”之后添加“Apriori”模型节点和“Crama”模型节点,如下图所示。其中,“Apriori”模型是基于“最低支持度”和“最小置信度”进行关联性分析。
- 将最小规则支持度参数和最小规则置信度分别设置为10%和80%,运行并查看“Apriori”关联模型结果。运行“Apriori”模型的数据流,在右上侧生成数据模型,右键查看,如下图所示。表中可以看出,客户同时购买frozenmeal、beer、cannedveg的概率很高。因此,商家可以将这三种商品放在相邻的位置,以促进销量。
- 将最小规则支持度参数和最小规则置信度分别设置为10%和80%,运行并查看“Carma”关联模型结果。运行“Carma”模型的数据流,在右上侧生成数据模型,右键查看,如下图所示。同样可以看出,客户同时购买frozenmeal、beer、cannedveg 的概率很高。
- 利用“网络”图进行定性关联分析。选定“类型”节点,双击“图形”选项卡下的“网络”,既可添加“网络节点”。然后,需双击编辑“网络”节点,将步骤五中选择的11个字段选定为分析字段。运行该“网络”节点,则右上区域生成关联模型,查看该关联模型,如下图。从图中表明,两点之间的线越粗,表示两者间相关性越强。同时可以通过调节下面的滑动点,查看相关性。
2)建立决策树
如下图所示:
- 在上一步数据关联的基础上,分析哪些顾客是“健康食品购买者”,即同时购买fruitveg和fish。
- 如何标志健康食品购买者。点击“字段选项”选项卡下的“导出”,与“类型”节点连接,增加一个属性(Healthy)来标识健康食品购买者。编辑“导出”节点,将字段类型设为“标记”,并编辑“fruitveg='T' and fish='T'”,该公式表示消费者同时购买fruitveg和fish这两种商品,如下图所
示。
- 查看增加“Healthy”之后的数据表。利用“表”来查看数据表,如下图,可以看到表中增加了一个“Healthy”字段,描述是否为健康食品购买者。
- 接入一个“类型”节点。在这里,需要重新编辑字段的角色,如下图所示。其中与用户相关的信息字段(除cardid外)角色都设定为“输入”,而“Healthy”变为“输出”,其他的选择“无”。
- 接入C5.0决策树模型。双击“建模”选项卡下的“C5.0”模型,即可以完成添加。如下图
所示
- 运行决策树模型。分别运行“决策树”和“规则集”两种形式,查看两者得到的结果分 如下图所示。两者都分别有不同的表示方式。图中显示哪些类型的顾客是健康食品购买者。
- 其他属性的功能,如下图。“组符号”是指当有多个字段在同一个分支时,将这几个 字段放在一组;“使用 boosting ”是指使用部分数据作为再次生成决策树,最后综合这些决策树来提高决策树的精度;“交互验证”是指一部分数据用来生成决策树,一部分作为测试;“简单”是指生成决策树的准确度,但是精确度高的决策树的移植性不高;“专家”下的“修剪严重性”是指修剪的程度。
- 添加“分析”节点作为输出,点击运行,最后运行“分析”节点,在下图中可以看出,决策树分支
的正确率为93.8%。
- 添加“输出”选项卡下的“矩阵”节点。如下图所示。
- 运行后结果如下:
3)使用python简单的实现Apriori算法进行关联分析
首先介绍一下Apriori算法:
Apriori 算法的原理
1.频繁项集:Apriori 算法的目标之一是找到在给定数据集中频繁出现的项集。频繁项集是指其出现的支持度(support)大于设定的最小支持度阈值。
2.候选集生成:Apriori 算法通过逐层扩展频繁项集来生成候选项集。在每一轮迭代中,它生成包含更多商品的候选项集,并检查这些候选项集是否满足最小支持度。如果满足,候选项集就成为频繁项集。
3.剪枝(Pruning):Apriori 算法的一个重要特点是它使用了“剪枝”策略。即在生成候选项集时,如果某个项集的某个子集不满足最小支持度,那么该项集的超集也不可能满足最小支持度,因此可以直接剪去这些不可能的项集。这样可以大大减少搜索空间,提高算法的效率。
4.最小支持度 (min_support):在生成频繁项集时,Apriori 算法会对每个项集计算其支持度。支持度是指该项集出现在数据库中的频率。算法会根据设定的最小支持度阈值,筛选出频繁项集。
5.生成关联规则:基于频繁项集,Apriori 算法可以生成关联规则。关联规则通常是以 {A} → {B} 的形式表示,意味着如果商品 A 被购买,则商品 B 也有较高的购买概率。生成规则时,通常会考虑两种度量:
6.置信度 (confidence):置信度是指在包含 A 的交易中,同时包含 B 的比例。即 P(B|A)。
提升度 (lift):提升度衡量规则 A → B 的有效性
提升度大于 1 表示规则 A → B 有较高的预测能力,提升度越大,规则越有意义。
算法流程
初始化:从单个项集开始,计算所有项集的支持度,并筛选出支持度大于或等于最小支持度的频繁项集。
扩展项集:基于当前的频繁项集生成候选项集,逐步扩大项集的大小。
剪枝:移除那些不满足支持度要求的候选项集。
生成关联规则:通过频繁项集生成满足最小置信度阈值的关联规则。
筛选规则:根据提升度等度量,筛选出具有实际意义的规则。
简单实现的代码如下:
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
# 1. 加载数据
data = pd.read_csv('BASKETS1n')
# 2. 仅选择商品类别列
# 商品列从 'fruitveg' 到 'confectionery'
items_df = data[['fruitveg', 'freshmeat', 'dairy', 'cannedveg', 'cannedmeat',
'frozenmeal', 'beer', 'wine', 'softdrink', 'fish', 'confectionery']]
# 3. 将 "T" 和 "F" 转换为布尔值
items_df = items_df.replace({'T': True, 'F': False})
# 4. 使用 Apriori 算法生成频繁项集,设定最小支持度为 0.1
frequent_itemsets = apriori(items_df, min_support=0.10, use_colnames=True)
# 5. 基于频繁项集生成关联规则,设定最小置信度为 0.8
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.8, num_itemsets=5)
# 6. 筛选提升度大于 1 的规则
rules = rules[rules['lift'] > 1]
# 7. 重命名列以便于查看,并选择展示的列
rules.rename(columns={'antecedents': 'from', 'consequents': 'to', 'support': 'sup', 'confidence': 'conf'}, inplace=True)
rules = rules[['from', 'to', 'sup', 'conf', 'lift']]
# 8. 打印结果
print(rules)
注:此实现过程,不包含多次进行候选集筛选,属于简单模拟实现。输出结果如下:
注:该显示的支持度为规则支持度,和SPSS中效果一致
4)C5.0算法生成决策树简单实现
以下使用R语言加载C5.0相关算法包,来实现
# 安装并加载C50包
install.packages("C50", repos = "https://cloud.r-project.org/")
library(C50)
# 加载数据
data <- read.csv("BASKETS1n") # 替换为你的数据集文件路径
# 检查数据框的列名和前几行数据
colnames(data)
head(data)
# 根据 fruitveg 和 fish 列的布尔值定义 Healthy 列
data$Healthy <- ifelse(data$fruitveg == TRUE & data$fish == TRUE, 'T', 'F')
data$Healthy <- as.factor(data$Healthy) # 确保 Healthy 列是因子类型
# 查看 Healthy 列的分布
table(data$Healthy)
# 处理缺失值(如果有的话)
data <- data[!is.na(data$Healthy), ]
# 构建 C5.0 模型,目标变量是 Healthy,输入特征为 value, pmethod, sex, homeown, income, age
model <- C5.0(Healthy ~ value + pmethod + sex + homeown + income + age, data = data)
# 查看模型摘要
summary(model)
# 将图形保存为 PNG 文件
png("decision_tree.png")
plot(model)
dev.off() # 关闭图形设备并保存文件
运行结果如下: