赞
踩
FP-growth(Frequent Pattern Growth
)是一种用于在数据库中高效地发现频繁项集的算法。它采用了一种叫做FP树(Frequent Pattern Tree
)的树结构来压缩数据集,这棵树只记录了项集的频繁模式。然后,算法使用一种分而治之的策略,将大数据库分解为条件数据库(每个都是一棵FP树),并在这些较小的数据库上递归地发现频繁项集。这种方法大大减少了需要考虑的组合数量,并避免了Apriori
算法中的重复数据扫描,因此在处理大规模数据集时更加高效。
FP-growth
(频繁模式增长)算法是一种用于挖掘数据集中频繁项集的有效方法。
优点
缺点
FP-growth算法在实际应用中有广泛的用途,主要用于挖掘频繁项集,以便于进一步分析数据中的模式和关联规则。以下是一些FP-growth算法的典型应用场景:
购物篮分析:在零售业中,可以使用FP-growth算法来分析顾客的购物篮,找出经常一起购买的商品。这有助于商家进行产品布局优化、销售策略制定、以及促销活动的设计。
推荐系统:在电商平台、在线视频服务或社交网络服务中,FP-growth算法可用于分析用户的行为模式,从而推荐用户可能感兴趣的商品、视频或内容,提升用户体验和满意度。
欺诈检测:在银行和金融行业,FP-growth算法可以用于分析交易模式,识别出异常交易行为,帮助检测和预防欺诈活动。
生物信息学:在基因数据分析中,FP-growth算法可用于识别常见的基因序列模式或疾病模式,有助于疾病预测和药物研发。
网络安全:通过分析网络流量和用户行为,FP-growth算法可以帮助识别出网络攻击的模式,如DDoS攻击或恶意软件的传播行为,从而提升网络安全防护能力。
制造业:在制造业中,FP-growth算法可以用于分析产品的故障模式和原因,帮助优化生产流程,提高产品质量和生产效率。
文本挖掘和自然语言处理:FP-growth算法可以应用于大规模文本数据,挖掘频繁出现的词汇组合或主题模式,用于文档分类、情感分析等场景。
pip install pandas
pip install numpy
pip install plotly
pip install mlxtend
数据下载链接:https://www.kaggle.com/datasets/devchauhan1/market-basket-optimisationcsv?resource=download
import pandas as pd
dataset = pd.read_csv("Market_Basket_Optimisation.csv")
print(dataset.shape)
dataset.head()
数据集的每一行代表一次交易,每一列对应该交易中的一个商品。如果某个商品在交易中被购买,它会在该行对应的位置上显示商品名称;如果没有被购买,则该位置留空或有占位符。
# 转换Numpy数组类型 import numpy as np transaction = [] for i in range(0, dataset.shape[0]): for j in range(0, dataset.shape[1]): transaction.append(dataset.values[i,j]) transaction = np.array(transaction) print(transaction) # 统计并可视化商品购买频次 import pandas as pd df = pd.DataFrame(transaction, columns=["items"]) df["incident_count"] = 1 indexNames = df[df['items'] == "nan" ].index df.drop(indexNames , inplace=True) # 对商品名称进行分组,计算每种商品的购买总次数,取前5序号 df_table = df.groupby("items").sum().sort_values("incident_count", ascending=False).reset_index() df_table.head(5).style.background_gradient(cmap='Greens')
# 可视化前50个
import plotly.express as px
df_table["all"] = "Top 50 items"
fig = px.treemap(df_table.head(50), path=['all', "items"], values='incident_count',
color=df_table["incident_count"].head(50), hover_data=['items'],
color_continuous_scale='Greens',
)
fig.show()
# 将每笔交易转换为单独的列表,并将它们收集到Numpy数组中
transaction = []
for i in range(dataset.shape[0]):
transaction.append([str(dataset.values[i,j]) for j in range(dataset.shape[1])])
transaction = np.array(transaction)
from mlxtend.preprocessing import TransactionEncoder
# 初始化TransactionEncoder并将数据转换为布尔值
te = TransactionEncoder()
te_ary = te.fit(transaction).transform(transaction)
dataset = pd.DataFrame(te_ary, columns=te.columns_)
dataset.head()
first30 = df_table["items"].head(30).values
dataset = dataset.loc[:,first30]
print(dataset.shape)
# 运行FP-growth算法
from mlxtend.frequent_patterns import fpgrowth
res = fpgrowth(dataset, min_support=0.05, use_colnames=True)
res.head(10)
from mlxtend.frequent_patterns import association_rules
res = association_rules(res, metric="lift", min_threshold=1)
# 根据置信度对值进行排序
res.sort_values("confidence", ascending=False)
这是分析的一个关联规则结果,按照置信度排序(测试数据,仅作参考),当购买了“意大利面(spaghetti
)”时,顾客也有很大概率购买“矿泉水(mineral water
)”。
具体来说,这个规则的置信度是34.3032%,意味着大约三分之一购买意大利面的顾客也会购买矿泉水。提升度为1.439698,表示购买意大利面的顾客购买矿泉水的概率是没有购买意大利面的顾客的1.44倍。
这就是FP-growth
,玩的就是关联规则(有点像预测上下游调控PPI网络),这是一种用于高效挖掘大型数据库中频繁项集的算法。通过压缩数据集,减少了扫描次数,不生成候选项集,提高了计算效率。
此外还有传统的Apriori
,以及优秀同类ECLAT
,下期预告~
这个系列拖更好久了,夯实基础,往期的笔记:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。