关联规则
引言
在一家超市里,有一个有趣的现象:尿布和啤酒竟然摆在一起出售。但是这个奇怪的举措却使尿布和啤酒的销量双双增加了。
一个意外的发现是:”跟尿布一起购买最多的商品竟是啤酒!经过大量实际调查和分析,揭示了一个隐藏在“尿布与啤酒”背后的美国人的一种行为模式:在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,而他们中有30%~40%的人同时也为自己买一些啤酒。产生这一现象的原因是:美国的太太们常叮嘱她们的丈夫下班后为小孩买尿布,而丈夫们在买尿布后又随手带回了他们喜欢的啤酒。
**关联规则(Association Rules)**是反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘的一个重要技术,用于从大量数据中挖掘出有价值的数据项之间的相关关系。
相关名词
- 支持度(support)
支持度是个百分比,它指的是某个商品组合出现的次数与总次数之间的比例。支持度越高,代表这个组合出现的频率越大。例如,“牛奶 + 面包”出现了 3 次,那么这 5 笔订单中“牛奶 + 面包”的支持度就是 3/5=0.6。
- 置信度(confidence)
置信度是个条件概念,就是说在 A 发生的情况下,B 发生的概率是多少。即就是当你购买了商品 A,会有多大的概率购买商品 B。例如,置信度(牛奶→啤酒)=2/4=0.5,代表如果你购买了牛奶,有50%的概率会购买啤酒。
- 提升度(lift)
提升度代表的是“商品 A 的出现,对商品 B 的出现概率提升的”程度。计算公式如下:提升度 (A→B)= 置信度 (A→B)/ 支持度 (B)
所以提升度有三种可能:
(1)提升度 (A→B)>1:代表有提升;
(2)提升度 (A→B)=1:代表没有提升,也没有下降;
(3)提升度 (A→B)<1:代表有下降。
独热编码
(One-Hot Encoding)
引言
独热编码出现之前:针对无序离散的分类特征,机器学习算法的分类器并不能直接进行数据处理。因为,分类器通常处理的数据是连续且有序的。
独热编码即 One-Hot 编码,又称一位有效编码。其方法是使用 N位 状态寄存器来对 N个状态 进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效,即只有一位是1,其余都是零值
例如对4种状态进行编码:
自然顺序码为:00,01,10,11
独热编码为:0001,0010,0100,1000
按照 N位状态寄存器 来 对N个状态 进行编码的原理,处理后应该是这样的
性别特征:[“男”,“女”](N=2 二维数据)
男 => 10
女 => 01
地区特征:[“北京”,"上海,“深圳”](N=3,三维数据):
北京 => 100
上海 => 010
深圳 => 001
运动特征:[“足球”,“篮球”,“羽毛球”,“乒乓球”](N=4):
足球 => 1000
篮球 => 0100
羽毛球 => 0010
乒乓球 => 0001
当一个样本为 [“男”,“上海”,“足球”] 的时候,独热编码(One-Hot Encoding)的结果为:
[1,0,0,1,0,1,0,0,0]
代码
第一种
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) # 训练。这里共有4个数据,3种特征
array = enc.transform([[0,1,3]]).toarray() # 测试。这里使用1个新数据来测试
array ##输出 array([[1., 0., 0., 1., 0., 0., 0., 0., 1.]])
总共有三个特征,
第一个特征有两类[0,1]表示成10,01
第二个特征有三类[0,1,2]表示成100,010,001
第三个特征有四类[0,1,2,3]表示成1000,0100,0010,0001
第二种
encoder = preprocessing.OneHotEncoder()
encoder.fit([
[0, 2, 1, 12],
[1, 3, 5, 3],
[2, 3, 2, 12],
[1, 2, 4, 3]
])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
encoded_vector
4个特征:
第一个特征将3类特征值[0,1,2]表示为[100,010,001]
第二个特征将2类特征值[2,3]表示为[10,01]
第三个特征将4类特征值[1,2,4,5]表示为[1000,0100,0010,0001]
第四个特征将2类特征值[3,12]表示为[10,01]
区别就是第二种的特征值是随机的