基础知识
在去杂货店买东西的过程,实际包含了许多机器学习的当前及未来应用,这包括物品的
展示方式、购物之后优惠券的提供以及用户忠诚度计划,等等。它们都离不开对大量数据的
分析。商店希望从顾客身上获得尽可能多的利润,所以他们必然会利用各种技术来达到这一
目的。
通过查看哪些商品经常在一起购买,可以帮助商店了解用户的购买行为。这种从数据海洋中
抽取的知识可以用于商品定价、市场促销、存货管理等环节。从大规模数据集中寻找物品间的隐
含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。这
里的主要问题在于,寻找物品的不同组合是一项十分耗时的任务,所需的计算代价很高,蛮力搜
索方法并不能解决这个问题,所以需要用更智能的方法在合理的时间范围内找到频繁项集。本章
将介绍如何使用Aprior算法来解决上述问题。
总的来说,我们总结如下:
关联性分析:从大规模数据集中寻找物品间的隐含关系。
关系包括:频繁项集或者关联规则。
频繁项集:是经常出现在一起的物品集合。
关联规则:暗示两种物品中间可能存在很强的关系。
优点:易编码实现。
缺点:在大数据集上可能较慢。
适用数据类型:数值型或者标称型数据。
Apriori原理
这里引入一个很有趣的例子:
尿布与啤酒?
关联分析中最有名的例子是“尿布与啤酒”。据报道,美国中西部的一家连锁店发现,男
人们会在周四购买尿布和啤酒。这样商店实际上可以将尿布与啤酒放在一块,并确保在周四全
价销售从而获利。当然,这家商店并没有这么做*。
Apriori算法的一般过程
(1) 收集数据:使用任意方法。
(2) 准备数据:任何数据类型都可以,因为我们只保存集合。
(3) 分析数据:使用任意方法。
(4) 训练算法:使用Apriori算法来找到频繁项集。
(5) 测试算法:不需要测试过程。
(6) 使用算法:用于发现频繁项集以及物品之间的关联规则。
算法实现
Apriori算法中的辅助函数
def loadDataSet():
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
def createC1(dataSet):
C1 = []
for transaction in dataSet:
for item in transaction:
if not [item]