精华内容
下载资源
问答
  • mahout关联推荐算法

    2015-04-07 11:55:02
    mahout关联推荐算法的介绍,例如PFPGrowth算法的参数使用介绍以及适用场景
  • 基于Web挖掘的关联推荐算法研究.pdf
  • 电子商务中关联推荐算法的应用研究.pdf
  • 浅析电子商务中关联推荐算法的应用.pdf
  • 基于Web信息挖掘的关联推荐算法研究与实现.pdf
  • 基于景点热度和用户爱好程度的关联推荐算法研究.pdf
  • 基于关联规则的推荐算法

    万次阅读 2019-01-09 17:15:45
    1.1算法简介 基于关联规则的推荐是根据历史数据统计不同规则出现的关系,形如:X->Y,表示X事件发生后,Y事件会有一定概率发生,这个概率是...在关联推荐算法中,最主要的是如何找到最大频繁项,业...

    1.1算法简介

    基于关联规则的推荐是根据历史数据统计不同规则出现的关系,形如:X->Y,表示X事件发生后,Y事件会有一定概率发生,这个概率是通过历史数据统计而来。关联规则的目的在于在一个数据集中找出项之间的关系,也称之为购物篮分析 (market basket analysis)。例如,购买鞋的顾客,有10%的可能也会买袜子,60%的买面包的顾客,也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。

    对于一个规则X->Y,有两个指标对该规则进行衡量。一个是支持度,表示在所有样本数据中,同时包含X和Y样本的占比。另一个是置信度,表示在所有包含X的样本中,包含Y的样本占比。

    在关联推荐算法中,最主要的是如何找到最大频繁项,业界主要的做法有两种,分别为Apriori算法FP树

    关联规则的一般步骤
    找到频繁集;
    在频繁集中通过可信度筛选获得关联规则。

    Apriori算法是生成频繁集的一种算法。Apriori原理有个重要假设,如果某个项集是频繁的,那么它的所有子集势必也是频繁的。如果一个项集是非频繁项集,那么它所对应的超集就全都是非频繁项集。

    传统的Apriori算法的计算量很大,当商品数据量大时基本上效率很低,所以后来有FP-Tree算法优化了该算法。

    在电商平台中,常用的关联规则应用是单品推荐单品,即一般只需要知道频繁2项集即可。而且商品并不是全部平等销售的,组合、搭售、买赠、企业采购等订单都会影响频繁集的生成,若仅用支持度衡量物品之间的关联性,很容易导致出现假性关联。

    在关联规则中,因为支持度表示在历史中A和B同时购买的概率,置信度表示A推荐B的可信程度。由此可以采用提升度=支持度(Support)*置信度(Confidence )的方式来表示A推荐B而A和B同时购买的概率。这样相比于单纯使用支持度更全面,同时避免了支持度中等或置信度中等的关联规则被淘汰。

    但在互联网海量的用户特征中,使用这些算法挖掘频繁集计算复杂度非常高,下面我们介绍一种在业务当中简单实用的关联规则算法。

    1.2业务实践

    同样是以购物篮子为例,业务场景是:根据用户历史购物记录,给用户推荐商品。下面我们介绍如何构建简单的关联规则推荐算法。

    Step1:数据准备

    首先收集用户展示购买记录,并且关联用户在展示时刻的特征数据。设总样本数量为n条,数据格式如下:
    在这里插入图片描述
    表1:初始数据

    其中用户特征可以是用户历史购买的商品ID,也可以是用户属性特征,例如:年龄、性别、居住地等等。

    Step2:特征交叉

    在上表中,对于同一个样本所有特征两两交叉,生成长度为2的特征规则,合并原来的长度为1的特征规则,得到关联规则数据输入表如下:
    在这里插入图片描述
    表2:rule输入数据

    上述表中只用长度为1(原始特征)和2(原始特征两两交叉)的规则作为后面rule的候选集,不做长度为3的规则主要的考虑点是降低规则空间复杂度。

    Step3:生成关联规则

    首先把上表的特征展开,使得一个特征一条记录,如下表:
    在这里插入图片描述
    表3:展开数据

    如何来度量一个规则是否够好?有两个量,置信度(Confidence)和支持度(Support)。假设有如下表的购买记录。
    在这里插入图片描述
    将上表整理一下,得到如下的一个2维表
    在这里插入图片描述
    上表中横栏和纵栏的数字表示同时购买这两种商品的交易条数。如购买有Orange的交易数为4,而同时购买Orange和Coke的交易数为2。

    置信度表示了这条规则有多大程度上值得可信。设条件的项的集合为A,结果的集合为B。置信度计算在A中,同时也含有B的概率。即Confidence(A==>B)=P(B|A)。例 如计算"如果Orange则Coke"的置信度。由于在含有Orange的4条交易中,仅有2条交易含有Coke.其置信度为0.5。

    支持度计算在所有的交易集中,既有A又有B的概率。例如在5条记录中,既有Orange又有Coke的记录有2条。则此条规则的支持度为2/5=0.4。现在这条规则可表述为,如果一个顾客购买了Orange,则有50%的可能购买Coke。而这样的情况(即买了Orange会再买Coke)会有40%的可能发生。

    计算每个规则的支持度,置信度,提升度。首先作变量声明:

    f->i 表示具备特征f的用户购买商品i的事件
    sf,i 表示规则f->i的支持度
    cf,i 表示规则f->i的置信度

    sf,i 计算方法为:统计表3中同时满足特征=f,商品=i,用户是否购买=0的记录条数记为notbuyersf,i
    在这里插入图片描述
    规则选择,规则可以通过以下条件进行过滤。

    条件1:大于等于某个值,参考值取20-100。
    条件2:对所有规则的支持度做降序,取75位数为参考值,sf,i大于等于这个值。
    条件3:对所有规则的置信度做降序,取75位数为参考值,cf,i大于等于这个值。

    Step4:给用户推荐商品

    给定一个用户u和一个商品i,通过上述方法生成用户u的特征集合记为F. 我们用该用户特征集合下,所有对i有效特征的均值衡量用户u对该物品的购买可能性p(u,i):
    在这里插入图片描述
    通过上述公式对全库商品求top 10得分的商品推荐给用户。在实际计算当中,并非会进行全库计算,而是采用特征索引技术进行减少大量冗余计算。

    1.3实例代码

    https://github.com/asaini/Apriori

    参考来源
    [1] https://mp.weixin.qq.com/s/9F_BRgnhAxP-nALtBdIZpg
    [2] https://www.cnblogs.com/junyuhuang/p/5572364.html
    [3] https://baijiahao.baidu.com/s?id=1578453192439039733&wfr=spider&for=pc
    [4] https://github.com/asaini/Apriori
    [5] https://blog.csdn.net/wsp_1138886114/article/details/80921905

    展开全文
  • 支持推荐非空率的关联规则推荐算法.pdf
  • 为了提高个性化推荐效率和推荐质量,平衡冷门与热门数据推荐权重,对关联规则的Apriori算法频繁项集挖掘问题进行了重新评估和分析,定义了新的测评指标推荐非空率以及k前项频繁项集关联规则的概念,设计了基于 k 前...
  • 基于关联规则算法推荐方法研究综述.pdf
  • 基于关联规则推荐算法的蔬菜销售系统.pdf
  • 关联规则算法在图书自动推荐系统中的应用.pdf
  • 使用聚类对movielens 1M数据集做预处理,在itemCF基础上改进的基于关联规则学习的推荐算法
  • FP-tree关联规则算法推荐系统中的应用.pdf
  • FP—tree关联规则算法推荐系统中的应用.pdf
  • 基于关联规则的知识推荐算法.pdf
  • 关联规则算法

    2017-06-02 22:14:54
    关联规则中经典算法,apriori算法,能够提取出数据间的强关联规则
  • 关联挖掘算法详解

    2018-11-20 16:59:34
    关联挖掘算法主要包括Apriori和FP-Growth,两者对于不同的场景有着显著地差异性...
  • 一种基于多层关联规则的推荐算法研究.pdf
  • 结合信任度和项目关联的混合推荐算法.pdf
  • 关联分析算法

    千次阅读 2014-10-16 11:14:33
    关联分析算法
    关联分析算法
        关联分析算法的应用非常广泛,它可以在大规模数据集中找出一组有关联的数据。例如:商品分析中,我们可以分析出哪些商品之间有购买的关联,也就是买了其中一个商品之后,顾客就很有可能买另外一个商品。
        频繁项集是指那些经常出现在一起的物品集合,那么如何评价这里的频繁程度呢?我们用支持度和可信度(置信度)来评价。一个项集的支持度指数据集中包含该项集的记录所占的比例,置信度为一个关联规则中这个关联成立的概率。举例来说:

    从图中可以看出:
    • 项集{豆奶}的支持度为4/5,项集{豆奶,尿布}的支持度为3/5,项集{尿布,葡萄酒}的支持度为3/5,项集{尿布}的支持度为4/5, 这样看来一个项集支持度的计算方法一目了然;
    • 关联规则{尿布->葡萄酒}的可信度等于:支持度({尿布,葡萄酒})/支持度({尿布})=3/4。

        但是,当物品的数据量增大的时候,使用上述遍历的方法是可以找到所有的可信度较高的关联规则,但是需要遍历的次数也是非常庞大的。此时出现了Apriori算法。
       需要注意的是,Apriori算法的作用只是发现一个数据集中哪些项集是频繁的。关联分析的目标处理发现频繁项集之外,还需要从它们中间获得关联规则。不过对于关联分析而言,发现频繁项集是主要的工作,之后的关联规则则计算每个规则的可信度即可。
        Apriori算法的原理:如果某个项集是频繁的,那么它的所有子集也是频繁的;如果某个项集不是频繁的,那么它的所有子集也是非频繁的。利用这样的原理,我们便可以大幅度减少计算项集的个数。因为如果能推断出该项集不是频繁的,那么就没有必要计算其支持度和可信度了。《机器学习实战》中给出了一个很好的图示来解释Apriori的作用:

        Apriori算法是发现频繁项集的一种方法。该算法的输入参数有两个:数据集和最小支持度。最小支持度一定要有,因为大于最小支持度的项集才能被认为是频繁项集。
         Apriori算法的过程:首先,我们会生成所有单个物品的项集列表,接着扫描交易记录来查看哪些项集满足最小支持度的要求,哪些不满足最小支持度的集合会被去掉,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足要求的项集。重复该过程直到生成了一个包含所有元素的项集。
        在找到了数据集中所有的频繁项集之后,我们需要从这些频繁项集中发现关联规则。就一个频繁项集中就可以产生好多个规则,所以如何减小需要计算规则的数量也是很重要的。这里我们可以借鉴Apriori的思想,如果某条规则不满足最小可信度的要求,那么该规则的所有子集也不会满足最小可信度的要求。
        比如,在频繁项集{0, 1, 2, 3}中,我们发现0,1,2->3规则不满足最小支持度的要求,那么我们就可以知道1,2->0,3, 01->23, 02->13, 0->123, 1->023, 2->013都不是关联的规则了。这样就减小了很多规则的判断。

        
        




    展开全文
  • Apriori 关联规则算法

    2013-11-12 19:45:41
    Python版本的Apriori关联规则算法
  • 基于关联规则怎样用C++实现推荐算法 1.读取关联规则,将规则存储到一个链表中; 2.读取评分数据,建立评分矩阵和用户喜好事务,其中用户喜好事务存储在一个一维的字符串数组中; 3.将规则链表表中各规则与每个用户...
  • 基于关联规则的商品智能推荐算法.pdf
  • 关联规则算法论文

    2018-07-07 20:21:28
    绍了关联规则挖掘的研究性况,提出了关联规则的分类方法,对一些典型算法进行了分析和秤价,指出传统关系规则衡量标准的 不足,归纳出关联规则的价值衡量方,展望了关联规则挖掘的未来研究方向
  • 基于标签的推荐系统关联算法研究.pdf
  • 推荐算法-关联规则|R

    千次阅读 2017-07-05 21:17:23
    推荐算法-关联规则1.概念关联规则是常见的推荐算法,从发现大量用户行为数据中发现有强关联的规则。 关联规则是一种无监督的机器学习方法,用于知识发现。优点是能够从大量行为数据中挖掘出无法直接感受到的规则,...

    推荐算法-关联规则

    1 概念

    关联规则是常见的推荐算法,从发现大量用户行为数据中发现有强关联的规则。
    

    关联规则是一种无监督的机器学习方法,用于知识发现。

    优点是能够从大量行为数据中挖掘出无法直接感受到的规则,往往能给出意想不到的规则组合。缺点是难以进行模型评估,一般通过行业经验判断结果是否合理。


    关联规则最经典的是购物篮分析,啤酒和尿布就是一个经典案例。运用在早期亚马逊、京东、淘宝等购物推荐场景中,往往表现为”买过这本书的人还买了XXX”,”看了这部电影的人还想看XXX”。其推荐结果包含的个性化信息较低,相对简单粗暴。 (别人都买的我就买哦,我不要面子的啊!)

    2 常用算法

    关联规则中最常用的算法是Apriori,此外还有FP-Growth,Eclat
    
    2.1 基本概念

    假设存在规则{A,B}->{C},则称:


    {A,B}为前项,记为 LHS(Left Hand Side)

    {C}为后项,记为RHS(Right Hand Side)

    • 支持度


      支持度的计算对象为项集,上例中,{A,B},{C}均为项集。项集支持度,即项集在所有交易中出现的交易数。support(A)=n(A)/N

    • 置信度(confidence)


      置信度的对象是规则,{A}->{B}为一条规则,以该规则为例,其置信度为AB同时出现的次数占B出现的次数比例,即confidence(A->B)=N(AB)/N(B)

    • 提升度(lift)


      规则的提升度在于说明项集{A}和项集{B}之间的独立性,Lift=1说明{A}和{B}相互独立,说明两个条件没有任何关联。如果Lift<1,说明两个事件是互斥的。一般认为Lift>3才是有价值的规则。可以这样理解规则的提升度:将两种物品捆绑销售的结果,比分别销售两种物品的结果提升的倍数。support和confidence都很高的时候,不代表规则很好,通常很可能是Lift很高。计算公式如下:
      Lift(A>B)=support(AB)support(A)support(B)
    • 频繁项集


      支持度大于一定阈值的规则成为频繁项集,这个阈值通常由经验给出,或者通过对数据探索得到。

    • 强关联规则


      置信度大于一定阈值的频繁项集为强关联规则,阈值通常也是通过经验给出,或通过数据探索得到,可通过不断的尝试和调整确定合适的阈值。

    2.2 Apriori算法

    Apriori思想的精髓:如果一个项集不是频繁项集,那么它的所有父集都不是频繁项集;一个项集是频繁项集,那么它的子集必然是频繁项集。
    

    2.2.1 算法步骤


    Step1
    1.1找出所有仅包含1个项目的项集,计算支持度
    1.2筛选留下满足最小支持度的项集
    1.3扩展项集个数,步长为1个,计算项集支持度
    1.4 重复1.2
    1.5重复以上步骤,至没有可扩展项集,得到频繁项集


    Step2:
    1.1 获取Step1所有规则的置信度
    1.2对比置信度阈值,超过阈值的即为强关联规则


    2.2.2 实例解析
    原数据如下:
    idItems
    001{A,B,C}
    002{B,C,D}
    003{C,E}
    004{D}
    005{A}

    首先计算最少个数项集的支持度

    ItemSupport
    {A}0.4
    {B}0.4
    {C}0.6
    {D}0.4
    {E}0.2

    设置Min(Support)=0.3,则项集E被剔除,此后也不再考虑包含{E}的任何组合了。
    拓展项集长度,得到如下结果:

    ItemSupport
    {A,B}0.2
    {A,C}0.2
    {B,C}0.4
    {B,D}0.2
    {C,D}0.2

    MIn(Support)=0.3,则剩下{B,C}组合,由于继续拓展只有{B,C,D},而{B,D}和{C,D}组合已经被舍弃。因此不再拓展。

    Conf(B,C)=223

    若其置信度不满足要求,则认为该数据集中没有发现强关联规则。

    2.3 FP-Growth算法

    补充

    2.4 Eclat算法

    补充

    3 Apriori案例

    (1)安装并加载相关的包:

    install.packages("arules");library(arules) #规则生成
    install.packages("arulesViz");library(arulesViz) #数据可视化
    install.packages("RColorBrewer");library(RColorBrewer)  #绘图

    (2)加载数据
    arules包可以读取两种格式的数据
    A.同一个交易的商品在同一行,以某种分隔符分隔(实际数据文件中不含ID列)

    IDItemset
    1A,B,C
    2B,C

    读取语句

    data=read.transactions("F:/data.txt",format="basket",sep=",")

    B.以ID标识,一个商品一行

    IDItem
    1A
    1B
    1C
    2B
    2C

    读取语句

    data<-read.transactions("F:/data/data.txt",format="single",cols=c("id","item"),sep=",") #cols是必须的

    本文案例使用的数据是arules包自带的交易数据集Groceries

    data(Groceries) #获取数据

    了解数据情况可以使用以下代码:

    summary(Groceries) #数据概况
    inspect(Groceries)[1:6,] #打印数据前6行,注意,head()在这里不能打印数据

    这里写图片描述
    输出结果可以看到数据集有多少交易记录,涵盖了多少种商品;购买次数最多的是哪些商品;单笔交易购买的商品个数分布;数据标签(这里label是关联规则中的item,level1,level2是商品标签)。
    使用arules包可以简单计算出关联规则结果,也可以通过基础变量的计算得到关联规则。

    (3)频繁项集生成
    A.基于概念计算

    itemsize<-size(Groceries)#得到唯一id内购买的item个数
    itemF<-itemFrequency(Groceries)#得到每个item的支持度
    itemCnt<-(itemF/sum(itemF))/sum(itemsize)#得到item出现次数
    itemFrequencyPlot(Groceries,suppory=0.1) #按照支持度直观观测item分布

    上述计算仅能简单计算和观测单个item的支持度,通过apriori函数能够根据阈值得到关联规则

    B.使用apriori函数

    rules<-apriori(Groceries,parameter=list(supp=0.006,conf=0.25,minlen=2))


    参数解读:
    apriori(data,parameter,appearance,control):
    *data是经过处理,读取为transactions的数据
    *parameter指定为一个list,可设定参数包括,其中,support设定了最小支持度阈值,confidence设定了最小置信度阈值,minlen表示LHS+RHS的最小项目个数,maxlen则是最多个数,target=“rules”为默认值。
    minlen=1>Aminlen=2
    详细用法使用help(apriori)可得

    rules结果,可以看到满足条件的规则数,supp、conf、lift分布,项集个数分布等信息

    > summary(rules)
    set of 463 rules
    
    rule length distribution (lhs + rhs):sizes
      2   3   4 
    150 297  16 
    
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      2.000   2.000   3.000   2.711   3.000   4.000 
    
    summary of quality measures:
        support           confidence          lift       
     Min.   :0.006101   Min.   :0.2500   Min.   :0.9932  
     1st Qu.:0.007117   1st Qu.:0.2971   1st Qu.:1.6229  
     Median :0.008744   Median :0.3554   Median :1.9332  
     Mean   :0.011539   Mean   :0.3786   Mean   :2.0351  
     3rd Qu.:0.012303   3rd Qu.:0.4495   3rd Qu.:2.3565  
     Max.   :0.074835   Max.   :0.6600   Max.   :3.9565  
    
    mining info:
          data ntransactions support confidence
     Groceries          9835   0.006       0.25

    (4)规则结果探索

    查看规则、排序

    inspect(s_rules[1:6])#查看具体的规则
    s_rules<-sort(rules,by="lift") #依据lift排序
    s_rules<-sort(rules,by="support")  #依据support排序
    s_rules<-sort(rules,by="confidence") #依据confidence排序

    rulesS4head()

    实际运用中,通常是有针对性、直接的的需求,比如想看一些物品有没有存在有关的关联规则,或者某些物品直接是否存在关联,可以通过对rules进行筛选

    sample<-subset(rules,item %in% c("fuiit"))
    sample<-subset(rules,item %in% c("fuiit") & lift>3)


    %in% :精确匹配 item %in% c(“a”,”b”)表示,item=”a” or item =”b”
    %pin%: 部分匹配 item %pin% c(“a”,”b”)表示,item like “a” or item like “b”
    %ain%:完全匹配:item %ain% c(“a”,”b”)表示,item =”a” and item = “b”
    同时可以使用条件运算符(&,|,!)对support、confidence、lift进行过滤

    使用subset筛选规则,是同时对LHS和RHS进行检索,如需要针对LHS或RHS筛选,可使用下列语句

    > rules_log=subset(rules,lhs %in% "yogurt") #针对LHS筛选,得到的是逻辑变量
    > rules_log=subset(rules,rhs %in% "yogurt") #针对RHS筛选
    

    (5)规则可视化
    根据支持度、置信度、提升度查看数据分布,可直观感知生成规则的分布,可调整阈值

    ##需加载扩展包arulesViz
    plot(rules) #直接绘制散点图,默认conf、supp为纵轴横轴,lift为颜色深浅
    plot(rules,measure=c("support","lift"),shading="conf")#个性化设置


    参数解读
    *measure 标出了横轴和纵轴基于的变量
    *shading代表点的颜色深浅基于的变量

    这里写图片描述


    从散点图看,得到的规则聚集在support<0.015,置信度处于(0.45-0.55),lift处于(1.8,2.3)的区域上。受lift极值和support极值的影响,规则的散点分布并不十分明显,可以仅聚集部分规则的散点图

    #通过subset筛选规则
    plot(subset(rules,support<0.02 & lift<3),measure=c("support","lift"),shading="conf")

    这里写图片描述

    筛选了support<0.02其lift<3的规则,并使用散点图展示

    plot(rules, shading = "order") #颜色使用项集个数区分

    这里写图片描述

    其他可视化形式还有:

    #基于分组矩阵,对规则进行聚类
    plot(rules, method = "grouped")

    这里写图片描述
    个人认为,可理解性较差,不便解读,修改method参数(arulesViz.plot),可以得到更多展现方式。

    4 FP-Growth案例

    待补充

    5 Eclat案例

    待补充


    By Shinie

    展开全文
  • 灰色关联算法

    2018-06-07 16:27:53
    基于灰色区间关联决策的海上编队反导威胁评估算法,内含文档

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 355,434
精华内容 142,173
关键字:

关联推荐算法