关联规则算法c语言样例及分析_推荐系统总结系列-关联规则算法(四)

基于关联规则的推荐有三种方法:Apriori关联规则算法FP Tree关联规则算法;PrefixSpan关联规则算法;

关联规则挖掘推荐算法:

关联规则挖掘是一种在大规模交易中识别类似规则关系模式的通用技术,可以应用到推荐系统中。交易T是所有有效产品集合P={p 1 ,p 2 ,...,p n }的子集,表示被一起购买的产品集合,关联规则X=>Y表示只要交易T中包含了X里面的元素,那么认为Y里面的元素也有可能被T包含。常见的规则挖掘算法是Apriori算法,关联规则的衡量指标是:支持度(support)和可信度(confidence)。将关联规则应用到推荐系统的主要问题就是需要将评分转换为交易,一般情况把所有的向前(正向)的评分集合<可以是做过去均值化操作后的评分矩阵>或者用户的购买行为可以看做一次交易。

Apriori算法概述:

Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,这些找出的集合有助于我们的业务决策,同时我们也可以认为这些频繁出现的数据集合中的数据项存在一定的关联性,简而言之,可以认为这些数据项之间存在某种“相似性”。比如在电商的网购数据中,如果发现某一些商品经常一起被购买,那么我们可以认为这些商品之间存在某种“相似性”,从而我们可以优化网站中这些商品的排列位置、优化商品的仓库位置或者将这些“相似”的物品推荐给正在浏览对应物品的客户,从而可以达到增加经济效益、节约成本的目的。

交易集:包含所有数据的一个数据集合,数据集合中的每条数据都是一笔交易;项:交易集中的每个商品被成为一个项;模式/项集(ItemSet):项组合被成为模式/项集;支持度(Support):一个项集在在整个交易集中出现的次数/出现的频度,比如:Support({A,C})=2表示A和C同时出现的次数是2次;最小支持度:交易次数达到最小支持度的情况下,该项集才会被计算;频繁项集:如果项集的支持度大于等于最小支持度,那么该项集被成为频繁项集;置信度(Confidence):关联规则左件和右件同时出现的频繁程度,该值越大,表示同时出现的几率越大;关联规则:LHS  RHS(confidence) -----> 如果客户购买了左件(LHS),也可能购买右件(RHS),购买的置信度为confidence

311c50e2e2e6e525fc98a4ab27f055cb.png

Apriori算法原理:

Apriori算法本质的作用是找出购物数据集中的最频繁的K项集;Apriori算法采用了迭代的方法,先搜索出候选1项集及对应的支持度,剪枝去掉低于最小支持度的1项集,得到频繁1项集。然后对剩下的频繁1项集进行连接,得到候选的频繁2项集,筛选去掉低于最小支持度的候选频繁2项集,得到频繁2项集,以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。

173c2b94e37dafa026e3bc5aebdb883b.png

输入:数据集合D,支持度阈值α;输出:最大的频繁K项集

1. 扫描整个数据集,得到所有出现过的1项集,得到候选频繁1项集。2. 令k = 1;3. 挖掘频繁k项集;扫描数据计算候选频繁k项集的支持度去除候选频繁k项集中支持度低于阈值的数据集,得到频繁k项集。如果得到的频繁k项集为空,则直接返回频繁k-1项集的集合作为算法结果,算法结束。如果得到的频繁k项集只有一项,则直接返回频繁k项集的集合作为算法结果,算法结束。基于频繁k项集和频繁1项集,连接生成候选频繁k+1项集。4. k=k+1,转入步骤3。

Apriori算法总结:

priori算法是一种非常经典的频繁项集的挖掘算法,很多算法都是基于Apriori算法的一种扩展,比如:FP-Tree、GSP、CBA等等。理解掌握Apriori算法原理,对于对数据挖掘相关算法的学习具有非常好的作用。不过,现在一般很少直接使用Aprior算法来进行数据挖掘了,原因是:Apriori算法的数据挖掘效率比较低。

FP Tree算法概述:

Apriori算法作为挖掘频繁项集的算法,需要多次扫描数据,I/O瓶颈比较高,为了解决这个问题,提出了FP-Tree算法,也称为FP Growth算法;在FP Tree算法中,不管存在多少数据量,只需要扫描两次数据集,因此提高了算法的运行效率。FP Tree算法改进了Apriori算法的I/O瓶颈,类似BIRCH聚类,利用树结构来提高算法的执行效率,是一种利用空间换时间的一种算法效率提升方式。备注:FP Tree是我们在生产环境中常用的一种数据挖掘频繁项集的算法。

FP Tree算法原理:

为了减少I/O次数,FP Tree算法引入了一些数据结构来临时存储数据,主要包含

三个部分:

1. 项头表:记录所有的1项频繁集以及出现的次数,按照次数降序排列。2. FP Tree:将原始数据集映射到内存中的一棵FP树。3. 节点链表:基于项头表保存的在FP Tree中对应的项的存储位置的一个链表。FP Tree算法可以分为一下两个过程:1. 项头表和FP Tree的构建2. FP Tree的挖掘

9f0d02c0d0aa7cf64b4be0b5c32ededc.png

FP-Tree算法原理之项头表构建:

扫描所有数据,得到所有一项集的支持度,然后删除支持度低于阈值的项,得到频繁一项集,将所有频繁一项集按照支持度降序排列,放入项头表中。

FP-Tree算法原理之FP Tree构建:

FP Tree树的构建是FP-Tree算法的关键点,主要分为两个过程:

1. 扫描数据,对于每条数据删除非频繁的1项集,并按照支持度降序排列,得到排序后的数据集。

2. 基于排序好的数据集构建FP Tree。初始状态FP树是空的,建立FP树时我们一条条的读入排序后的数据集,插入FP树,插入时按照排序后的顺序,插入FP树中,排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到FP树后,FP树的建立完成。

FP-Tree算法原理之FP Tree挖掘:

当构建好FP树、项头表以及节点链表后,就可以开始进行频繁项集的挖掘了。首先从项头表的底部项依次向上挖掘,对于项头表对应于FP树的每一项,找出对应的条件模式基,所谓条件模式基是以我们要挖掘的节点作为叶子节点所对应的FP子树,得到这个FP子树,我们将子树中每个节点的的计数设置为叶子节点的计数,并删除计数低于支持度的节点。从这个条件模式基,我们就可以递归挖掘得到频繁项集了。

寻找F节点的条件模式基;我们很容易得到F的频繁2项集为{A:2,F:2}、{C:2,F:2}、{E:2,F:2}、{B:2,F:2}。递归合并二项集,得到频繁三项集为{A:2,C:2,F:2}、{A:2,E:2,F:2},...。当然一直递归下去,最大的频繁项集为频繁5项集,为{A:2,C:2,E:2,B:2,F:2}

7017dc7910be7085413a7809cbe0e315.png

FP-Tree算法总结归纳:

FP-Tree算法流程主要包括一下几步:扫描数据,得到所有的频繁1项集的计数,然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。读取数据集中的数据,将数据中的非频繁1项集删除,并按照支持度排序排列后将数据插入到FP树中,插入时按照排序后的顺序插入,并计算当前节点的后序子孙节点的数目。直到所有数据均插入到FP树后,FP树构建完成。从项头表的底部项依次向上找到项头表项对应的条件模式基。从条件模式基递归挖掘得到项头表项项的频繁项集。如果不限制频繁项集的项数,则返回上一步骤的所有的频繁项集,否则只返回满足项数要求的频繁项集。

PrefixSpan算法概述:
PrefixSpan全称Prefix-Projected Pattern Growth(即前缀投影的模式挖掘),是用于挖掘频繁序列的数据挖掘算法,和Apriori算法以及FP Tree算法的挖掘目标稍有不同。PrefixSpan算法是生产中常用的一种频繁序列模式挖掘算法。备注:序列中的项集是具有时间上的先后关系的。

2279d7d0cf21d24e0b1baba02ec9ef6c.png

子序列:如果某个序列A所有的项集在序列B中都可以找到,则A是B的子序列。

eed202df8f77228c0aa1ec9f8dc5d08f.png

频繁序列:出现频次超过支持度的子序列就叫做频繁序列。

前缀序列:即序列前面部分的子序列。

33d4e6c96042d5d40fd7d715f8b04bce.png

669c3cc68bec9947a28da64a1454a012.png

后缀序列:即序列中位于前缀序列之后的子序列就叫做后缀序列。

前缀投影:即投影数据库,即序列数据库S中所有相对于前缀的后缀序列的集合

PrefixSpan算法原理:

类似Apriori算法,先找出所有子序列中长度为1的前缀开始挖掘序列模型(并且删除原始序列中非频繁的长度为1的序列),搜索对应的投影数据库得到长度为1的前缀对应的频繁序列,然后递归的挖掘长度为2的前缀所对应的频繁序列,。。。以此类推,一直递归到不能挖掘到更长的前缀挖掘为止。

6e29d457a59c93e06f787f23890774c0.png

PrefixSpan算法流程:

输入:序列数据库S和支持度阈值α 输出:所有满足支持度要求的频繁序列集

步骤:(备注:所找到的前缀即频繁序列)

1. 找出所有子序列中长度为1的前缀以及对应的投影数据库;2. 对于长度为1的前缀进行计数,将支持度低于阈值α的前缀对应的项从序列数据库;S中删除,同时得到所有的频繁1项序列。3. 对于每个长度为i满足支持度的前缀进行递归挖掘:

a. 找出前缀对应的投影数据库,如果投影数据库为空,则递归返回;b. 统计对应投影数据库中各项的支持度计数,如果所有项的支持度计数都低于阈值α,则递归返回。;c. 将满足支持度计数的各个单项和当前的前缀进行合并,得到若干新的前缀。;d. 令i=i+1,前缀为合并单项后的各个前缀,分别递归执行第三步。

协同过滤各种方式总结:

广义的协同过滤算法主要包括三种算法:基于用户(UserCF)的协同过滤算法;基于物品(ItemCF)的协同过滤算法;基于模型(ModelCF)的协同过滤算法;

使用关联规则的协同过滤;使用聚类算法的协同过滤;使用分类算法的协同过滤;使用回归的协同过滤;使用矩阵分解/隐语义模型的协同过滤;使用神经网络的协同过滤;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

perclos嘴巴_一种基于视频分析的疲劳状态检测方法及装置与流程

本发明涉及疲劳检测领域&#xff0c;特别是涉及一种基于视频分析的疲劳状态综合检测方法及装置。背景技术&#xff1a;疲劳状态检测技术在交通运输、生产安全、教育培训等许多领域应用广泛。目前&#xff0c;疲劳状态检测的方法一般可分为接触式和非接触式两大类。其中&#xf…

Mybatis-Plus条件

Mybatis-Plus条件 条件构造器 说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中没有标明condition的方法,默认为true以下出现的泛型Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法)以下方法在入参中出现的R为泛型,在普通wrapper中…

Mysql - Innodb锁、事务与隔离级别

我们的数据库一般都会并发执行多个事务&#xff0c;多个事务可能会并发的对相同的一批数据进行增删改查操作&#xff0c;可能就会导致脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题&#xff0c;为了解决多事务并发问题&#xff0c;数据库…

东南西北十字图_word画东南西北方向图标 怎么在Word里绘制方向十字图标

如果你使用的是2007版的话&#xff0c;可以在插入选项中找到插入图形选项&#xff0c;里面有一个箭头总汇&#xff0c;选择你所需要的就行了&#xff01;如果是2003版的话&#xff0c;也可以在插入选项中找到图形&#xff0c;里面也有这一项&#xff01;怎么样在word07文档里键…

语言非递归求解树的高度_算法素颜(11):无死角“盘”它!二分查找树

引言《菜鸟也能“种”好二叉树&#xff01;》一文中提到了&#xff1a;为了方便查找&#xff0c;需要进行分层分类整理。而满足这种目标的数据结构之一就是树。树的叶子节点可以看作是最终要搜寻的目标物&#xff1b;叶子节点以上的每一层&#xff0c;都可以看作是一个大类别、…

Mysql InnoDB存储引擎的锁相关

Mysql InnoDB存储引擎的锁相关 InnoDB下&#xff0c;mysql四个级别隔离下加锁操作 四个级别隔离的写操作都加X锁串行化下读加S锁select … for update, select … lock in share mode 分别加x锁&#xff0c;s锁在需要加锁的场景下&#xff0c;会根据情况使用三种加锁策略&…

安装python37路径报错_Robot framework安装python3.7导入HttpLibrary.HTTP报错

报错信息&#xff1a;20200106 18:23:28.178 [WARN]: Importing test library "HttpLibrary.HTTP" failedTraceback (most recent call last):Importing test library HttpLibrary.HTTP failed: SyntaxError: invalid syntax (__init__.py, line 16)Traceback (most …

MySQLl的可串行化_mysql事务串行化的锁机制是怎样的?

1、mysql的可串行化 首先&#xff1a;可串行化serializable 这是事务的最高级别&#xff0c;在每条读的数据上&#xff0c;加上锁&#xff0c;使之不可能相互冲突&#xff0c;因此&#xff0c;会导致大量的超时现象。 解释如下&#xff1a; 以A&#xff0c;B用户为例&#…

显示器尺寸对照表_电脑显示器尺寸对照表一览,教你怎么选择最适合自己的显示器尺寸...

显示小课堂&#xff1a;显示器买大买小谁说了算&#xff1f; [本文来自&#xff1a;www.ii77.com]今天&#xff0c;笔者想和大家讨论一下关于显示器尺寸选择方面的问题。通过这两年显示器行业的发展我们不难看出&#xff0c;现在显示器的尺寸越来越大&#xff0c;三十几吋、四十…

MySQL事务隔离级别理解_解读MYSQL的可重复读、幻读及实现原理

前言 提到事务&#xff0c;你肯定不会陌生&#xff0c;最经典的例子就是转账&#xff0c;甲转账给乙100块&#xff0c;当乙的账户中到账100块的时候&#xff0c;甲的账户就应该减去100块&#xff0c;事务可以有效的做到这一点。 在MySQL中&#xff0c;事务支持实在引擎层实现的…

react 子传参父_React 子组件向父组件传值的方法

本文介绍了React 子组件向父组件传值的方法&#xff0c;分享给大家子组件需要控制自己的 state&#xff0c; 然后告诉父组件自己的state&#xff0c;通过props调用父组件中用来控制state的函数&#xff0c;在父组件中展示子组件的state变化。/***实现在输入框输入邮箱时&#x…

MySQ事务

事务 事务是访问数据库的一个操作序列&#xff0c;事务的正确执行使得数据库从一种状态转换为另一种状态。事务必须服从ACID原则。原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。 原子性&#xff1a;不可分割&#xff0c;事务要么全部被执…

boost互斥锁_boost锁使用总结

boost锁的概述&#xff1a;boost库中提供了mutex类与lock类&#xff0c;通过组合可以轻易的构建读写锁与互斥锁。举个通俗的例子&#xff0c;如果共享资源是一个自动锁住的房间&#xff0c;互斥体是钥匙&#xff0c;进入房间必须取钥匙&#xff0c;离开房间应该还钥匙。这就对应…

MySQL 是如何实现四大隔离级别的?

MySQL 是如何实现四大隔离级别的&#xff1f; 在mvcc下&#xff0c;mysql中用到的锁还是共享锁和排他锁么&#xff1f;如果是的话&#xff0c;那么是怎样结合锁和mvcc来实现rc和rr隔离级别的呢&#xff1f;还有mysql中在ru隔离级别下&#xff0c;两个事务同时读取数据对象A&am…

无符号右移负数_关于负数的右移与无符号右移运算小结

对于带符号右移,若为负数,则在存储时首位表示符号位,其值为1,表示该值是负数的移位,在移位过程中,高位补1,若符号位是0,表示是正数,在移位过程中高位补零,两者的前提是符号位保持不变:对于负数的右移&#xff1a;因为负数在内存中是以补码形式存在的&#xff0c;所有首先根据负…

Linux命令 移动/复制文件/目录到指定目录下

1、同一个服务器下复制文件或文件夹 1.1 复制文件 复制文件&#xff1a;把1.txt 复制到根目录下的sbin目录 cp 文件名&#xff08;可带路径&#xff09;目标路径&#xff08;带路径&#xff09;如&#xff1a;cp 1.txt ~/sbin/1,2 复制目录 复制目录&#xff1a;把relea…

springboot2稳定版本_重要版本Spring Boot 2.3.0发布 - spring.io

重要版本Spring Boot 2.3.0于2020年5月15日发布&#xff0c;此版本增加了大量新功能和改进。有关完整的升级说明以及新的和值得注意的功能&#xff0c;请参阅发行说明。2.3的新功能依赖升级Spring Boot 2.3移至几个Spring项目的新版本&#xff1a;Spring Data NeumannSpring HA…

正则表达式——手机号

手机表达式&#xff1a; /^13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/ 可以校验 11为手机号&#xff0c;包含了大部分号段 座机表达式&#xff1a; /^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})(-[0-9]{1,4}){0,1}$/可以校验 区号-电话-分机 上面两条…

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException

异常信息&#xff1a; org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name BusinessAccountController for bean class [com.hs.BusinessAccountController] conflicts with existing, non-compatible bean definit…

c mysql web开发实例教程_Web开发(六)MySql

数据库简介数据库(DB)数据库(database&#xff0c;DB)是指长期存储在计算机内的&#xff0c;有组织&#xff0c;可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储&#xff0c;具有较小的冗余&#xff0c;较高的数据独立性和易扩展性&#xff0c;并可为各种…