你可能遇到在超市结账时,POS机自动为你打印优惠券。或者曾经观看过您的流媒体服务为您生成的视频播放列表。或者去网上购物时看到标有“你可能会感兴趣......”的产品清单中确实包含了你感兴趣的一些东西。

今天推荐引擎会获取有关您,类似消费者和可用产品的数据,并使用它来确定您可能感兴趣的内容,从而提供这些优惠券,播放列表和建议。

推荐引擎可能非常复杂。 例如,Netflix从2006年到2009年举办了100万美元的竞赛,以提高他们的电影推荐引擎的性能。 超过5,000支队伍参加。 获胜团队将107种不同算法或技术的结果相结合,来实现10%的改进并获得奖金。

因此,有许多不同的方法来构建推荐引擎,并且大多数方法将结合多种技术或方法。 在本文中,我只想介绍一种方法,即关联规则,它们相当容易理解,并且只需要最低限度的数学技能。 如果你可以使用简单的百分比,那么没有比下面更复杂的了。

现实世界中的关联规则

概念上关联规则是一种非常简单的技术。 最终结果是一个或多个形式的陈述:“如果发生这种情况,则可能发生以下情况。”在规则中,“if”部分称为先行,“then”部分称为结果。 请记住这两个术语,因为它们将在下面的描述中出现。让我们从食品购物开始,因为关联规则经常用于分析购物车的内容。

当您制作购物清单时,您可能会购买混合的食品储藏室以及您计划准备的特定餐食或菜肴的配料。 想象一下,你打算今天晚上烧一份红烧肉。 你除了购买五花肉,你还需要冰糖、老抽、姜、料酒、生抽、香叶、干辣椒、八角、葱、蒜等等。

如果我们查看人们购买的各种购物篮,我们可以开始看到一些共同点。 “如果有人买五花肉,或许他家里相应的调味品已经足够,但是其中一些快用完了。那么他们更有可能购买这些必须的调味品,如老抽、姜、料酒、生抽等”。有了这些知识,超级市场可以在收银台打印一张你购买这些调味品的优惠券,希望你能回来购买。

虽然五花肉可能意味着老抽、姜、料酒、生抽,但反过来可能并非如此。例如,购买老抽、姜、料酒、生抽的人可能会想要制作的是五香牛肉,在这种情况下,他们比五花肉相比更有可能购买一瓶酒精饮料。但通过正确的分析,可以找到管理哪些产品更可能相互关联的规则。因此,名称“关联规则”。

让我们用一些实数来说明这个过程。为此,我们将从购买日常杂货转向观看电影的情况。

关联规则如何在机器学习中正常工作?

此算法的起点是一组事务。 它们可能是传统的购买交易,但也可能包括诸如“将产品放入在线购物车”,“点击网络广告”或者是以下的“观看电影”等活动。

我将使用这个非常简短的五人电影观看习惯数据集。 我已将它们匿名化以隐藏它们的身份。 在这里,您可以看到每个人和他们观看的电影列表,这里用1-5表示的数字。

用户

观看过的电影

A

1, 2, 4

B

1, 3

C

1, 4

D

2, 3, 4

E

3, 4

首先要突出的是第一和第三个用户都观看了电影1和4.根据这些数据,规则将是“如果有人看电影号1,那么他们很可能看电影4号。“你需要理解我上面隐藏的两个术语:电影1是先行者,电影4是结果。让我们更详细地看一下这条规则。

这个规则有用吗?有5个用户中有2个用户同时观看了电影1和4.所以我们可以说这个规则支持40%(5个用户中有2个)。我们有多自信它是一个可靠的指标?三位用户观看了1号电影,但其中只有2位观看了3号电影。对此规则的信心为67%。

请注意,如果你颠倒了订单规则(或交换了前提条件),我们也可以说“如果有人看过电影号码4,那么他们很可能会看电影号码1”。但是,虽然支持也是40 %,信心变化成了只有50%(请查看上表)。这与上面的食物例子相同。

这些指标意味着什么呢? 只有5个用户和5部电影可能很难看到,但想象这是数百万用户和数千部电影的一部分。 如果支持率非常低,则基本上意味着此规则不适用于许多客户。 例如,这可能意味着观看一些不起眼的70年代纪录片的人也将观看画面模糊的80年代电影。 在电影推荐空间中,这将转化为可能不经常使用的利基规则,但对于非常小的客户群可能非常有价值。 但是,如果您使用规则在超市的货架上找到最佳的产品位置,许多低支持规则将导致显示非常分散的一组数据显示。 在这种类型的应用程序中,您可以设置支持和丢弃规则的阈值,让这些规则不符合最低要求。

如何理解关联规则的信心

信心其实更容易理解。如果有一条规则链接两部电影,但信心非常低,那么它只是意味着大部分时间他们观看第一部电影,他们实际上不会观看第二部电影。为了提出建议或预测,您宁愿制定一条您有信心的规则。您还可以使用最小阈值置信度,忽略或丢弃低于特定阈值的规则。

再看一下上面的第一条规则:如果有人看电影1,他们也会看电影4.这里的信心是67%,这是相当不错的。但是看一下表格的其余部分。无论如何,五分之四的用户观看了电影号码4。如果我们对他们的其他电影偏好一无所知,我们知道他们有80%的机会观看电影4.所以尽管有67%的信心,我们发现的这一条规则实际上没有用处:看过电影1的人实际上是观看电影4的可能性比随机选择的人少。幸运的是,有一种方法可以考虑到这一点。它被称为“提升“Lift。

关联规则中的”提升“

提升用于在与整个数据集进行比较时测量规则的性能。 在上面的示例中,我们希望将“观看电影1和电影4”的概率与整个数据集中出现的“观看电影4”的概率进行比较。 正如您所料,有一个提升公式:

提升等于给定前因的后果概率(这只是该规则的置信度)除以随后在整个数据集中发生的概率(这是对结果的支持),或者更简洁:

Lift = confidence / support(consequent)

在这个例子中,假设观看了电影1,电影4的概率只是第一条规则的置信度:67%或0.67。 观看电影4的整个数据集中的一些随机人(在这个简单示例中只有5个用户)的概率是80%或0.8。 将0.67除以0.8得出大约0.84的提升。

一般来说,如果你的提升小于1,它会显示一个规则,这个规则不仅仅是随机选择一个用户,这就像我在本节第一段中解释的那样。 如果您的提升大约为1,那么它表示两个独立的事件,例如,观看一部电影不会影响观看另一部电影的可能性。 升力值大于1表明先行词确实会影响发现结果。 换句话说,这是一个有用的规则。

测试和分箱关联规则

我将完成上面简单示例的一些提示和扩展。

首先,您如何测试规则的准确性?您可以使用我之前为分类概述的相同方法:使用可用事务的子集构建规则,然后针对其余事务测试这些规则的性能。当然,如果用于向实际用户提供建议,则应监控其性能。

我们使用了一个简单的规则:“如果用户观看了电影1,那么他们很可能会看电影4.”这被称为长度为2的规则,因为它包含两个元素。当然,我们可以有更复杂的规则:“如果用户观看电影1,2和3,那么他们很可能会看电影4”是一个长度为4的规则。或者如果你想回到杂货店买一个类似的规则,购买五花肉的人很可能想要一些冰糖。

一些流媒体网站要求用户按照1-5或1-10的等级对他们观看的内容进行评分。如果我们有这些信息,我们就无法直接使用数值;我们想要“回答”答案。例如,我们可能会说7-10的分数被认为是“高”等等。然后,规则可以包含“观看的电影A并将其评级为高”。

分箱的概念适用于最后一个例子,它使我们远离电影和购物到机器,因为这些规则可能具有更广泛的用途。

想象一下,你有责任维护一些不时破坏的机器。 您有许多传感器数据和有关其操作的其他信息,并且您已捕获了多个故障。 原则上你可以将机器故障视为一个结果,并寻找前因。 您必须以某种方式对传感器数据进行分类。 原则上,您可以使用关联规则来查找与故障相关的条件并采取纠正措施,也称为根本原因分析。 用诊断代替机械故障,甚至可以使用某种形式的关联规则和医疗数据。

最后你可以点击阅读原文来下载免费的电子书 “神秘的机器学习”,喜欢你会喜欢!

喜欢就点好看吧!:-)

drools规则中调用其它规则_简化机器学习中的关联规则相关推荐

  1. 机器学习中激活函数和模型_探索机器学习中的激活和丢失功能

    机器学习中激活函数和模型 In this post, we're going to discuss the most widely-used activation and loss functions ...

  2. mysql视图中调用函数写法_从视图中调用函数

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. java怎么调用支付接口测试_微信支付中微信红包的接口测试,Java版本

    需要有认证的公众号,且开通了微信支付,商户平台且开通了现金红包的权限即可. 商户登陆地址:https://pay.weixin.qq.com选择查看营销中心的现金红包. 现金红包的官网文档说明: ht ...

  4. python如何封装成可调用的库_在python中如何以异步的方式调用第三方库提供的同步API...

    在关于asyncio的基本用法中提到,asyncio并不是多线程.在协程中调用同步(阻塞函数),都占用同一线程的CPU时间,即当前线程会被阻塞(即协程只会在等待一个协程时可能出让CPU,如果是普通函数 ...

  5. mfcc中的fft操作_简化音频数据:FFT,STFT和MFCC

    mfcc中的fft操作 What we should know about sound. Sound is produced when there's an object that vibrates ...

  6. java 怎么调用js代码_在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: " ...

  7. python中syntaxerror什么意思_在Python中,“SyntaxError:调用'print'时缺少括号”是什么意思?...

    此错误消息表示您尝试使用Python 3来关注示例或运行使用Python 2 print 语句的程序: 打印"你好,世界!" 上面的语句在Python 3中不起作用 . 在Pyth ...

  8. webrtc不支持怎么调用设想吐_关于webRTC中video的使用实践

    此次demo使用chrome49调试测试 前端在操作视频输入,音频输入,输出上一直是比较弱的,或者说很难进行相关的操作,经过我最近的一些研究发现,在PC上实际上是可以实现这一系列的功能的,其实现原理主 ...

  9. python中执行linux命令(调用linux命令)_常见Python中调用Linux命令

    有时候我们需要从Python中执行Linux命令,下面就介绍几种方法? 1. os 模块: 1.1 os.system 函数: system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果. ...

最新文章

  1. MySQL基础篇:数据定义语言DDL
  2. Django-restframework 之 Exceptions分析
  3. Objective-C语法简化
  4. Android首次启动时间长优化之预编译提取Odex
  5. 以太坊知识教程------智能合约(2)调用
  6. 零云九歌小组KTV点歌系统简介
  7. 机器学习十大经典算法之随机森林
  8. 多线程下的进程同步(线程同步问题总结篇)
  9. Day26:configparser、subprocess模块
  10. ubuntu卸载fcitx后引发的问题修复
  11. CentOS 安装jdk1.7 32位
  12. UnityShader10:CG标准函数库
  13. 3 超链接_excel函数应用技巧:超链接函数HYPERLINK
  14. Multisim 电路辅助设计思维导图
  15. 小白快速入门| springcloud系列之-快速上手feign
  16. 【随笔1】石榴红,依旧。
  17. java——》Supplie
  18. android分辨率2k3k4k,android 不同分辨率适配
  19. C++ 使用string的头文件和要求
  20. Mysql varchar类型长度计算(mysql字段长度计算)

热门文章

  1. Docker学习之网络篇
  2. 《ActionScript 3.0基础教程》——第2章 往舞台动态地添加对象2.1 创建库资源,并为它命名...
  3. Java的正则表达式使用及案例
  4. apache_tomcat整合应用
  5. (匹配 二维建图) Antenna Placement --POJ --3020
  6. FTP同步的另类解决办法——NetDrive
  7. openfire单个插件编译
  8. 表格排序——tablesorter.js使用(支持中文排序)
  9. 高级政工师具备的能力_一个合格的政工师应该具备哪些条件与素质
  10. android gridview item 点击,Android-取消GridView/ListView item被点击时的效果