数据挖掘——关联算法

一、概念

关联(Association)

关联就是把两个或两个以上在意义上有密切联系的项组合在一起。

关联规则(AR,Assocaition Rules)

用于从大量数据中挖掘出有价值的数据项之间的相关关系。(购物篮分析)

协同过滤(CF,Collaborative Filtering

协同过滤常常被用于分辨某位特定顾客可能感兴趣的东西,这些结论来自于对其他相似顾客对哪些产品感兴趣的分析。(推荐系统)

二、关联规则

1、相关数据指标

两个不相交的非空集合X、Y,如果X -> Y,就说X -> Y是一条关联规则。

强度:支持度(Support):support({X -> Y}) = 集合X与集合Y中的项在一条记录中同时出现的次数 / 数据记录的个数

   自信度(Confidence):confidence({X -> Y})集合X与集合Y中的项在一条记录中同时出现的次数 / 集合X出现的次数

效度:提升度(Lift):度量规则是否可用的指标,描述的是相对于不用规则,使用规则可以提高多少,提升度大于1,规则有效

          lift({X -> Y}) = confidence({X -> Y}) /  support({X -> Y})

2、计算步骤

  • 扫描数据集,统计一级候选集出现的次数
  • 清除不满足条件的候选项集,得到一级项集
  • 从一级项集中国,组合二级候选项集,统计数据集中它们出现的次数
  • 清除不满足条件的候选项集,得到二级项集
  • 从二级项集中,组合三级候选项集,统计数据集中他们出现的次数
  • ……
  • 将得到的项集作为结果返回

大致过程如下:

                   

  

3、 使用python实现关联算法(apriori算法)

!apriori 包不支持DataFrame的数据格式,需要将数据转化为array数组

#导入如下格式的数据

#变换数据格式,然后通过apriori方法进行处理

transform = data.groupby(by=‘交易ID‘).apply(lambda x: list(x.购买商品)).values

result = list(apriori(transform))

输出result并观察,发现如下规律

#该数据格式包含各种项集和所对应的支持度、自信度、提升度
‘‘‘RelationRecord(
items=frozenset({‘可乐‘}), support=0.4,
ordered_statistics=[OrderedStatistic(items_base=frozenset(),
items_add=frozenset({‘可乐‘}), confidence=0.4, lift=1.0)])‘‘‘
#items = items_base + items_add

#遍历result,得到每个项集(X 与 Y ,并得到相对应的支持度、自信度和提升度

supports = []
confidences = []
lifts = []
bases = []
adds = []

for i in result:
    supports.append(i.support)
    confidences.append(i.ordered_statistics[0].confidence)
    lifts.append(i.ordered_statistics[0].lift)
    bases.append(list(i.ordered_statistics[0].items_base))
    adds.append(list(i.ordered_statistics[0].items_add))

#将结果转化为容易处理的数据框
get_result = pd.DataFrame({
        ‘base‘: bases,
        ‘add‘: adds,
        ‘support‘: supports,
        ‘confidence‘: confidences,
        ‘lift‘: lifts})

#得到如下的数据框,其中有不同项集及其对应结果,可通过关联规则得到符合的关联项

三、 协同过滤

1、 相关数据指标

协同过滤简单来说就是利用某兴趣相投、拥有共同经验的群体的喜好来推荐用户感兴趣的信息。

协同过滤主要收集每个用户对使用过的物品的评价(打分或星级等)。

通过用户对各种商品评分的高低,得到用户的喜好并,根据相似喜好的用户历史数据,从而推荐一些信息

优点:

  • 能够过滤机器难以自动分析的信息,如艺术品、音乐等
  • 共用其他人的讲演,避免了内容分析的不完全或不精确,能够基于一些复杂的,难以表述的概念(如个人品味)进行过滤
  • 有推荐新信息的能力,可以发现用户潜在的但自己尚未发现的兴趣偏好
  • 推荐个性化、自动化程度高,能够有效的利用其他相似用户的回馈信息,加快个性化学习的速度

缺点:

  • 新用户在开始时推荐质量较差
  • 新项目的推荐难度大,因为推荐质量取决于历史数据集

2、 计算步骤

  • 收集用户信息,必须数据基础:用户、商品、评分
  • 根据以上数据得到用户评分向量和商品评分向量(用户评分尽量使用标准化评分,消除用户因打分习惯而导致的差异)
  • 根据用户评分向量计算距离(如欧式距离)
  • 计算用户相似度
  • 两种方法计算相似邻居
    • A)固定数量的邻居(K-neighborhoods)
    • 不考虑邻居的距离差异,只取当前点最近的 K 个点作为其邻居
    • B)基于相似度门槛的邻居(Threshold-based neighborhoods)
    • 以当前点为中心,距离为 K 的区域内的所有点作为当前点的邻居

3、 使用python实现协同过滤算法

#导入如下数据,含用户ID,商品ID,用户评分

#通过交叉表及变换形式得到用户评分矩阵

userrate = data.pivot_table(index=‘UserID‘,
                            columns=‘ItemID‘,
                            aggfunc=sum,
                            fill_value=0)

#将透视表转为数据框,优化列名
userrate.columns = userrate.columns.droplevel(0)
del userrate.columns.name

#计算每个用户之间的距离和相似度

#计算每个用户之间的距离
dist = pd.DataFrame(euclidean_distances(userrate))
dist.index = userrate.index
dist.columns = userrate.index

#计算每个用户之间的相似度
sim = 1/(1+dist)

#设置参数,获取相似用户

#设置邻居个数为3  用户ID为1
k = 3
userId = 1

#获取3个相似用户并得到其相似度
simUserIds = sim.sort_values(userId, ascending=False)[userId].index[1:k+1]
simUser = sim.ix[simUserIds, userId]

#根据相似用户得到商品的推荐排序

#根据相似用户,计算出每个物品的评分
score = pd.DataFrame(np.dot(simUser,  userrate.ix[simUserIds]))

#对结果排序,得到最终的结果
result = userrate.columns[score.sort_values(0, ascending=False).index.values]

原文地址:https://www.cnblogs.com/rix-yb/p/9873983.html

时间: 2024-10-12 20:07:26

数据挖掘——关联算法的相关文章

数据挖掘经典算法——先验算法

算法描述 先验算法是实现频繁项挖掘的一种经典算法,利用关联式规则不断扩展频繁项子集以获得全部的频繁项集合.解释一下关联式规则,所谓关联式是指在大量的数据中找出的项与项之间的关系.例如消费者购买了产品A,一般都会购买产品B,这就是一条关联式. 先验算法被设计用来处理包含事务的数据库,这里的每一个事务都被当成是一组项集,给定一个阈值C,我们需要找出至少出现C次的事务子集(即子项).这边这个C值就是最小支持度,规定了一个项集出现多少次才能被认为是一个频繁项. 先验算法的核心思想基于以下一个事实:一个项

数据挖掘各种算法

作者:JLQing 数据挖掘-关联分析频繁模式挖掘Apriori.FP-Growth及Eclat算法的JAVA及C++实现: 网址:http://blog.csdn.net/yangliuy/article/details/7494983 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上) http://blog.csdn.net/yangliuy/article/details/7400984 数据挖掘-基于贝叶斯算法及KNN算法的newsgrou

数据挖掘各种算法JAVA的实现方法

数据挖掘-关联分析频繁模式挖掘Apriori.FP-Growth及Eclat算法的JAVA及C++实现: 网址:http://blog.csdn.net/yangliuy/article/details/7494983 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上) http://blog.csdn.net/yangliuy/article/details/7400984 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类

数据挖掘经典算法——最大期望算法

算法定义 最大期望算法(Exception Maximization Algorithm,后文简称EM算法)是一种启发式的迭代算法,用于实现用样本对含有隐变量的模型的参数做极大似然估计.已知的概率模型内部存在隐含的变量,导致了不能直接用极大似然法来估计参数,EM算法就是通过迭代逼近的方式用实际的值带入求解模型内部参数的算法. 算法描述 算法的形式如下: 随机对参数赋予初值: While(求解参数不稳定){ E步骤:求在当前参数值和样本下的期望函数Q: M步骤:利用期望函数重新计算模型中新的估计值

《BI那点儿事》数据挖掘各类算法——准确性验证

准确性验证示例1:——基于三国志11数据库 数据准备: 挖掘模型:依次为:Naive Bayes 算法.聚类分析算法.决策树算法.神经网络算法.逻辑回归算法.关联算法提升图: 依次排名为: 1. 神经网络算法(92.69% 0.99)2. 逻辑回归算法(92.39% 0.99)3. 决策树算法(91.19% 0.98)4. 关联算法(90.60% 0.98)5. 聚类分析算法(89.25% 0.96)6. Naive Bayes 算法(87.61 0.96) Naive Bayes算法——分类矩

大数据之路【第十四篇】:数据挖掘--推荐算法(Mahout工具)

数据挖掘---推荐算法(Mahout工具) 一.简介 Apache顶级项目(2010.4) Hadoop上的开源机器学习库 可伸缩扩展的 Java库 推荐引擎(协同过滤).聚类和分类 二.机器学习介绍 通常问题都归为这几类问题 分类问题 回归问题 聚类问题 推荐问题 三.安装方法 3.1 下载Mahout wget http://archive.apache.org/dist/mahout/0.9/mahout-distribution-0.9.tar.gz 3.2 解压 tar -zxvf m

关联算法

一.概念   关联算法常用于购物篮分析:找到正向.强关联的商品集合,用来优化货架商品摆放和捆绑销售. 关联算法需要明确:频繁项集(A,B),A->B和B->A的关联方向(正.负)与关联程度(强.弱). 频繁项集:出现次数不小于设定阀值的商品集合 电商常用单品推荐单品,称为频繁2项集,形如(A,B). 关联算法重要定理:频繁项集的所有非空子集也都必须是频繁的. 比如(A,B,C)是频繁项集,那(A,B)肯定也是频繁项集.如果(A,B)不是频繁项集,那(A,B,C)肯定也不是频繁项集. 支持度(S

数据挖掘-关联分析 Apriori算法和FP-growth 算法

?1.关联分析概念 关联分析是从大量数据中发现项集之间有趣的关联和相关联系. ? ?定义:1.事务:每一条交易称为一个事务,如上图包含5个事务.2.项:交易的每一个物品称为一个项,例如豆奶,啤酒等. 3.项集:包含零个或多个项的集合叫做项集,例如{尿布,啤酒}.4.k?项集:包含k个项的项集叫做k-项集,例如 {豆奶,橙汁}叫做2-项集.5.支持度计数:一个项集出现在几个事务当中,它的支持度计数就是几.例如{尿布, 啤酒}出现在事务002.003和005中,所以           它的支持度计

Apriori 关联算法学习

1. 挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后继(consequent或right-hand-side, RHS) 1.2   如何量化关联规则 关联规则挖掘的一个典型例子便是购物车分析.通过关联规则挖掘能够发现顾客放入购物车中的不同商品之间的关联,分析顾客的消费习惯.这种关联规则的方向能够帮助卖家了解哪些商品被顾客频繁购买,