关联规则算法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,一经查实,立即删除!

相关文章

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

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

语言非递归求解树的高度_算法素颜(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;会根据情况使用三种加锁策略&…

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

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

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

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

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

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

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

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

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

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

Git——工作中使用命令详解

1、Linux常用命令 cd&#xff1a;改变目录cd…&#xff1a;返回上级目录pwd&#xff1a;显示当前目录clear&#xff1a;清屏ls&#xff1a;显示当前目录所有文件touch&#xff1a;添加文件rm&#xff1a;删除文件mkdir&#xff1a;新建文件夹rm -r&#xff1a;删除文件夹mv&am…

Java中常见null简析

对于每一个Java程序员来说,null肯定是一个让人头痛的东西,今天就来总结一下Java中关于null的知识。 1.null不属于任何类型,可以被转换成任何类型,但是用instanceof永远返回false. 2.null永远不能和八大基本数据类型进行赋值运算等,否则不是编译出错,就是运行出错. 3.null可以…

Chrome浏览器F5和ctrl+F5的区别

一、正常重新加载&#xff08;F5&#xff0c;Ctrl R&#xff0c;在地址栏回车&#xff0c;点击链接&#xff09; 本节中的操作&#xff1a;根据缓存的缓存策略&#xff0c;进行处理。如果缓存没过期&#xff0c;就不向浏览器发请求&#xff0c;而是直接使用缓存。 F5或Contr…

mysql 自动生成mapper_自动生成实体类、Mapper、Mapper.xml文件

自动生成实体类、Mapper、Mapper.xml文件搭建Spring Boot Mysql MyBatis 项目核心配置pom.xml创建表配置文件生成文件结果项目结构搭建Spring Boot Mysql MyBatis 项目idea 可直接创建相应的项目及配置核心配置pom.xmlmysqlmysql-connector-java5.1.38org.springframework.…

使用Postman进行简单压力测试

使用Postman可以对服务端接口进行简单的压力测试&#xff0c;步骤如下&#xff1a; 1.配置好一个请求接口&#xff0c;保存在一个collection中&#xff1b; 2.点击Tests&#xff0c;添加断言检查点&#xff1b; 3.点击Runner按钮&#xff0c;打开Collection Runner界面&#…

mysql取消主从配置_mysql主从配置

搭建环境&#xff1a;master 192.168.127.131slave 192.168.127.128主从配置的前提&#xff1a;两个数据库的数据需要一模一样所以我们&#xff1a;在主上面建立一个数据库 在这里我们用mysql备份一下mysqldump db1 >123.sql (备份)在主上面建立一个数据库db1需要登录数据…

利用Java zip进行对文件的压缩和解压

利用Java JDK自带 进行对文件的压缩和解压 实现一个文件的zip压缩&#xff0c;过程可以简单地表示为&#xff1a; ZipEntry:表示 ZIP 文件条目 构造方法: public ZipEntry(String name) 可以用文件的相对路径来构造ZipEntry对象 ZipOutputStream&#xff1a; ZIP 文件格式…

mysql数据库设计教材_mySQL教程 第1章 数据库设计

E-R设计很多同学在学SQL语句时&#xff0c;觉得非常困难&#xff0c;那是因为你在学一个你根本不了解的数据库&#xff0c;数据库中的表不是你设计的&#xff0c;表与表之间的关系你不明白。因此在学SQL语句之前&#xff0c;先介绍一下数据库设计。下面举例说明数据库设计&…

谷歌浏览器Network详解

Network用F12打开后&#xff0c;出现以下页面。5个部分分别讲解。 控制器过滤器时间轴资源内容资源概况 1.控制器 Preserve log:页面刷新也不会清空请求 Disable cache:停用浏览器缓存 Online:有网 Fast 3G、Slow 3G:自定义网速 Offline:离线模拟 2.过滤器 2.1按字符串过…

mysql5.7.14安装版_MySql5.7.14安装教程详解(解压版)_MySQL

下面进入正式的教程&#xff1a;第一步&#xff1a;下载最近的MySQL文件并且解压&#xff1a;下载最新版的MySQL–mysql-5.7.12下载地址将下载到的文件解压缩到自己喜欢的位置&#xff0c;例如我自己的位置是D:\MySQL\mysql-5.7.12-winx64第二步&#xff1a;配置环境变量这里不…

Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

public static void main(String[] args) {}或者 public static void main(String args[]) {}main方法是我们学习Java语言学习的第一个方法&#xff0c;也是每个java使用者最熟悉的方法,每个Java应用程序都必须有且仅有一个main方法。在eclipse里可以使用输入main&#xff0c;…

端口号被占用:Disconnected from the target VM, address: ‘127.0.0.1:XXXX‘, transport: ‘socket‘

debug启动Spring boot项目的时候&#xff0c;项目没有启动起来。log最后一行&#xff0c;显示Disconnected from the target VM, address: ‘127.0.0.1:XXXX’, transport: ‘socket’。 解决方式&#xff01;&#xff01;&#xff01; 1、看看是谁占用了我的端口号&#xff…