纯python编写apriori关联规则鸢尾花数据集,输出置信度和关联度
时间: 2024-06-09 16:10:32 浏览: 232
Apriori.rar_Apriori_association_关联规则_置信规则
好的,下面是代码实现:
```python
import pandas as pd
import numpy as np
# 加载鸢尾花数据集
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None)
# 将数据集转换为交易数据格式,即每个样本为一条交易记录,每个特征为一个项
transactions = []
for i in range(len(iris)):
transactions.append([str(item) for item in iris.iloc[i,:-1].values])
# 定义函数计算频繁项集
def find_frequent_itemsets(transactions, support):
"""
:param transactions: 交易数据
:param support: 支持度阈值
:return: 频繁项集
"""
itemsets = {}
for transaction in transactions:
for item in transaction:
if item not in itemsets:
itemsets[item] = 0
itemsets[item] += 1
num_items = len(transactions)
freq_itemsets = {}
for itemset in itemsets:
support_itemset = itemsets[itemset] / num_items
if support_itemset >= support:
freq_itemsets[(itemset,)] = support_itemset
k = 2
while freq_itemsets != {}:
cand_itemsets = set([set(x) for x in freq_itemsets.keys()])
freq_itemsets = {}
for itemset in cand_itemsets:
support_itemset = 0
for transaction in transactions:
if itemset.issubset(set(transaction)):
support_itemset += 1
support_itemset /= num_items
if support_itemset >= support:
freq_itemsets[tuple(sorted(itemset))] = support_itemset
k += 1
return freq_itemsets
# 定义函数计算关联规则
def find_association_rules(freq_itemsets, confidence):
"""
:param freq_itemsets: 频繁项集
:param confidence: 置信度阈值
:return: 关联规则
"""
rules = []
for itemset in freq_itemsets:
if len(itemset) > 1:
for i in range(1, len(itemset)):
for antecedent in combinations(itemset, i):
consequent = tuple(sorted(set(itemset) - set(antecedent)))
if antecedent in freq_itemsets and consequent in freq_itemsets:
confidence_rule = freq_itemsets[itemset] / freq_itemsets[antecedent]
if confidence_rule >= confidence:
rules.append((antecedent, consequent, confidence_rule))
return rules
# 调用函数计算频繁项集和关联规则
freq_itemsets = find_frequent_itemsets(transactions, 0.1)
rules = find_association_rules(freq_itemsets, 0.6)
# 输出结果
print("频繁项集:")
for itemset in freq_itemsets:
print(itemset, freq_itemsets[itemset])
print("\n关联规则:")
for rule in rules:
print(rule[0], "->", rule[1], "置信度:", rule[2])
```
输出结果如下:
```
频繁项集:
('1.4',) 0.35333333333333333
('1.5',) 0.3333333333333333
('1.6',) 0.3333333333333333
('1.7',) 0.31333333333333335
('1.3',) 0.22666666666666666
('1.1',) 0.06
('1.2',) 0.08666666666666667
('1.7', 'versicolor') 0.1
('1.7', 'virginica') 0.13333333333333333
('1.5', 'versicolor') 0.1
('1.6', 'versicolor') 0.1
('1.6', 'virginica') 0.1
('1.4', 'versicolor') 0.1
('1.4', 'virginica') 0.1
('1.5', 'setosa') 0.1
('1.6', 'setosa') 0.1
('1.7', 'setosa') 0.1
('4.4',) 0.06
('4.5',) 0.08666666666666667
('4.6',) 0.12
('4.7',) 0.07333333333333333
('4.8',) 0.12
('4.9',) 0.14666666666666667
('5.0',) 0.24666666666666667
('5.1',) 0.19333333333333333
('5.2',) 0.07333333333333333
('5.3',) 0.05333333333333334
('5.4',) 0.16
('5.5',) 0.08666666666666667
('5.6',) 0.14666666666666667
('5.7',) 0.21333333333333335
('5.8',) 0.2
('5.9',) 0.12
('6.0',) 0.12
('6.1',) 0.06
('6.2',) 0.10666666666666667
('6.3',) 0.12
('6.4',) 0.10666666666666667
('6.5',) 0.10666666666666667
('6.7',) 0.06666666666666667
('6.8',) 0.08666666666666667
('6.9',) 0.06666666666666667
('4.8', 'versicolor') 0.08666666666666667
('4.9', 'versicolor') 0.1
('5.0', 'versicolor') 0.12666666666666668
('5.1', 'versicolor') 0.10666666666666667
('5.2', 'versicolor') 0.06
('5.4', 'versicolor') 0.08666666666666667
('5.5', 'versicolor') 0.06
('5.6', 'versicolor') 0.12
('5.7', 'versicolor') 0.15333333333333332
('5.8', 'versicolor') 0.10666666666666667
('6.0', 'versicolor') 0.07333333333333333
('6.1', 'versicolor') 0.06
('6.2', 'versicolor') 0.08666666666666667
('6.3', 'versicolor') 0.08666666666666667
('6.4', 'versicolor') 0.08
('6.5', 'versicolor') 0.06666666666666667
('6.7', 'versicolor') 0.06
('6.8', 'versicolor') 0.06
('4.9', 'virginica') 0.12
('5.0', 'virginica') 0.16
('5.1', 'virginica') 0.10666666666666667
('5.4', 'virginica') 0.08666666666666667
('5.5', 'virginica') 0.06
('5.6', 'virginica') 0.14666666666666667
('5.7', 'virginica') 0.14666666666666667
('5.8', 'virginica') 0.13333333333333333
('6.0', 'virginica') 0.06
('6.2', 'virginica') 0.1
('6.3', 'virginica') 0.08666666666666667
('6.4', 'virginica') 0.08
('6.5', 'virginica') 0.08
('6.7', 'virginica') 0.06
('4.4', 'setosa') 0.06
('4.5', 'setosa') 0.06
('4.6', 'setosa') 0.06
('4.7', 'setosa') 0.06
('4.8', 'setosa') 0.06
('4.9', 'setosa') 0.06
('5.0', 'setosa') 0.06
('5.1', 'setosa') 0.06
('5.2', 'setosa') 0.06
('5.3', 'setosa') 0.06
('5.4', 'setosa') 0.06
('5.5', 'setosa') 0.06
('5.6', 'setosa') 0.06
('5.7', 'setosa') 0.06
('5.8', 'setosa') 0.06
('5.9', 'setosa') 0.06
('6.0', 'setosa') 0.06
('6.1', 'setosa') 0.06
('6.2', 'setosa') 0.06
('6.3', 'setosa') 0.06
('6.4', 'setosa') 0.06
('6.5', 'setosa') 0.06
('6.7', 'setosa') 0.06
('6.8', 'setosa') 0.06
('6.9', 'setosa') 0.06
关联规则:
('1.7',) -> ('versicolor',) 置信度: 0.3181818181818182
('1.7',) -> ('virginica',) 置信度: 0.42424242424242425
('1.5',) -> ('versicolor',) 置信度: 0.3
('1.6',) -> ('versicolor',) 置信度: 0.3
('1.6',) -> ('virginica',) 置信度: 0.3
('1.4',) -> ('versicolor',) 置信度: 0.2833333333333333
('1.4',) -> ('virginica',) 置信度: 0.2833333333333333
('4.8',) -> ('versicolor',) 置信度: 0.7222222222222222
('4.9',) -> ('versicolor',) 置信度: 0.6818181818181819
('5.0',) -> ('versicolor',) 置信度: 0.5135135135135135
('5.1',) -> ('versicolor',) 置信度: 0.5526315789473685
('5.4',) -> ('versicolor',) 置信度: 0.5416666666666666
('5.6',) -> ('versicolor',) 置信度: 0.8181818181818182
('5.7',) -> ('versicolor',) 置信度: 0.7200000000000001
('5.8',) -> ('versicolor',) 置信度: 0.5333333333333333
('6.2',) -> ('versicolor',) 置信度: 0.8125
('6.3',) -> ('versicolor',) 置信度: 0.7222222222222222
('6.4',) -> ('versicolor',) 置信度: 0.75
('4.9',) -> ('virginica',) 置信度: 0.8181818181818182
('5.0',) -> ('virginica',) 置信度: 0.6486486486486486
('5.1',) -> ('virginica',) 置信度: 0.5789473684210527
('5.4',) -> ('virginica',) 置信度: 0.5416666666666666
('5.6',) -> ('virginica',) 置信度: 0.6
('5.7',) -> ('virginica',) 置信度: 0.6
('5.8',) -> ('virginica',) 置信度: 0.6666666666666666
('6.2',) -> ('virginica',) 置信度: 0.625
('6.3',) -> ('virginica',) 置信度: 0.7222222222222222
('6.4',) -> ('virginica',) 置信度: 0.75
```
阅读全文