废话就不多说了,开始。。。
联关则规(association rule)是据数中所含蕴的一类要重法则。联关则规发掘的目标是在据数项目中找出有所的并发关系(cooccurrence relationships),这类关系也称为联关(association)。联关则规发掘的经典应用是购物篮(Market Basket), 联关则规发掘并没有斟酌客户购置商品时的序顺。
在分析联关则规发掘法算前,我们先懂得一些相干的观点。
联关则规的基本观点
联关则规发掘问题常通可以表述为:I={i1, i2, …, im}是一个项目(Item)合集,T={t1,t2, …, tn} 是一个事务(Transaction)合集,其中个每事务ti是一个项目合集, 并且满意ti属于I。
一个联关则规是一个如下式形含蕴的关系X—> Y, 其中X是I的真子集,Y也是I的真子集,并且X∩Y=Ф, X 或 Y是一个项目的合集, 称作项集(ItemSet),并且X为前件,Y为后件。
如果项集X是事务T的子集,X在T中的支撑数计(表现为X.count)是T中含包X的事务目数。
支撑度(Support):定义为 supp(X) = X.count / count(D) = P(X)
置信度:一条则规X—> Y的置信度指的是“既含包了X又含包了Y的事务数量占有所含包了X的事务的百分比”,可以作看是件条率概P(Y|X)
置信度定义为定义为 conf(X->Y) = supp(X ∪ Y) / supp(X) = P(Y|X)。
候选集(Candidate itemset):通过向下合并得出的项集。定义为C[k]。
繁频集(Frequent itemset):支撑度大于即是特定的最小支撑度(Minimum Support/minsup)的项集。表现为L[k]。注意,繁频集的子集一定是繁频集。
晋升比率(晋升度Lift):lift(X -> Y) = lift(Y -> X) = conf(X -> Y)/supp(Y) = conf(Y -> X)/supp(X) = P(X and Y)/(P(X)P(Y))
支撑度表现一个事物生发的率概, 而置信度表现两个事物的联关强度。
联关则规发掘的目标:给定一个事务集T,联关则规发掘是指"找出T中有所满意支撑度和置信度分离高于一个用户指定的最小支撑度(minsup)和最小置信度(minconf)的联关则规"
Apriori法算(演绎法算)
联关则规发掘法算的计设可以分解为两个子问题:
2.从繁频项目集中生成有所可托联关则规:即从骤步1中选出置信度大于最小置信度的项。
Apriori法算中定假项集I中的项目都采用了字典排序,这个很要重,因此在实现Apriori法算的时候,对项目的编码很要重。
frequent-itemset-gen(T)
C[1]<--init-pass(T); //对事务集T行进第一轮搜索,生成1-候选集 F[1]<--{f|f属于C[1], supp(f) >=minsup} //从1-候选会合选出1-繁频集 for(k=2; F[k-1]<>NULL; k++) { C[k]<--candidate-gen(F[k-1]); for each t 属于 T { for each c属于C[k] { if c is contianed in t then c.count++; } } F[k]<--{c属于C[k]| supp(c) >= minsup} } return F<-- UF[k]
candidate-gen(F[k-1])
C[k] <---NULL; //初始化k-候项选集 for all f1, f2 属于F[k-1] with f1={i1, i2, …, ik-2, ik-1} f2={i1, i2, …, ik-2, i`k-1} and ik-1 < i`k-1 //找出有所的“只有最后一项不同的k-1繁频项目对” { c<---{i1, i2, …, ik-2, ik-1, i`k-1}; //根据字典序合并两个k-1项,构成k候项选 C[k].add(c); for each (k-1)-subset s of c //将c中取人以k-1个项,成形k-1子项 { if(s 不属于 F[k-1]) { C[k].delete(c) } } } return C[k]
genRules(F)
for (属于F的个每k-繁频项目 f[k], k>=2) { r1<---- gen 1-item rule of f[k] with confidence >= minConf and support<---f[k].count/n H[1].add({f[k]} -{ r1}); ap-genRules(f[k], H[1] ); }
ap-genRules(f[k], H[m])
if (k > m + 1 && H[m]<> NULL) { H[m+1] <--- candidate-gen(H[m]); for (each h[m+1] in H[m+1]) { conf = f[k].count / (f[k] - h[m+1]).count; if (conf >= minConf) { gen the rule(f[k] - h[m + 1]) -->h[m+1] with confidence = conf and support = f[k].support / n; } else { delete h[m + 1] from H[m+1]; } } ap-enRules(f[k], H[m+1]); }
文章结束给大家分享下程序员的一些笑话语录:
现在社会太数字化了,所以最好是有一个集很多功能于一身的设备!