﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-huqingcheng-文章分类-DM</title><link>http://www.blogjava.net/huqingcheng/category/46573.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 11 Oct 2010 14:18:03 GMT</lastBuildDate><pubDate>Mon, 11 Oct 2010 14:18:03 GMT</pubDate><ttl>60</ttl><item><title>Fp-tree 算法 引</title><link>http://www.blogjava.net/huqingcheng/articles/334206.html</link><dc:creator>披着狼皮的羊</dc:creator><author>披着狼皮的羊</author><pubDate>Sun, 10 Oct 2010 11:19:00 GMT</pubDate><guid>http://www.blogjava.net/huqingcheng/articles/334206.html</guid><wfw:comment>http://www.blogjava.net/huqingcheng/comments/334206.html</wfw:comment><comments>http://www.blogjava.net/huqingcheng/articles/334206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huqingcheng/comments/commentRss/334206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huqingcheng/services/trackbacks/334206.html</trackback:ping><description><![CDATA[<div class="tit"><a href="http://hi.baidu.com/zhengjiong/home">http://hi.baidu.com/zhengjiong/home</a> <br />
<br />
Fp-tree 算法</div>
<div class="date">2008年10月16日 星期四 下午 04:41</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text"><strong>Keywords</strong>: 数据挖掘,关联规则挖掘<br />
            <strong>Goal</strong>: 寻找频繁项目集<br />
            <strong>频繁项目集</strong>: 例,对于项目集L和事务数据库D,所有满足用户指定的最小支持度的项目集.<br />
            <strong>最大频繁项目集</strong>: 在频繁项目集中所有不被其他元素包含的频繁项目集.<br />
            <strong>支持度</strong>: L1属于L,L1在事务数据库D所占的百分比<br />
            <br />
            例子:<br />
            用户指定支持度为2<br />
            有下面的项目集:<br />
            <br />
            <div forimg="1"><img class="blogimg" alt="" src="http://hiphotos.baidu.com/zhengjiong/pic/item/663491a9e1e3cce71f17a237.jpg" border="0" small="0" /></div>
            <br />
            <em>A出现的次数有3次,大于2,属于频繁项目集.<br />
            AB出现次数也是3次,大于2,也属于频繁项目集.<br />
            所有项目集按照规则就是:{A,B,C,D,E,AB,AC,AD,BC,BD,BE,CD,CE,ABC,ABD,ACD,BCE,ABCD}<br />
            按照最大频繁项目集的定义,ABCD,BCE都没有被其他元素包含,所以最大频繁项目集为{ABCD,BCE}.<br />
            ABC被ABCD包含,所以它并不是最大频繁项目集.<br />
            频繁项目集是形成关联规则的基础,所以采用最优的算法来构造频繁项目集是主要的工作.</em><br />
            <br />
            <strong>所以引入了一种FP-tree算法:</strong><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2000年,HAN提出了一个称为FP-tree的算法.该算法只进行2次数据库扫描.它直接压缩数据库成一个频繁模式树,作后通过这课树生成关联规则.<br />
            算法关键步骤:第一步是利用事物数据库中的数据构造FP-tree;第二步是从FP_tree中挖掘频繁模式.<br />
            仅通过案例来说明如何构造:<br />
            最小支持度取3<br />
            <br />
            <div forimg="1"><img class="blogimg" alt="" src="http://hiphotos.baidu.com/zhengjiong/pic/item/07f9063fb352a7d97c1e7137.jpg" border="0" small="0" /></div>
            构造如下:<br />
            (1) 第一次扫描原始项目集,得到1-频项目集{f4,c4,a4,b3,m3,o3,p3}(数字表示其出现个数,不满足大于等于3的被排除)<br />
            (2) 创建ROOT节点,第二次扫描项目集,得到每个原始项目集中的满足支持度的分枝,例:1号项目集满足支持度的元素有f,c,a,m,p;2号项目集中满足支持度的元素有f,c,a,b,o等等,把他们都看做是树的分枝;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将<strong>整理后项目集</strong>中的元素构造为如下树<br />
            <br />
            <div forimg="1"><img class="blogimg" alt="" src="http://hiphotos.baidu.com/zhengjiong/pic/item/b3a820d3dceb12c4a8ec9a31.jpg" border="0" small="0" /></div>
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字母后面数字表示在公共前缀出现次数.根据该树可以回溯最低节点,找到对应节点的频繁模式:例,对于p来说,有三个回溯路径:{f,c,a,m,p}{f,c,a,o,p}{f,b,m,p} -- 这三个为p的条件模式基,因为这三个条件只包含一个频度节点&lt;c:3&gt;,所以产生的频度模式为cp:3<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下图表示挖掘过程<br />
            <br />
            <div forimg="1"><img class="blogimg" alt="" src="http://hiphotos.baidu.com/zhengjiong/pic/item/ae4fb509ebf573d43ac76331.jpg" border="0" small="0" /></div>
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这就是基本的FP-tree过程.对于恶意软件分类采用数据挖掘的方法还是可行的,希望在能尽管找到数据挖掘与恶意软件分类的具体实施过程.</div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/huqingcheng/aggbug/334206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huqingcheng/" target="_blank">披着狼皮的羊</a> 2010-10-10 19:19 <a href="http://www.blogjava.net/huqingcheng/articles/334206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关联规则(apriori algorithm)</title><link>http://www.blogjava.net/huqingcheng/articles/334205.html</link><dc:creator>披着狼皮的羊</dc:creator><author>披着狼皮的羊</author><pubDate>Sun, 10 Oct 2010 11:09:00 GMT</pubDate><guid>http://www.blogjava.net/huqingcheng/articles/334205.html</guid><wfw:comment>http://www.blogjava.net/huqingcheng/comments/334205.html</wfw:comment><comments>http://www.blogjava.net/huqingcheng/articles/334205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huqingcheng/comments/commentRss/334205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huqingcheng/services/trackbacks/334205.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://www.cnblogs.com/zgw21cn/ (DM)关联规则(apriori algorithm)(1) 关联规则的目的在于在一个数据集中找出项之间的关系，也称之为购物蓝分析 (market basket analysis)。例如，购买鞋的顾客，有10%的可能也会买袜子，60%的买面包的顾客，也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。 关...&nbsp;&nbsp;<a href='http://www.blogjava.net/huqingcheng/articles/334205.html'>阅读全文</a><img src ="http://www.blogjava.net/huqingcheng/aggbug/334205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huqingcheng/" target="_blank">披着狼皮的羊</a> 2010-10-10 19:09 <a href="http://www.blogjava.net/huqingcheng/articles/334205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据挖掘算法-Apriori Algorithm（关联规则）--引</title><link>http://www.blogjava.net/huqingcheng/articles/334199.html</link><dc:creator>披着狼皮的羊</dc:creator><author>披着狼皮的羊</author><pubDate>Sun, 10 Oct 2010 10:32:00 GMT</pubDate><guid>http://www.blogjava.net/huqingcheng/articles/334199.html</guid><wfw:comment>http://www.blogjava.net/huqingcheng/comments/334199.html</wfw:comment><comments>http://www.blogjava.net/huqingcheng/articles/334199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huqingcheng/comments/commentRss/334199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huqingcheng/services/trackbacks/334199.html</trackback:ping><description><![CDATA[<h2><a id="ctl10_TitleUrl" href="http://www.cnblogs.com/gaizai/archive/2010/03/31/1701573.html">数据挖掘算法-Apriori Algorithm（关联规则）</a> </h2>
<p>　　本人刚开始学数据挖掘，虽然之前看过一本《数据挖掘原理与应用：SQL Server 2005数据库》，但是只是大体上了解了一些数据挖掘的概念，并没有深入去了解一个算法。前段时间开始比较深入的学习，就以关联规则作为学习的入口点。这才有了这篇文章。</p>
<p>　　Apriori algorithm是关联规则里一项基本算法。是由Rakesh Agrawal和Ramakrishnan Srikant两位博士在1994年提出的关联规则挖掘算法。关联规则的目的就是在一个数据集中找出项与项之间的关系，也被称为购物蓝分析 (Market Basket analysis)，因为&#8220;购物蓝分析&#8221;很贴切的表达了适用该算法情景中的一个子集。</p>
<p>　　关于这个算法有一个非常有名的故事："尿布和啤酒"。故事是这样的：美国的妇女们经常会嘱咐她们的丈夫下班后为孩子买尿布，而丈夫在买完尿布后又要顺手买回自己爱喝的啤酒，因此啤酒和尿布在一起被购买的机会很多。这个举措使尿布和啤酒的销量双双增加，并一直为众商家所津津乐道。</p>
<p>&nbsp;</p>
<p><strong>【1】一些概念和定义</strong><br />
</p>
<ul>
    <li>资料库（Transaction Database）：存储着二维结构的记录集。定义为：D <br />
    <li>所有项集（Items）：所有项目的集合。定义为：I。
    <li>记录（Transaction ）：在资料库里的一笔记录。定义为：T，T &#8712; D
    <li>项集（Itemset）：同时出现的项的集合。定义为：k-itemset（k项集），k-itemset ? T。除非特别说明，否则下文出现的k均表示项数。
    <li>支持度（Support）：定义为 supp(X) = occur(X) / count(D) = P(X)。 </li>
</ul>
<div class="cnblogs_code">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;1.&nbsp;解释一：比如选秀比赛，那个支持和这个有点类似，那么多人（资料库），其中有多少人是选择（支持）你的，那个就是支持度；<br />
&nbsp;&nbsp;&nbsp;2.&nbsp;解释二：在100个人去超市买东西的，其中买苹果的有9个人，那就是说苹果在这里的支持度是&nbsp;9，9/100；<br />
&nbsp;&nbsp;&nbsp;3.&nbsp;解释三：P(X)，意思是事件X出现的概率；<br />
&nbsp;&nbsp;&nbsp;4.&nbsp;解释四：关联规则当中是有绝对支持度（个数）和相对支持度（百分比）之分的。</span></div>
</div>
<ul>
    <li>置信度（Confidence/Strength）： 定义为 conf(X-&gt;Y) = supp(X &#8746; Y) / supp(X) = P(Y|X)。 </li>
</ul>
<div class="cnblogs_code">
<div><!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><span style="color: #000000">在历史数据中，已经买了某某（例如：A、B）的支持度和经过挖掘的某规则（例如：A=&gt;B）中A的支持度的比例，也就是说买了A和B的人和已经买了&nbsp;A的人的比例，这就是对A推荐B的置信度（A=&gt;B的置信度）&lt; /span&gt;</span></div>
</div>
<ul>
    <li>候选集（Candidate itemset）：通过向下合并得出的项集。定义为C[k]。
    <li>频繁集（Frequent itemset）：支持度大于等于特定的最小支持度（Minimum Support/minsup）的项集。表示为L[k]。注意，频繁集的子集一定是频繁集。
    <li>提升比率（提升度Lift）：lift(X -&gt; Y) = lift(Y -&gt; X) = conf(X -&gt; Y)/supp(Y) = conf(Y -&gt; X)/supp(X) = P(X and Y)/(P(X)P(Y)) </li>
</ul>
<div class="cnblogs_code">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000">经过关联规则分析后，针对某些人推销（根据某规则）比盲目推销（一般来说是整个数据）的比率，这个比率越高越好，我们称这个规则为强规则；</span></div>
</div>
<ul>
    <li><strong>剪枝步</strong><br />
    </li>
</ul>
<div class="cnblogs_code">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000">只有当子集都是频繁集的候选集才是频繁集，这个筛选的过程就是剪枝步；</span></div>
</div>
<p>&nbsp;</p>
<p><strong>【2】</strong><strong>Apriori优化：Fp-tree 算法</strong><br />
</p>
<p>&nbsp;</p>
<ul>
    <li>关键点：以树形的形式来展示、表达数据的形态；可以理解为水在不同河流分支的流动过程；</li>
</ul>
<ul>
    <li>生成Fp-tree的几个点：</li>
</ul>
<ol>
    <li>扫描原始项目集；<br />
    <li>排列数据；&nbsp;
    <li>创建ROOT节点；
    <li>按照排列的数据进行元素的流动；
    <li>节点+1； <br />
    </li>
</ol>
<ul>
    <li>&nbsp;更多内容请自行学习</li>
</ul>
<p><br />
</p>
<p><strong>【3】Apriori优化：垂直数据分布</strong></p>
<ul>
    <li>&nbsp;关键点：相当于把原始数据进行行转列的操作，并且记录每个元素的个数<br />
    </li>
</ul>
<ul>
    <li>&nbsp; 更多内容请自行学习</li>
</ul>
<p>&nbsp;</p>
<p><strong><a href="http://www.kankan.cn/SuperLibtary/freearticle.asp?AID=9489" target="_blank">【4】摘要：数据挖掘中关联规则算法的研究 </a></strong></p>
<p>Apriori核心算法过程如下： </p>
<ol>
    <li>过单趟扫描数据库D计算出各个1项集的支持度，得到频繁1项集的集合。
    <li>连接步：为了生成，预先生成,由2个只有一个项不同的属于的频集做一个（k-2）JOIN运算得到的。
    <li>剪枝步：由于是的超集，所以可能有些元素不是频繁的。在潜在k项集的某个子集不是中的成员是，则该潜在频繁项集不可能是频繁的可以从中移去。
    <li>通过单趟扫描数据库D，计算中各个项集的支持度，将中不满足支持度的项集去掉形成。 </li>
</ol>
<p>&nbsp;</p>
<p>　　通过迭代循环，重复步骤2～4，直到有某个r值使得为空，这时算法停止。在剪枝步中的每个元素需在交易数据库中进行验证来决定其是否加入，这里的验证过程 是算法性能的一个瓶颈。这个方法要求多次扫描可能很大的交易数据库。可能产生大量的候选集，以及可能需要重复扫描数据库，是Apriori算法的两大缺点。</p>
<p>　　目前，几乎所有高效的发现关联规则的并行数据挖掘算法都是基于Apriori算法的，Agrawal和Shafer 提出了三种并行算法：计数分发（Count Distribution）算法、数据分发（Data Distribution）算法和候选分发（Candidate Distribute）算法。</p>
<p>&nbsp;</p>
<p><strong>【5】总结</strong></p>
<ol>
    <li>例子就暂时不举例，因为网上的这些例子也是比较多的；<br />
    <li>度量标准还有很多很多很多，如：Lift/Interest、All-confidence、Consine、Conviction、Jaccard、Leverage、Collective strength等等。
    <li>频繁数据模型的分类比较多，需要慢慢理解；<br />
    </li>
</ol>
<p>&nbsp;</p>
<p><strong>参考文献</strong></p>
<p><a href="http://files.cnblogs.com/gaizai/vldb94Apriori.rar" target="_blank">两位博士的论文下载：《Fast Algorithms for Mining Association Rules》</a><br />
</p>
<p><a href="http://files.cnblogs.com/gaizai/Lecture16.rar" target="_blank">一篇不错的文章下载：在交易数据库中发现关联规则</a><br />
</p>
<p><a href="http://www.cnblogs.com/zgw21cn/archive/2009/05/31/1492809.html" target="_blank">Blog：关联规则(apriori algorithm)(1)&nbsp;</a></p>
<p><a href="http://www.cnblogs.com/zgw21cn/archive/2009/05/31/1492809.html" target="_blank" &="" gt;关联="" 规则(="" apriori=""  algorithm)(1)&nbsp;=""></a></p>
<p><a href="http://www.cnblogs.com/zgw21cn/archive/2009/05/31/1492809.html" target="_blank">Blog：数据挖掘中关联规则算法的研究 </a></p>
<p><a href="http://hi.baidu.com/zhengjiong/blog/item/68631afc8dc620fbfc037fe5.html" target="_blank">Blog：Fp-tree 算法</a><br />
</p>
 <img src ="http://www.blogjava.net/huqingcheng/aggbug/334199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huqingcheng/" target="_blank">披着狼皮的羊</a> 2010-10-10 18:32 <a href="http://www.blogjava.net/huqingcheng/articles/334199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>