机器学习之Apriori算法

支持度(support):数据集中包含该项集的记录所占的比例。

可信度或置信度(confidence):

$A \rightarrow B$的置信度为
$$
confidence(A\rightarrow B) = \frac{support(A , B)}{support(A)}
$$
Apriori原理:如果一个项集是非频繁的,那么它的所有超集也是非频繁的。


If an itemset is not frequent, any of its superset is never frequent.

Apriori算法

1.从大小为k的频繁项集中生成大小为k+1的候选频繁项集$C_{k+1}$

2.扫描数据库,计算每一个候选频繁项集的支持度

3.将满足最小支持度的频繁项集加到$F_{k+1}$中
$$
\begin{align}
\hline
& 算法\ Apriori \\
\hline \\
& F_1 = (大小为1的频繁项集); \\
& for(k = 1; F_k \neq \varnothing; k++)\ do\ begin \\
& \qquad C_{k+1} = apriori-gen(F_k);//新的候选频繁集 \\
& \qquad for\ 所有的交易记录t \in 数据集\ do\ begin \\
& \qquad \qquad C_{t}^{‘}= subset(C_{k+1},t);\ //包含在t中的候选集 \\
& \qquad \qquad for\ 所有的候选c \in C_{t}^{‘}\ do \\
& \qquad \qquad \qquad c.count ++; \\
& \qquad \qquad end \\
& \qquad \qquad F_{k+1} = \{C \in C_{k+1} |\ c.count \geq 最小的支持度 \} \\
& \qquad end \\
& end \\
& Answer \cup_{k} F_k;
\end{align}
$$
算法第三行中的apriori-gen函数经过下面两步,从$F_k$生成$C_{k+1}$

1.连接

通过合并两个大小为k,且前$k-1$项相同的频繁项集$P_k$和$Q_k$,生成大小为k+1的频繁项集$R_{k+1}$
$$
\begin{align}
& R_{k+1} = P_{k} \cup Q_{k} = \{items_{1},\dots ,items_{k-1},items_{k},items_{k^{‘}}\} \\
& P_{k} = \{items_{1},\dots ,items_{k-1},items_{k}\} \\
& Q_{k} = \{items_{1},\dots ,items_{k-1},items_{k^{‘}}\}
\end{align}
$$
其中,$items_1 < \dots < items_k < items_{k^{‘}}$

2.剪枝

检查$R_{k+1}$中的所有大小为的项集中的所有大小为的项集是不是频繁的,删除中的所有大小为的项集中的所有大小为k的项集是不是频繁的,删除$R_{k+1}$中那些非频繁的项集,从而得到中那些非频繁的项集,从而得到$C_{k+1}$。因为$C_{k+1}$中大小为且非频繁的所有子集不是大小为中大小为k且非频繁的所有子集不是大小为k+1的频繁项集的子集。

示例:

假设最小支持度为2

数据库D

TID Items
100 $1 \quad 3 \quad 4$
200 $2 \quad 3 \quad 5$
300 $1 \quad 2 \quad 3 \quad 5$
400 $2 \quad 5$

$C_1$

{1} 2
{2} 3
{3} 3
{4} 1
{5} 3

$F_1$

项集 支持度
{1} 2
{2} 3
{3} 3
{5} 3

$C_2$

项集 支持度
{ 1, 2 } 1
{ 1, 3 } 2
{ 1, 5 } 1
{ 2, 3 } 2
{ 2, 5 } 3
{ 3, 5 } 2

$F_2$

项集 支持度
{ 1, 3 } 2
{ 2, 3 } 2
{ 2, 5 } 3
{ 3, 5 } 2

$C_3$

项集 支持度
{ 1 , 2 , 3 } 1
{ 1 , 2 , 5 } 1
{ 1 , 3 , 5 } 1
{ 2 , 3 , 5 } 2

$F_3$

项集 支持度
{ 2 , 3 , 5 } 2

----------本文结束感谢您的阅读----------
坚持原创技术分享,您的支持将鼓励我继续创作!