﻿<?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-weidagang2046的专栏-文章分类-DataMining</title><link>http://www.blogjava.net/weidagang2046/category/1208.html</link><description>物格而后知致</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:32:16 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:32:16 GMT</pubDate><ttl>60</ttl><item><title>遗传算法小生境技术简介</title><link>http://www.blogjava.net/weidagang2046/articles/84798.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Fri, 01 Dec 2006 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/84798.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/84798.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/84798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/84798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/84798.html</trackback:ping><description><![CDATA[生物学上，小生境是指特定环境下的一种组织结构。在自然界中，往往特征，形状相似的物种相聚在一起，并在同类中交配繁衍后代。在SGA 中，交配完全是随机的，在进化的后期，大量的个体集中于某一极值点上，在用遗传算法求解多峰值问题时，经常只能找到个别的几个最优值，甚至往往得到是局部最优解。利用小生境我们可以找到全部最优解。<br />小生境技术就是将每一代个体划分为若干类，每个类中选出若干适应度较大的个体作为一个类的优秀代表组成一个群，再在种群中，以及不同种群中之间，杂交，变异产生新一代个体群。同时采用预选择机制和排挤机制或分享机制完成任务。基于这种小生境的遗传算法（Niched Genetic Algorithms，NGA），可以更好的保持解的多样性，同时具有很高的全局寻优能力和收敛速度，特别适合于复杂多峰函数的优化问题。<br />模拟小生境技术主要建立在常规选择操作的改进之上。Cavichio 在1970年提出了基于预选择机制的选择策略，其基本做法是：当新产生的子代个体的适应度超过其父代个体的适应度时，所产生的子代才能代替其父代而遗传到下一代群体中去，否则父代个体仍保留在下一代群体中。由于子代个体和父代个体之间编码结构的相似性，所以替换掉的只是一些编码结构相似的个体，故它能够有效的维持群体的多样性，并造就小生境的进化环境。De Jong在1975年提出基于排挤机制的选择策略，其基本思想源于在一个有限的生存环境中，各种不同的生物为了能够延续生存，他们之间必须相互竞争各种有限的生存资源。因此，在算法中设置一个排挤因子CF（一般取CF=2或3），由群体中随机选取的1/CF 个个体组成排挤成员，然后依据新产生的的个体与排挤成员的相似性来排挤一些与预排挤成员相类似的个体，个体之间的相似性可用个体编码之间的海明距离来度量。随着排挤过程的进行，群体中的个体逐渐被分类，从而形成一个个小的生成环境，并维持群体的多样性。<br />  Goldberg等在1987年提出了基于共享机制（Sharing）的小生境实现方法。这种实现方法的基本思想是：通过反映个体之间的相似程度的共享函数来调节群体中各个个体的适应度，从而在这以后的群体进化过程中，算法能够依据这个调整后的新适应度来进行选择运算，以维持群体的多样性，创造出小生境的进化环境。<br />共享函数（Sharing Function）是表示群体中两个个体之间密切关系程度的一个函数，可记为S（d ）其中表示个体i和j之间的关系。例如，个体基因型之间的海明距离就可以为一种共享函数。这里，个体之间的密切程度主要体现为个体基因型的相似性或个体表现型的相似性上。当个体之间比较相似时，其共享函数值就比较大；反之，当个体之间不太相似时，其共享函数值比较小。<br />共享度是某个个体在群体中共享程度的一中度量，它定义为该个体与群体内其它各个个体之间的共享函数值之和，用S 表示：<br />S = （i=1， ，M）<br />在计算出了群体中各个个体的共享度之后，依据下式来调整各个个体的适应度：<br />F （X）=F （X）/S （i=1， ，M）<br />由于每个个体的遗传概率是由其适应度大小来控制的，所以这种调整适应度的方法就能够限制群体中个别个体的大量增加，从而维护了群体的多样性，并造就了一种小生境的进化环境。<br />下面介绍一个基于小生境概念的遗传算法。这个算法的基本思想是：首先两两比较群体中各个个体之间的距离，若这个距离在预先的距离L 之内的话，在比较两者之间的适应度大小，并对其中适应值较低的个体施加一个较强的罚函数，极大地降低其适应度，这样，对于在预先指定的某一距离L之内的两个个体，其中较差的个体经处理后其适应度变得更差，他在后面的进化过程被淘汰的概率就极大。也就是说，在距离L 内将只存在一个优良个体，从而既维护了群体的多样性，又使得各个个体之间保持一定的距离，并使得个体能够在整个约束的空间中分散开来，这样就实现了一种小生境遗传算法。<br />这个小生境算法的描述如下：<br />算法 NicheGA （1）设置进化代数计数器；随机生成M个初始群体P（t），并求出各个个体的适应度F （i=1，2，M）。（2） 依据各个个体的适应度对其进行降序排列，记忆前N个个体（N&lt;M）.(3) 选择算法。对群体P（t）进行比例选择运算，得到P （t）。（4）交叉选择。对选择的个体集合P （t） 作单点交叉运算，得到P （t）。（5）变异运算。对P （t）作均匀变异运算，得到P （t）。（6）小生境淘汰运算。将第（5）步得到的M个个体和第（2）步所记忆的N个个体合并在一起，得到一个含有M+N 个个体的新群体；对着M+N个个体，按照下式得到两个个体x 和x 之间的海明距离：|| x - x ||= ( )当|| x - x ||&lt;L时，比较个体x 和个体x 的适应度大小，并对其中适应度较低的个体处以罚函数： Fmin(x ，x )=Penalty（7）依据这M+N个个体的新适应度对各个个体进行降序排列，记忆前N个个体。（8）终止条件判断。若不满足终止条件，则：更新进化代数记忆器t t+1， 并将第（7）步排列中的前M个个体作为新的下一代群体P(t),然后转到第（3）步：若满足终止条件，则：输出计算结果，算法结束。<br />[例] Shubert 函数的全局最优化计算。<br />min f(x , x )={ } { }<br />s.t. -10 x 10（i=1，2）<br />上述函数共有760个局部最优点，其中有18个是全局最优点，全局最优点处的目标函数值是f （x ， x ）=-186.731。<br />用上述小生境遗传算法求解该例题时，可用下式进行目标函数值到个体适应度的变换处理：<br />F（x ， x ）= <br />L=202（二进制编码串长度，其中每个变量用10位二进制编码来表示）<br />M=50<br />T=500<br />p =0.1<br />p =0.1<br />L=0.5(小生境之间的距离参数)<br />Penlty=10 （罚函数）<br />使用上述参数进行了50次，试算，每次都可得到许多全局最优解下表为其中一次运算所得到的最好的18个个体。从该表可以看出，从小生境的角度来数，该算法得到了一个较好的结果。上述算法的特点保证了在一个函数峰内只存在一个较优的个体，这样每一个函数峰就是一个小生境。<br />基于小生境遗传算法的Shubert函数优化算法计算结果<br />个体标号  x   x   f（x ， x ）<br />1  5.4828  4.8581  -186.731<br />2  5.4830  -7.7083   -186.731<br />3  4.8581  5.4831   -186.731<br />4  4.8581  -7.0838  -186.731<br />5  -4.4252  -7.4983  -186.731<br />6  -7.0832  -7.0838  -186.731<br />7  5.4827  -1.4249  -186.731<br />8  0.8580  5.4831  -186.731<br />9  4.8580  -0.8009  -186.730<br />10  -0.8009  -7.7084  -186.730<br />11  -0.8009  4.8581  -186.730<br />12  -7.7088  -0.7999  -186.730<br />13  -7.7088  -7.0831  -186.730<br />14  -1.4256  -0.8009  -186.730<br />15  -0.8011  -1.4252  -186.730<br />16  -7.7075  5.4834  -186.730<br />17  -7.7088  4.8579  -186.730<br />18  -7.0825  -1.4249  -186.730<br />下面再介绍一种隔离小生境技术的遗传算法<br />　 隔离小生境技术的基本概念及进化策略依照自然界的地理隔离技术,将遗传算法的初始群体分为几个子群体,子群体之间独立进化,各个子群体的进化快慢及规模取决于各个子群体的平均适应水平.由于隔离后的子群体彼此独立,界限分明,可以对各个子群体的进化过程灵活控制。生物界中,竞争不仅存在于个体之间,种群作为整体同样存在着竞争,适者生存的法则在种群这一层次上同样适用.在基于隔离的小生境技术中,是通过将种群的规模同种群个体平均适应值相联系来实现优胜劣汰、适者生存这一机制的.子群体平均适应值高,则其群体规模就大,反之,群体规模就小.生物界在进化过程中,适应环境的物种能得到更多的繁殖机会,其后代不断地增多,但这种增加不是无限制的,否则就会引起生态环境的失衡.在遗传算法中,群体的总体规模是一定的,为了保证群体中物种的多样性,就必须限制某些子群体的规模,称子群体中所允许的最大规模为子群体最大允许规模(maximum allowed scale),记为S .生物界中同样会出现某些物种因不适应环境数量逐渐减少,直至灭绝的现象.在隔离小生境机制中,为了保持群体的多样性,有时需要有意识地保护某些子群体,使之不会过早地被淘汰,并保持一定的进化能力.子群体的进化能力是和子群体的规模相联系的,要保证子群体的进化能力,必须规定每一子群体生存的最小规模,称为子群体最小生存规模(minimum live scale),记为S .在群体进化过程中,如果某一子群体在规定的代数内,持续表现最差,应该使这个子群体灭绝,代之以搜索空间的新解,这一最劣子群体灭绝的机制,定义为劣种不活(the worst die).子群体在进化过程中,如果出现两个子群体相似或相同的现象,则去掉其中的一个,代之以搜索空间的新解,这种策略称为同种互斥或种内竞争(intraspecific competition).解群中出现的新的子群体,在进化的初期往往无法同已经得到进化的其它子群体相竞争,如果不对此施加保护,这些新解往往在进化的初期就被淘汰掉,这显然是我们所不希望的.为了解决这个问题,必须对新产生的解加以保护,这种保护新解的策略叫幼弱保护(immature protection).子群体在进化过程中,如果收敛到或接近局部最优解,会出现进化停滞的现象,此时应当以某种概率将该子群体去掉,代之以搜索空间的新解,此种策略称为新老更替(the new superseding the old).在进化过程中,表现最优的个体进化为最优解的概率最大,应当使它充分进化,故新老更替策略不能用于最优子群体,这种做法称为优种保留(the best live).优种保留可以作用于最好的一个子群体,也可以作用于最好的几个子群体. <br />基于隔离小生境技术的遗传算法步骤<br />1)编码:针对具体问题,选择合适的编码方案,完成问题解空间向遗传算法解空间的转化. <br />2)产生初始群体:随机产生N个初始个体.<br />3)初始群体隔离:将N个初始个体均分给K个子群体,每个子群体含有的个体数均为N/K.<br />4)计算适应值:计算群体中所有个体的适应值.并保存适应值最高的个体.<br />5)确定子群体规模:子群体的规模同子群体的平均适应值相关,子群体的平均适应值越大,其在下一代中拥有的个体就越多;反之,在下一代中拥有的个体就少.但数目必须满足最大允许规模和最小保护规模的限制,即第t+1代第k个子群体的规模n (t+1)满足S ≤n (t+1) ≤S .<br />确定子群体规模的具体方法如下,首先给每个子群体都预分配S 个个体,剩下的个体根据子群体的平均适应值利用赌轮法选择,直到总的群体数量达到N为止.子群体的平均适应值一般可简单取为f (t)= (1)<br />式中f (t)为t代第k个子群体的平均适应值;f (t)为t代第k个子群体中第i个个体的适应值; n (t+1)为t代第k个子群体的规模.子群体k第t+1代的规模n (t+1)为：　　<br />n (t+1)=N . f (t)/ （2）<br />子群体规模的确定也可以根据其平均适应水平用赌轮法确定.<br />6)保护解除判定:对群体中施加保护的群体,进行保护解除判定,对满足保护解除条件的,撤除保护.<br />7)劣种不活判定:对解群中没有保护而连续几代表现又最差的群体,予以剔除并产生等规模的新子群体.<br />8)同种互斥判定:随机挑选出两个子群体,依据某种原则判定其相似程度,对满足相似条件的两个子群体,去掉其中的一个,产生同等规模的新解.<br />9)新老更替判定:判定解群中是否存在已经进化停滞的子群体,如果有,进行新老更替,产生同等规模的新解,但对包含最优个体的子群体要保留(最优保留机制).<br />10)重新计算适应值:对新产生的子群体计算适应性值,并施加幼弱保护措施.<br />11)子群体进化:由于子群体的规模同其在群体中的平均表现水平相联系,故子群体的规模是不断变化的.<br />根据公式(2)确定的规模,选择出子群体的繁殖个体,利用交叉和变异算子产生下一代解群.<br />12)收敛性判定,如果满足收敛性条件,或已经进化了规定的代数,则结束进化过程;否则返回第4步。<br />除了上面的还有下面几种常用的的小生境算法：<br />1 确定性拥挤算法<br />确定性拥挤（Deterministic crowding, DC）算法由Mahfoud 提出。该算法属于拥挤算法范畴，采用子个体与父个体直接进行竞争的模式，竞争的内容包括适应值和个体之间的距离。算法的过程如下：<br />确定性拥挤算法（重复G 代）<br />重复下列步骤N/2次：<br />（1）用放回的方式随机选择两个父个体p 和p 。<br />（2）对其进行杂交和变异，产生两个个体c 和c 。<br />（3）如果[d(p ，c )+d(p ，c )] [d(p ，c )+d(p ，c )]，则<br />如果f（c ）&gt;f（p ）,则用c 代替p ，否则保留p 。<br />如果f（c ）&gt;f（p ），则用c 替换p ，否则保留p 。<br />如果f（c ）&gt;f（p ），则用c 替换p ，否则保留p 。<br />如果f（c ）&gt;f（p ），则用c 替换p ，否则保留p 。<br />其中，N 是种群规模，的d（i，j）是个体i 和个体j 之间的距离。<br />2 限制锦标赛算法<br />限制锦标赛选择（Restricted tournament selection RTS）算法由Harik 提出。该算法属于拥挤算法范畴，采用了个体与种群中其它个体进行竞争的模式，竞争的内容包括适应值和个体之间的距离。该算法的过程如下：<br />限制锦标赛算法（重复G代）<br />重复下列步骤N/2次：<br />（1）  用有放回的方式随机选择两个父个体p 和p 。<br />（2）  对其进行杂夹和变异，产生两个子个体c 和才c 。<br />（3）  分别为c 和c从当前的种群中随机的选择出w个个体。<br />（4） 不失一般性，设d 和d 分别是w个个体的中与c 和c 距离最近的两个个体。<br />（5） 如果f（c ）&gt;f（d ），则用c 替d 换，否则保留d 。<br />如果f（c ）&gt;f（d ），则用c 替换d ，否则保留d 。<br />3多小生境拥挤算法<br />多小生境拥挤算法（Multi-niche crowding，MNC）由Cedeno提出。该算法属拥挤算法的范畴，采用种群中的若干个体相互竞争的模式，竞争的内容包括适应值和个体之间的距离。竞争选择出的老个体被新个体产生的子个体替换。算法的过程如下：<br />多小生境拥挤算法（重复G 代）<br />重复下列步骤N/2次：<br />（1）  用有放回的方式随机选父个体p 。<br />（2）  从种群中随机选择C 个体作为p 的交配候选集，从中选出与p 最接近的个体p 。<br />（3）  对p 和p 进行杂交和变异，产生两个个体c 和c 。<br />（4）  分别为c 和c 从中当前种群中各随机选择出C 群个体，每群个体包含w个个体。<br />（5）  每一群个体都选出一个与对应字个体距离最近的个体。这样就为每个个体产生了C 个替换候选个体。<br />（6）  不失一般性，设d 和d 是两个替换候选集中适应值最低的个体。<br />（7）  用c 替换d ，用c 替换d 。<br />Cedeno 还给出了C ，w和C 的最优参数值。C 应该在区间[2，4]内，C 和w至少应该两倍于用户希望找到的全局峰个数。该算法的步骤2提出了一中基于试探性的方法的限制交配策略。<br />4 标准适应值共享算法<br />标准适应值共享算法（Standard fitness sharing SH）由Goldberg 和Richardson 提出。该算法属于适应值共享算法范畴，事先需要给出解空间中小生境的半径，并假设解空间中峰半径均相同。算法的过程如下：<br />标准的适应值共享算法（重复G 代）<br />（1）  计算种群中个体之间的共享函数值sh（d ）<br />sh（d ）= <br />其中， 是事先给出的峰半径，d 是个体i和个体j之间的距离， 是控制共享函数形状的参数，一般取 =1（线形共享函数）。两个个体之间共享函数值越大，则两个个体越接近。<br />（2）  计算种群中个体的小生境数m <br />m = <br />其中，N 是种群规模。个体的小生境数越大，则该个体周围绕着越多其它个体。<br />（3）  计算种群中个体共享后的适应值f <br />f =f / m <br />（4）  用个体共享后的适应值进行选择，杂交和变异出新的个体，生成新一代种群。<br />Deb和Goldberg 在假设解空间中峰均匀分布并且峰半径相同的前提下，提出计算峰半径的计算公式。此外它们还提供了一种基于峰半径的限制交配策略，从而保证所有的杂交均在同一物种进行，确保了后代和父母的均属于同一小生境。标准适应值共享算法计算距离的时间复杂度为O（N ）。<br />5 清除算法<br />清除（Clearing）算法由Petrowski 提出。该算法属于适应值共性算法范畴，事先需要给出解空间的小生境半径 （重要参数）和小生境的容量 （次要参数），并假设解空间中峰值半径均相同。算法的过程如下：<br />清除算法（G）<br />（1）  按照适应值对个体进行降序排列。<br />（2）  将第一个体指定为第一个小生境中心。<br />（3）  从第二个个体开始顺序执行下列步骤到最后一个个体：<br />（3.1）如果当前个体到所有已指定小生境中心的距离均大于，则该个体被指定为一个新的小生境中心。该个成为优胜者。<br />（3.2）如果当前个体到某个已指定的小生境中心的距离小于，并且该小生境个数小于，则该个体加入到该小生境中去，该小生境的个体总数增加1。该个体成为优胜者。<br />（3.3）其它个体均为失败者。<br />（3.4）维持所有优胜者的适应度不变，将所有失败者的适应值置为0。<br />（4）用个体修改后的适应值进行选择，杂交和变异出新个体，生成新一代种群。<br />清除算法计算距离的时间复杂度为O（kN），其中k是该算法维持的小生境数量。如果将优胜者的小生境数看为一，而将失败者的小生境看作无穷大，则清除算法也可看作标准适应值共享算法的改进。<br />6 结合适应值共享的自适应k均值聚类算法<br />结合适应值共享的自适应算法k均值聚类算法（Adaptive k-mean clustering with fitness sharing）算法由Yin 和German提出。该算法属于适应值共性算法范畴，事先需要给出解空间中小生境中新建的最小距离 和小生境中的个体到该小生境中心之间的最大距离 。解空间中峰半径可能不相同。算法的过程如下：结合适应值共享的自适应k均值均类算法（重复G代）<br />（1）  按照适应值对个体进行降序排列。<br />（2）   产生在[1，N]之间的随机整数k（初始小生境个数）。<br />（3）  将前k个个体分别放入不同的小生境中并成为小生境中心。确保所有 小生境中心间距离大于 ，如果不能满足这一条件，则合并小生境，新的小生境中心就是该小生境中所有个体的中心。<br />（4）  对于其它N-k个个体中的每一个，计算其与当前所有想生境中心之间 的距离。如果距离大于 ，则生成新的小生境，该个体成为新小生境的中心。否则将该个体安排到距离最近的小生境中去。据需要确保所有小生境中心间的距离均大于 ，如果不能满足这一条件，则需要合并小生境。<br />（5）  所有个体均被安置完毕后，固定小生境的中心，将所有个体按照最小 <br />距离原则安排到最近的小生境中去。<br />（6）  计算计算种群个体的小生境数m <br />m =n - n （d /2 ） 若x C <br />其中，n 是第c个小生境中包含个个体总数，d 是个体i与它归属的小生境中心之间的距离，x 是第i个个体，C 第c 个小生境的个体基， 是控制函数形状的参数，通常 =1。<br />（7）  用公式计算个体共享后的适应值。<br />（8）  用个体共享后的适应值进行选择，杂交和变异出新的个体，生成新一 代个体种群。<br />结合适应值共享的自适应性k均值聚类算法计算距离的时间复杂度为O（Kn）。<br />7 动态小生境共享算法<br />动态小生境共享算方法（Dynamic niche sharing）是由Miller和Shaw 提出。该算法属于适应值共享算法范畴，事先需要给出解空间中小生境的半径 和小生境的数量k。算法的过程如下；<br />动态小生境共享算法（重复G代）<br />（1）  按照适应值对个体进行降序排列。<br />（2）  将第一个个体指定为第一个小生境中心。<br />（3）  从第二个个体开始顺序执行下列步骤到最后一个个体：<br />（3.1）如果当前个体与所有已指定的小生境中心之间的距离大于 ，而且已指定的小生境数量小于k，则形成一个新的小生境，该个体成为新小生境的中心。<br />（3.2）如果当前个体与所有小生境中心之间的距离均大于 ，而且已指定的小生境数量不小于k，则该个体成为独立个体。<br />（4） 对于那些属于某个小生境的个体，其小生境数就是它所属的小生境中个体的数量。对于那些独立个体，采用公式计算小生境数。<br />（5） 用公式计算个体共享后的适应值。<br />（6） 用共享后的适应值进行选择，杂交和变异出新的个体，生成新一代种群。动态小生境共享算法计算距离的时间复杂度为O（Kn）。<br />8 自适应小生境算法<br />自适应小生境算法（Adaptive nicking）由Goldberg 和 Wang 提出。该算法属于适应值共享算法范畴，事先需要给出解空间中小生境的半径 和小生境的数量k。算法包含两个分别被称为顾客和商家的个体群，利用这两个个体群的共同演化实现多峰优化的目的。顾客群类似于其它适应值共享算法中的种群，而商家群则代表搜索空间中峰的集合。商家群的个体数量k略大于其它适应值共享算法中的小生境树立功能。顾客群中的个体的适应值与其它适应值共享算法中个体的适应值相同，而商家群中的个体的适应值是属于该商家所有顾客的适应值之和。<br />算法需要首先在搜索空间中随机放置商家群的个体，其余的过程如下；<br />自适应小生境算法（重复G 代）<br />（1）  将每一个顾客群中的个体都安排到最近的商家中去。<br />（2）  计算所有顾客的小生境数（其归属的商家所拥有的顾客数量）。<br />（3）  用公式计算顾客群的个体共享后的适应值。<br />（4）  用顾客群中个体共享后的适应值尽心选择，杂交和变异出新的个体，生成新一代顾客群。<br />（5）  顺序选择每一个商家群中的个体并对其进行变异操作以产生新的商家。如果新商家的适应值比老商家的适应高，而且与其它商家之间的距离均小于，则新商家代替老商家。否则进行另外一次变异操作，直到产生可以替换的新商家或变异操作的次数超过指定的最大变异为止。<br />自适应小生境算法计算距离的时间的复杂度为O(Kn).<br /><br />from: <a href="http://qbwh.com/viewthread_123913.html">http://qbwh.com/viewthread_123913.html</a><img src ="http://www.blogjava.net/weidagang2046/aggbug/84798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2006-12-01 12:08 <a href="http://www.blogjava.net/weidagang2046/articles/84798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google排名优化－面向搜索引擎的网站设计</title><link>http://www.blogjava.net/weidagang2046/articles/15637.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Sun, 16 Oct 2005 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/15637.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/15637.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/15637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/15637.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/15637.html</trackback:ping><description><![CDATA[<P>关键词：Google PageRank "link popularity" "website promotion" "optimization for search engine"&nbsp;</P>
<P>内容摘要：<BR>目前中文网站在整个互联网中的影响还比较小，这主要是由于中文网站总体的水平（技术上，内容上）都还相对落后造成的，最主要的表现有：<BR></P>
<OL>
<LI>行业知识：不知道搜索引擎对吸引的新用户的重要性，在搜索引擎排名服务中追求“傻瓜相关”，购买一些其实没有太多实际意义的行业关键词。其实能够用户输入的关键词越多，其目标性越强，这样的客户价值越高。用户能够直接定位到产品具体内容页比到网站首页有价值的多； 
<LI>发布技术：网站的网页进入Google的索引量非常小，主要是由于大量使用动态网页造成的。需要将<A href="http://www.chedong.com/tech/google_url.html">动态页面链接改写成静态链接</A>； 
<LI>页面设计：页面标题重复，关键词不突出，过渡使用JavaScript脚本/图片/Flash等不适合搜索引擎索引的非文本形式； </LI></OL>而以上这些问题的根本原因还是网站自身缺乏<A href="http://www.chedong.com/tech/awstats.html">日志统计分析</A>造成：因此无法看到SEO对网站自身产生的巨大影响。 <BR>
<P>SEO的目的是通过一些简单的策略，让网站自身的水平在互联网中有一个真实的体现。<BR>网站结构设计中面向搜索引擎的优化注意事项包括：</P>
<UL>
<LI><A href="http://www.chedong.com/tech/google.html#link">链接引用的重要性；</A> 
<LI><A href="http://www.chedong.com/tech/google.html#keyword">如何突出关键词：网页标题、主题的设计；</A> 
<LI><A href="http://www.chedong.com/tech/google.html#web">页面及站点结构设计注意事项；</A> 
<LI><A href="http://www.chedong.com/tech/google.html#stat">以及站点访问统计的重要性等；</A> 
<LI><A href="http://www.chedong.com/tech/google.html#guide">Google的站点设计指南</A> </LI></UL>（注意：本网站设计本身就利用了其中一些方法）。 
<H2>什么是PageRank</H2>
<P>Google等新一带搜索引擎的优势之一在于不仅索引量很大，而且还将最好的结果排在搜索结果的最前面，具体的原理可以参考<A href="http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html">Google の秘密 - PageRank 徹底解説</A>一文，PageRank简单的说类似于科技论文中的引用机制：谁的论文被引用次数多，谁就是权威。在互联网上PageRank就是基于网页中相互链接关系的分析得出的。<BR></P>
<P>此外，从计算方法角度阐述PageRank机制还有这篇文章：<A href="http://pr.efactory.de/">http://pr.efactory.de/</A>里面有更详细的PageRank算法说明和各种清晰的小型个案分析：<BR><BR>比如：子页中导航条的重要性<BR>B &lt;=&gt; A =&gt; C&nbsp;&nbsp; <BR>Vs&nbsp;&nbsp; <BR>B &lt;=&gt; A &lt;=&gt; C&nbsp;&nbsp; （好）<BR><BR>页面数量因素：<BR>B &lt;=&gt; A &lt;=&gt; C<BR>Vs<BR>F &lt;=\&nbsp;&nbsp; /=&gt; G<BR>B &lt;=&gt; A &lt;=&gt; C&nbsp;&nbsp; （好）<BR>D &lt;=/&nbsp;&nbsp; \=&gt; E<BR><BR>一个意想不到的结论：<BR>(B &lt;=&gt; A &lt;=&gt; C)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( E &lt;=&gt; D &lt;=&gt; F)<BR>Vs<BR>(B &lt;=&gt; A &lt;=&gt; C)&nbsp; &lt;=&gt; ( E &lt;=&gt; D &lt;=&gt; F)<BR>PageRank升高的只是被链接的2个首页A和D，而网站子页面的PageRank平均会略有下降。同时：一个网站进入Google的索引量越大其受类似因素影响越小。<BR>PageRank不对称的页面互链：<BR>Google会用BadRank之类的算法进行纠正，而且一个网页着有来自“与其自身不相称”的高PageRank站点的链接，而自身又缺少足够数量和质量的反相链接的话，其PageRank会自动降低为0，A(pr=7) &lt;=&gt; B(pr=0)<BR>简单的说就是：偶尔要被权威站点反相链接不算数，要被足够多的权威站点引用才能提高自身网页的PageRank。<BR><A href="http://mes.nju.edu.cn/research/papers/Survy03-10.doc">Web超链分析算法综述（南京大学论文）</A> 更多论文可以通过搜索：“filetype:pdf google pagerank anchor text bayesian”得到</P>
<H2><B><A name=link>链接就是一切</A></B></H2>
<P>在互联网的海洋中，最重要的就是互联互通，不被其他网站引用的网站就是“信息孤岛”。“酒好也怕藏的深”，也许这话说起来有点像垃圾邮件广告，但事实就是这样。所以如果做网站的目的不是孤芳自赏，就需要积极的推广自己的网站。<SPAN style="FONT-WEIGHT: bold"><BR></SPAN>通过搜索引擎推广自己需要注意以下几个方面：</P>
<OL>
<LI>以量取胜：不一定加入传统门户网站的分类目录才是网站推广，来自其他网站的任何反相链接都是有用的<BR>网站推广比较经典的方式就是加入比较大型门户网站的分类目录，比如：<A href="http://www.yahoo.com/">Yahoo!</A>，<A href="http://dmoz.org/">dmoz.org</A>等。其实这里有一个误区：不一定非要加入大型网站的分类目录才是网站推广，因为现在搜索引擎已经不再只是网站目录的索引，而是更全面的网页索引，所以无论来自其他网站任何地方的反相链接都是非常有价值的，哪怕是出现在新闻报道，论坛，邮件列表归档中。Blogger（Weblog的简称）们也许最深刻地理解了“链接就是一切”这句话的含义，由于Blog的内容之间有大量的相互链接（他们之间利用RSS很容易进行链接大量传播），因此最经常被引用的Blog页面在搜索引擎中的排名往往比一些大型商业网站的页面还要高。而WIKI这样的文档管理系统更加突出了良好结构，良好引用的特征。而目前很多网站通过在各种WIKI/留言簿中灌注垃圾留言的方法，这种方式是非常不可取的。这种链接不稳定： 
<LI>以质取胜：被PageRank高的网站引用能更快地提高PageRank<BR>数量只是关键因素之一，来自PageRank高的页面的链接还能更快的提高被链接目标的PageRank，我只是将一些文章投稿在了<A href="http://www.zdnet.com.cn/">ZDNet中国</A>上，由于页面上有文章出处链接，相应网页和网站整体的PageRank过了一段时间后就有了很大的提升。有时候被什么样的网站引用有时候比引用次数多更重要。这里我要特别感谢的是，当时<A href="http://www.zdnet.com.cn/">ZDNet中国</A>是唯一遵循了我的版权声明的要求表明了文章出处，并且有反相链接的网站。<BR>按照这个原则：能够名列Yahoo!和DMOZ这样的大型权威目录的头2层是非常有价值的。 
<LI>了解搜索引擎的"价值观"：<BR><A href="http://www.chedong.com/tech/lucene.html">Lucene简介</A>这篇文章被Jakarta.apache.org的<A href="http://jakarta.apache.org/lucene/">lucene项目</A>引用以后，这篇文章就成为了所有页面中PageRank最高的页面，而Google支持的一些项目，比如：<A href="http://www.equn.com/folding/">Folding@Home</A>，让我一直怀疑他们对政府，教育和非盈利组织的站点有特别加分，毕竟.org .edu才代表了互联网的实质：分权和共享。<BR>但更合理的解释是：.org很多都是开放技术平台的开发者，他们会在首页这样的地方加入Powered By Apache, Power by FreeBSD之类的链接表示对其他开源平台的尊重，所以象<A href="http://www.apache.org/">Apache</A>, <A href="http://www.php.net/">PHP</A>, <A href="http://www.freebsd.org/">FreeBSD</A>这样的开源站点在GOOGLE中都有非常高的PageRank。而在.edu这些站点中，很多都是学术性比较强的文档，以超链接形式标明参考文献的出处已经成为一种习惯，而这也无疑正是PageRank最好的依据。<BR><SPAN style="FONT-STYLE: italic">注意：不要通过Link Farm提高自身的站点排名：Google会惩罚那些主动链接到Link Farm站点以提高自身排名站点，相应站点的页面将不会被收入到索引中。但如果你的页面被别的Link Farm链接了也不必担心，因为这种被动的链接是不会被惩罚的。</SPAN> <BR>
<LI>不要吝啬给其他网站的链接：如果一个网页只有大量的进入链接，而缺乏导出链接，也会被搜索引擎认为是没有价值的站点。保证你的网站能够帮助搜索引擎更准确地判断哪些是对用户最有价值的信息，也就是说如果你的网站只有外部反向链接而没有导出链接的话，也会对你的网站在搜索结果中的表现带来负面影响。当然网站中连一个导出链接都没有的情况非常罕见，除非你是刻意这么做。正常情况下大家都会自然地在网页中加上一些其他网站的链接，带领访问者去到我们认为重要或能够提供更多有价值信息的地方， </LI></OL>
<P>另外在推广自己网站之前也许首先需要了解自己网站目前在一些搜索引擎中的知名度，原理非常简单，可以参考<A href="http://www.chedong.com/tech/link_pop_check.html">如何评价网站的人气</A>一文。</P>
<P>网站推广只是手段，如何突出内容、让需要相关信息的用户能够尽快的找到你的网站才是目的，PageRank高并不代表像Yahoo!这样的门户站点就能在所有搜索结果中排名靠前，因为搜索引擎的结果是搜索关键词在页面中的匹配度和页面的PageRank相结合的排名结果。因此第二个要点：如何突出关键词。<BR></P>
<H2><A name=keyword><B>如何突出关键词：面向主题(Theme)的关键词匹配</B></A></H2>
<OL>
<LI>&nbsp;<A href="http://www.google.com/search?q=%22theme+engine%22">Theme Engine</A>正在逐步超过PR，成为结果排序中更主要的因素，可以比较一下以下现象： 
<UL>
<LI>为什么查“新闻”，“汽车”之类的文字，各种门户网站的首页不在第一位？要知道他们的页面中都有相应频道的链接文字的 
<LI>一篇新闻页面中，搜索引擎如何不通过模板匹配，自动将新闻的主体和页面中的页头，栏目导航条，页尾等部分的内容区分开的？ </LI></UL>其实以上问题都可以归结为网页内容摘要的提取策略和关键词在其中的命中：<BR>首先将能够描述一个页面内容的分成以下几种类型：<BR>
<OL>
<LI>链入文字描述：inbound link text<BR>http://www.searchenginedictionary.com/terms-inbound-link.shtml<BR>
<LI>HTML页面标题：title 好标题一般会将页面中最重要的关键词放在最前面，比如：ABC-10型吸尘器 - XX家电城 
<LI>HTML内容主体：content text 
<LI>链出文字：outbound link text<BR></LI></OL>如果按照以下规则：<BR>一个页面中关键词命中权重：链入文字 &gt; HTML标题文字 &gt; HTML页面主体内容 &gt;&gt; 出链文字，以上现象就比较好解释了。<BR>链入文字是页面上看不见的，但链入文字对被链接页面有巨大的作用：在现代搜索引擎在关键词匹配的过程中，匹配的过程不只看当前页面的内容摘要：很大程度上，不只看这个网页自己说自己有什么内容，还要看别人如何链接时，如何描述你的网站别人怎么称呼你，比你自己说自己更重要。。<BR>比如查：“世界卫生组织”，返回结果中有 http://www.who.int/ 而这个页面中是没有中文的，之所以能匹配上，是因为很多链接它的中文网站使用了：&lt;a href="http://www.who.int/"&gt;世界卫生组织&lt;/a&gt;，所以，这个页面中不存在的中文关键词也成为了页面摘要的一部分。这样一想，就可以知道链出链接的文字其实是为被链接的子频道首页或者内容详情页服务的。对自身页面的关键词密度只有负面的影响，这也是Google建议一个页面中链接不要超过100个的原因：他根本不索引100个链接以后的内容。按照以上规则，搜索引擎将一篇新闻详情页中的新闻内容提取出来就是把页面上所有带HTTP链接的文字都去掉，就是新闻的内容部分了，更精确一些可以通过取最长文本段落等策略实现；而很多网站首页或频道首页中几乎全部都是链接，经过搜索引擎分析的结果就是：什么内容也没有，能够被命中的关键词仅仅是别人链接你用的“网站首页”和频道标题Title中的站点名称等的几个关键词，而页面中其他的文字则远远不如相应子频道和具体内容页面的匹配度高，而搜索引擎能够通过以上规则，让用户更快的直接定位到有具体内容的内容详情页面。因此希望通过一个首页，尽可能多的命中所有希望推广的关键词是不可能的。<A href="http://www.chedong.com/tech/google_url.html">让网页尽可能多的进入搜索引擎的索引</A>，然后把握好整个网站的主题风格是非常重要的，让网站的主题关键词能够比较均匀的按照金字塔模式分布到网站中可以参考：<A href="http://www.searchengineworld.com/engine/theme_pyramids.htm">网站的主题金字塔设计</A> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网站名称（用户通过1－2个抽象关键词）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<BR>&nbsp;&nbsp;&nbsp; 子频道1 &nbsp; 子频道2 （用户通过2－3个关键词命中）<BR>&nbsp;&nbsp; /&nbsp; &nbsp; \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp; \<BR>产品1&nbsp; 产品2 文章1 文章2 (用户通过3－4个关键词命中：这种用户最有价值)<BR><BR>
<LI>不要空着标题：空着&lt;title&gt;&lt;/title&gt;无异于浪费了最有价值的一块阵地；<BR><B>不要使用meta keywords/description</B><BR>传统的页面中，HTML页面中会有类似以下的隐含信息，用于说明当前网页的主要内容关键字：<BR>&lt;header&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;meta name="keyword" content="mp3 download music..."&gt;<BR>&lt;/header&gt;<BR>后来由于这种人工添加关键词的方式被滥用，大量网页中为了提高被搜索引擎命中的概率，经常添加一些和实际网页内容无关的热门关键比如：“music mp3 download”等，所以新一代的搜索引擎已经不再关心页面头文件中的人工meta keyword声明，而页面标题在搜索引擎的关键词的命中命中过程中往往有着更高的比重，如果一个关键词在标题中命中会比在页面中命中有更高的得分，从而在相应的搜索结果排名中更靠前。 
<LI>标题长度和内容：不要过长，一般在40个字(80个字节)以内，并充分突出关键词的比重；<BR>如果更长的标题搜索引擎一般会忽略掉，所以要尽可能将主要关键词放在标题靠前的位置。省略掉不必要的形容词吧，毕竟用户主要通过名词来找到需要的内容。标题内容：尽量用一些别人可以通过关键词找到的字眼（也别太过头，如果标题中的字眼超过1半内容中都没有，有可能被搜索引擎排除出索引），因此基于web日志中来自其他搜索引擎的关键词查询统计非常必要。 
<LI>如果网页很多的话，尽量使用不同的网页标题，争取让自己网站的内容更多的进入搜索引擎索引范围；<BR>因为搜索引擎会根据页面内容的相似度把一些内容当成重复页面排除出索引范围；<BR><A href="http://www.chedong.com/phpMan.php">http://www.chedong.com/phpMan.php</A>是我的网站上的一个小应用：一个web界面的unix命令手册（man page），在以前的设计中所有动态页面使用的都是同样的标题："phpMan: man page /perldoc /info page web interface" ，Google索引了大约3000多个页面，后来我将页面标题改成了"phpMan:&nbsp; [命令名]"这样的格式，比如："phpMan: ls"，这样大部分动态页面的标题就都不一样了，一个月后Google从这个页面入口索引了大约6000个页面。因此，如果网站中很多网页都使用相同的标题，比如：“新闻频道”，“论坛”，这些页面中很大一部分就会被排重机制忽略掉。 
<LI>除了&lt;title&gt;&lt;/title&gt;外，还可以用&lt;h1&gt;&lt;/h1&gt;标题行突出内容主题，加强标题的效果；<BR>在我的网站设计中：我会把用&lt;h1&gt;[标题]&lt;/h1&gt;这样的模板把标题突出显示，而不是通过改变字体的方式突出标题。 </LI></OL>
<H2><B><A name=web>其他网站设计提示</A></B></H2>
<OL>
<LI>静态链接：Blog网站另外一个优势在于其网页是静态链接：动态网页占到整个互联网内容的90％以上。<SPAN style="FONT-WEIGHT: bold">各个搜索引擎其实能够表现的都只不过是互联网的冰山一角(3-5%)，不同的只是谁让优质网页排名靠前的策略更优秀而已：</SPAN>大部分搜索引擎都认为静态链接的网页是优质网页，Google在优先抓取索引的网页中70%以上是不带参数链接的静态网页。而且即使同样的内容，静态网页也会比动态网页权重高：很容易理解：query?a=1&amp;b=2这样的链接由于参数顺序颠倒的query?b=2&amp;a=1完全相同。尽量使用静态网页：目前能够动态网页进行全面的索引还比较难，而即使是Google也更不会索引所有的内容，因此很少会对参数超过2个的动态网页进行进一步的抓取和分析。以下是一个phpBB论坛页面返回的HTTP头信息： <PRE>HTTP/1.1 200 OK
Date: Wed, 28 Jan 2004 12:58:54 GMT
Server: Apache/1.3.29 (Unix) mod_gzip/1.3.26.1a PHP/4.3.4
X-Powered-By: PHP/4.3.4
Set-Cookie: phpBB_data=a%3A0%3A%7B%7D; expires=Thu, 27-Jan-2005 12:58:54 GMT; path=/;
Set-Cookie: phpBB_sid=09f67a83ee108ecbf11e35bb6f36fcec; path=/;
Content-Encoding: gzip
Cache-Control: private, pre-check=0, post-check=0, max-age=0
Expires: 0
Pragma: no-cache
Connection: close
Content-Type: text/html
</PRE>为了避免隐私问题：Googlebot可以通过对页面http header中的session id和session cookie进行一些甄别，这样很多需要认证信息的论坛内容就无法进入索引了。<BR>总体上说Google喜欢新的，静态的内容。因此无论从效率上讲还是方便搜索引擎收录：使用内容发布系统将网站内容发布成静态网页都是非常必要的，从某种程度上说google friendly = anonymous cache friendly。<BR>比如：http://www.chedong.com/phpMan.php/man/intro/3<BR>比http://www.chedong.com/phpMan.php?mode=man&amp;parameter=intro&amp;section=3这样的链接更容易进入搜索引擎的索引。而且在URL中的命中也能突出关键词。 
<LI>能够进入Google索引的页面数量越多越好。用类似以下的脚本可以统计自己的网站被搜索引擎索引的情况。<PRE>#!/bin/sh
YESTERDAY=`date -d yesterday +%Y%m%d`
# for FreeBSD: YESTERDAY=`date -v-1d +%Y%m%d`

LOG_FILE='/home/apache/logs/access_log'

grep -i Googlebot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt; spider/$YESTERDAY.googlebot.txt
grep -i baiduspider $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt; spider/$YESTERDAY.baiduspider.txt
grep -i msnbot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt; spider/$YESTERDAY.msnbot.txt
grep -i inktomi $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn &gt; spider/$YESTERDAY.inktomi.txt
grep -i openbot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort |uniq -c | sort -rn &gt; spider/$YESTERDAY.openbot.txt
    </PRE>
<LI>网站目录结构要扁平，因为每深一级目录，PAGERANK降低1－2个档次。假设首页是3，其子可能目录就是1了，更深可能就无法列入评级范围了。<BR>
<LI>表现和内容的分离：“绿色”网页<BR>网页中的javascript和css尽可能和网页分离，一方面提高代码重用度（也方便页面缓存），另外一方面，由于有效内容占网页长度的百分比高，也能提高相关关键词在页面中的比重也增加了。总之，应该鼓励遵循w3c的规范，使用更规范的XHTML和XML作为显示格式便于内容更长时间的保存。 
<LI>让所有的页面都有能够快速入口：<A href="http://www.chedong.com/sitemap.html">站点地图</A>，方便网页爬虫（spider）快速遍历网站所有需要发布的内容。如果首页就是用Flash或图片进入的话，无异于将搜索引擎拒之门外，除了UI设计的用户友好外，spider friendly也是非常重要的。 
<LI>保持网站自身的健康：经常利用<A href="http://home.snafu.de/tilman/xenulink.html">坏链检查工具</A>检查网站中是否有死链。 
<LI>保持网页内容/链接的稳定性和持久性：在搜索引擎索引中网页存在的历史也是一个比较重要的因素，而且历史比较久的网页被链接的几率越高。为了保证自己网页能够被比较持久的被其他网站的页面引用，如果自己网页中有链接更新时，最好能保留旧的页面并做好链接转向，以保持内容的连续性。要知道，把一个网站和内容在搜索引擎中的排名“培养”的很高是一件非常不容易的事情，谁都不希望好不容易自己的内容被别人找到了，点击却是“404 页面不存在”吧，因此站点管理员对自身站点error.log的分析也是非常必要的。 
<LI>文件类型因素：Google有对PDF, Word(Power Point, Excel), PS文档的索引能力，由于这种文档的内容比一般的HTML经过了更多的整理，学术价值一般比较高，所以这些类型的文档天生就比一般的HTML类型的文档 PageRank要高。因此，对于比较重要的文档：技术白皮书，FAQ，安装文档等建议使用PDF PS等高级格式存取，这样在搜索结果中也能获得比较靠前的位置。 
<LI>常常能发现门户站点的一条新闻往往比其他站点的首页排名还要靠前。因此一个站点总体PageRank提高了以后，往往自身一些并不重要的内容也会被同那些高PageRank的内容一起带入被搜索引擎优先查询的列表中。这样经常造成很多大的开发站点的邮件列表归档往往比其他站点的首页PageRank还要高。 </LI></OL>
<H2><B><A href="http://www.chedong.com/tech/awstats.html" name=stat>知己知彼——站点访问统计/日志分析挖掘的重要性</A></B></H2>
<P>网站设计不仅仅只是被动的迎合搜索引擎的索引，更重要是充分利用搜索引擎带来的流量进行更深层次的用户行为分析。目前，来自搜索引擎关键词统计几乎是各种WEB日志分析工具的标准功能，相信商业日志统计工具在这方面应该会有更强化的实现。WEB日志统计这个功能如此重要，以至于新的RedHat 8中已经将日志分析工具webalizer作为标准的服务器配置应用之一。<BR></P>以Apache/webalizer为例，具体的做法如下： 
<OL>
<LI>记录访问来源：<BR>在Apache配置文件中设置日志格式为combined格式，这样的日志中会包含扩展信息：其中有一个字段就是相应访问的转向来源： HTTP_REFERER，如果用户是从某个搜索引擎的搜索结果中找到了你的网页并点击过来，日志中记录的HTTP_REFERER就是用户在搜索引擎结果页面的URL，这个URL中包含了用户查询的关键词。<BR>
<LI>在webalizer中缺省配置针对搜索引擎的统计：如何提取HTTP_REFERER中的关键词<BR>webalizer中缺省有针对yahoo, google等国际流行搜索引擎的查询格式：这里我增加了针对国内门户站点的搜索引擎参数设置<BR>SearchEngine yahoo.com p=<BR>SearchEngine altavista.com q=<BR>SearchEngine google.com q=<BR>SearchEngine&nbsp;&nbsp;&nbsp; sina.com.cn word=<BR>SearchEngine&nbsp;&nbsp;&nbsp; baidu.com&nbsp;&nbsp; word=<BR>SearchEngine&nbsp;&nbsp;&nbsp; sohu.com&nbsp;&nbsp;&nbsp; word=<BR>SearchEngine&nbsp;&nbsp;&nbsp; 163.com q=<BR></LI></OL>
<P>通过这样设置webalizer统计时就会将HTTP_REFERER中来自搜索引擎的URL中的keyword提取出来，比如：所有来自 google.com链接中，参数q的值都将被作为关键词统计下来：，从汇总统计结果中，就可以发现用户是根据什么关键词找到你的次数，以及找到你的用户最感兴趣的是那些关键词等，进一步的，在webalizer中有设置还可以将统计结果倒出成CSV格式的日志，便于以后导入数据库进行历史统计，做更深层次的数据挖掘等。</P>
<P>以前通过WEB日志的用户分析主要是简单的基于日志中的访问时间/IP地址来源等，很明显，基于搜索引擎关键词的统计能得到的分析结果更丰富、更直观。因此，搜索引擎服务的潜在商业价值几乎是不言而喻的，也许这也是<A href="http://www.yahoo.com/">Yahoo!</A> <A href="http://www.av.com/">Altavista</A>等传统搜索引擎网站在门户模式后重新开始重视搜索引擎市场的原因，看看<A href="http://www.google.com/press/zeitgeist2002.html">Google的年度关键词统计</A>就知道了，在互联网上有谁比搜索引擎更了解用户对什么更感兴趣呢？<BR></P>
<P>请看本站的反相链接统计：<A href="http://www.chedong.com/log/2003_6.log">http://www.chedong.com/log/2003_6.log</A><BR>需要注意的是：由于Google针对Windows 2000中的IE使用的是UTF-8方式的编码，因此很多统计有时候需要在UTF-8方式下查看才是正确字符显示。从统计中能够感受到：在使用水平比较高的IT开发人员中Google已经成为最常用的搜索引擎。而使用百度的用户也已经大大超过了传统的搜狐，新浪等门户站点，因此传统门户网站在搜索引擎上的优势将是非常脆弱的。而从技术的发展趋势来看，以后还会有更多的利用互联网媒体做更深层次数据挖掘的服务模式出现：<BR></P>
<P></P>
<P><A href="http://www.cnblog.org/blog#89372927"><SPAN style="FONT-STYLE: italic">转载自cnblog.org——“突发”文字可能揭示社会趋势</SPAN></A><BR style="FONT-STYLE: italic"><BR style="FONT-STYLE: italic"><SPAN style="FONT-STYLE: italic">在“新科学家”(New Scientist)在线杂志上，公布了康奈尔大学的一个新研究成果，引人注目，也许与Google 收购Pyra 的动机有关。</SPAN><BR style="FONT-STYLE: italic"><BR style="FONT-STYLE: italic"><SPAN style="FONT-STYLE: italic">这所大学的计算机科学家 Jon Klenberg 开发了一个计算机算法，能够识别一篇文章中某些文字的“突发”增长，而且他发现，这些“突发”增长的文字可以用来快速识别最新的趋势和热点问题，因此能够更有效地筛选重要信息。过去很多搜索技术都采用了简单计算文字/词组出现频率的方法，却忽略了文字使用增加的速率。</SPAN><BR style="FONT-STYLE: italic"><BR style="FONT-STYLE: italic"><SPAN style="FONT-STYLE: italic">Jon 特别指出，这种方法可以应用到大量Weblog上，以跟踪社会趋势，这对商业应用也很有潜力。例如，广告商可以从成千上万的个人Blog 中快速找到潜在的需求风尚。而且只要Blog 覆盖话题范围足够大（实际上发展趋势确实如此），这项技术对政治、社会、文化和经济等领域也都会有实际意义了。</SPAN><BR style="FONT-STYLE: italic"><BR style="FONT-STYLE: italic"><SPAN style="FONT-STYLE: italic">虽然Google 新闻的内部算法至今没有公开，但是人们猜测这种完全由机器所搜集的头条新闻应当不是Google搜索引擎中惯用的鸽子算法，很可能与这种“突发”判断算法有关。如此说来，<A href="http://www.chedong.com/blog/archives/000433.html">Google收购Blog工具供应商的举动确实还有更深层次的远见了</A>。</SPAN><BR style="FONT-STYLE: italic"><BR style="FONT-STYLE: italic"><SPAN style="FONT-STYLE: italic">- NewScientist.com news, <A href="http://www.newscientist.com/news/news.jsp?id=ns99993405">Word 'bursts' may reveal online trends</A></SPAN><BR style="FONT-STYLE: italic"><SPAN style="FONT-STYLE: italic">- 还没有写完这些介绍，在 SlashDot 上也看到了很多有关这个发现的讨论</SPAN><BR></P>
<H2><A name=guide></A>附：<A href="http://www.google.com/webmasters/guidelines.html">Google官方的站点设计指南</A><BR></H2>
<UL>
<LI>Make a site with a clear hierarchy and text links. Every page should be reachable from at least one static text link.&nbsp; 让网站有着清晰的结构和文本链接，所有的页面至少要有一个静态文本链接入口<BR>批注：尽量不要用图片和JAVASCRIPT 
<LI>Offer a site map to your users with links that point to the important parts of your site. If the site map is larger than 100 or so links, you may want to break the site map into separate pages.<BR>为用户提供一个站点地图：转向网站的重要部分。如果站点地图页面超过100个链接，则需要将页面分成多个页面。<BR>批注：索引页不要超过100个链接：SPIDER只考虑页面中头100个链接 
<LI>Create a useful, information-rich site and write pages that clearly and accurately describe your content.<BR>用一些有用的，信息量丰富的站点，清晰并正确的描述你的信息。 
<LI>Think about the words users would type to find your pages, and make sure that your site actually includes those words within it.<BR>想像用户可能用来找到你的关键词，并保证这些关键词在网站中出现。<BR>批注：少用“最大”，“最好”之类的形容词，用用户最关心的词，比如：下载，歌星名字，而不是一些抽象名词。 
<LI>Try to use text instead of images to display important names, content, or links. The Google crawler doesn't recognize text contained in images.<BR>尽可能使用文本，而不是图片显示重要的名称，内容和链接。GOOGLE的机器人不认识图片中的文字。 
<LI>Make sure that your TITLE and ALT tags are descriptive and accurate.<BR>保证：页面的TITLE和ALT标记正确的精确描述 
<LI>Check for broken links and correct HTML.<BR>检查坏链并修正这些HTML错误。 
<LI>If you decide to use dynamic pages (i.e., the URL contains a '?' character), be aware that not every search engine spider crawls dynamic pages as well as static pages. It helps to keep the parameters short and the number of them small.<BR>如果你打算使用动态页面：链接中包含"?"，必须了解：并非所有的搜索引擎的机器人能想对待静态页面一样对待动态页面，保持动态页面的参数尽可能的少也会很有帮助。 
<LI>Keep the links on a given page to a reasonable number (fewer than 100).<BR>让一个页面中的链接少于100个。<BR>批注：用lynx -dump http://www.chedong.com 可以模拟从robot角度看到的页面。其最后有链接统计<BR></LI></UL>
<P>输出类似：<BR><BR>&nbsp;&nbsp; [1]Google Free Search _______________________________ Google Search<BR>&nbsp;&nbsp; (_) Search WWW (_) Search chedong.com<BR><BR>&nbsp;&nbsp; 更 新 [2]站点地图 / Site Map [3]留 言簿 / Guest Book [4]意见反馈 /<BR>&nbsp;&nbsp; Feed Back<BR>&nbsp;&nbsp;&nbsp; ...<BR>References<BR><BR>&nbsp;&nbsp; Visible links<BR>&nbsp;&nbsp; 1. http://www.google.com/services/free.html<BR>&nbsp;&nbsp; 2. http://www.chedong.com/sitemap.html#sitemap<BR>&nbsp;&nbsp; 3. http://www.chedong.com/guestbook/<BR>&nbsp;&nbsp; 4. http://www.chedong.com/formmail.htm<BR>&nbsp;&nbsp;&nbsp; ...<BR>&nbsp;&nbsp; Hidden links:<BR>&nbsp; 50. http://www.chedong.com/bbcweb/<BR>&nbsp;&nbsp;&nbsp; ...<BR></P>
<P>搜索引擎的宗旨在于提取互联网中质量最好的内容提供给用户，任何有利于帮助用户获得相对公正，优质内容的策略都是搜索引擎追求目标。PageRank是一个非常好的策略，但是并非所有策略都是基于非常复杂的算法。<BR>从搜索引擎看来什么是互联网中“好”的内容呢？ 
<UL>
<LI>首先：互联网大约是8G个网页，而且以每天2M的速度增长的。其中80%以上是动态网页，而占总量20%的静态网页就是一个相对比较简单的过滤规则。 
<LI>其次：用户友好（User friendly）也是很重要的方面，搜索引擎利用算法帮助提升这些优质网站，包括：通过CSS将内容和表现分离：较少的javascript和frame结构，spider本身也很难深入抓取这些网页：Javascript和frame结构大部分是广告。 
<LI>标题明确：无标题，重复标题或者标题SPAM（类似于：游戏游戏游戏游戏游戏游戏这样的标题）进行过滤或降低得分页面大小：因为页面过大会导致用户下载缓慢，所以很多引擎只计算页面大小在100k以内的网页。 
<LI>链接引用：不仅需要有链接链入，也需要帮助用户找到其他更有价值的内容； 
<LI>文件类型：PDF和DOC等专业文档和来自edu,gov等非赢利网站的内容； 
<LI>链入网站的文字：所有用户不可见的因素全部被忽略。此外：<A href="http://weblog.chedong.com/archives/000397.html">用户搜索的行为本身也被Google记录</A>，可能对目标网站的主题相关度有帮助。 </LI></UL>
<P></P>
<P>参考资料：</P>
<P>面向Google搜索引擎的网站设计优化<BR><A href="http://www.google-search-engine-optimization.com/">http://www.google-search-engine-optimization.com/</A></P>
<P><BR><A href="http://www.rankforsales.com/seo-myths.html">关于Google排名优化的7个误区，如："Meta tag", "泛域名"，首页等</A><BR></P>
<P>如何评价一个网站的人气<BR><A href="http://www.chedong.com/tech/link_pop_check.html">http://www.chedong.com/tech/link_pop_check.html</A></P>
<P>如何提高网站在Google中的排名——面向搜索引擎的广告模式<BR><A href="http://www.chedong.com/tech/google_ads.html">http://www.chedong.com/tech/google_ads.html</A><BR></P>
<P>如何提高网站在Google中的排名——面向搜索引擎的网站链接设计<BR><A href="http://www.chedong.com/tech/google_url.html">http://www.chedong.com/tech/google_url.html</A><BR></P>
<P>Google不断改进相应的算法：HillTop<BR><A href="http://www.cs.toronto.edu/~georgem/hilltop/">Hilltop: A Search Engine based on Expert Documents</A><BR>
<P>Google の秘密 - PageRank 徹底解説<BR><A href="http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/pagerank.html">http://www.kusastro.kyoto-u.ac.jp/~baba/wais/pagerank.html<BR></A>这篇文章是在查"Google PageRank"的时候查到的，这篇文章不仅有一个算法说明，也是一个Google的weblog，记录了很多关于Google的新闻和一些市场动态信息。<BR><A href="http://linux.dalouis.com/pagerank_cn.htm">Google 的秘密- PageRank 彻底解说 中文版</A></P>
<P>更详细的PageRank算法说明：<BR><A href="http://pr.efactory.de/">http://pr.efactory.de/</A><BR></P>
<P><A href="http://www.chedong.com/tech/awstats.html">WEB日志统计工具AWStats的使用：增加了Unicode的解码和中国主要门户搜索的定义</A><BR>http://www.chedong.com/tech/awstats.html </P>
<P>Robots的说明：<BR><A href="http://bar.baidu.com/robots/">http://bar.baidu.com/robots/</A><BR><A href="http://www.google.com/bot.html">http://www.google.com/bot.html</A><BR>搜索引擎通过一种程序robot（又称spider），自动访问互联网上的网页并获取网页信息。您可以在您的网站中创建一个纯文本文件 robots.txt，在这个文件中声明该网站中哪些内容可以被robot访问，哪些不可以。</P>
<P>反Google站点：观点也很有趣<BR><A href="http://www.google-watch.org/">http://www.google-watch.org/</A></P>
<P>关于Google的WebLog<BR><A href="http://google.blogspace.com/">http://google.blogspace.com/</A><BR></P>
<P><A href="http://www.21cnbj.com/industrynews/articles_2003/Expert00-3.htm">关于Google的HillTop算法</A> </P>
<P>搜索引擎相关论坛<BR><A href="http://www.jimworld.com/apps/webmaster.forums/">http://searchengineforums.com/</A><BR><A href="http://searchenginewatch.com/">http://searchenginewatch.com</A><BR><A href="http://www.webmasterworld.com/">http://www.webmasterworld.com/</A><BR></P><img src ="http://www.blogjava.net/weidagang2046/aggbug/15637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2005-10-16 14:58 <a href="http://www.blogjava.net/weidagang2046/articles/15637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Frequent Item Sets Mining Program</title><link>http://www.blogjava.net/weidagang2046/articles/15395.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Thu, 13 Oct 2005 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/15395.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/15395.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/15395.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/15395.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/15395.html</trackback:ping><description><![CDATA[<DIV id=mb_0><A onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.adrem.ua.ac.be/~goethals/software/" target=_blank>http://www.adrem.ua.ac.be/<WBR>~goethals/software/</A> </DIV><img src ="http://www.blogjava.net/weidagang2046/aggbug/15395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2005-10-13 10:39 <a href="http://www.blogjava.net/weidagang2046/articles/15395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据挖掘数据集网站</title><link>http://www.blogjava.net/weidagang2046/articles/15375.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Wed, 12 Oct 2005 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/15375.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/15375.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/15375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/15375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/15375.html</trackback:ping><description><![CDATA[<A href="http://fimi.cs.helsinki.fi/data/">http://fimi.cs.helsinki.fi/data/</A>&nbsp;&nbsp;&nbsp; user:kddcup password:legcare4KDD<BR><BR>http://www.cs.toronto.edu/~roweis/data.html<BR>http://kdd.ics.uci.edu/summary.task.type.html<BR>http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/<BR>http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/theo-11/www/wwkb/<BR>http://www.phys.uni.torun.pl/~duch/software.html<BR>在下面的网址可以找到reuters数据集http://www.research.att.com/~lewis/reuters215<BR>78.html<BR><BR>以下网址上有各种数据集：<BR>http://kdd.ics.uci.edu/summary.data.type.html<BR><BR>进行文本分类，还有一个数据集是可以用的，即rainbow的数据集<BR>http://www-2.cs.cmu.edu/afs/cs/project/theo-11/www/naive-bayes.html<img src ="http://www.blogjava.net/weidagang2046/aggbug/15375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2005-10-12 23:11 <a href="http://www.blogjava.net/weidagang2046/articles/15375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关联规则挖掘算法综述</title><link>http://www.blogjava.net/weidagang2046/articles/3936.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Fri, 29 Apr 2005 04:24:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/3936.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/3936.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/3936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/3936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/3936.html</trackback:ping><description><![CDATA[<P><FONT size=2>摘 要 本文介绍了关联规则的基本概念和分类方法，列举了一些关联规则挖掘算法并简要分析了典型算法，展望了关联规则挖掘的未来研究方向。</FONT></P>
<P><FONT size=2>1 引言</FONT></P>
<P><FONT size=2>关联规则挖掘发现大量数据中项集之间有趣的关联或相关联系。它在数据挖掘中是一个重要的课题，最近几年已被业界所广泛研究。</FONT></P>
<P><FONT size=2>关联规则挖掘的一个典型例子是购物篮分析。关联规则研究有助于发现交易数据库中不同商品（项）之间的联系，找出顾客购买行为模式，如购买了某一商品对购买其他商品的影响。分析结果可以应用于商品货架布局、货存安排以及根据购买模式对用户进行分类。</FONT></P>
<P><FONT size=2>Agrawal等于1993年首先提出了挖掘顾客交易数据库中项集间的关联规则问题[AIS93b]，以后诸多的研究人员对关联规则的挖掘问题进行了大量的研究。他们的工作包括对原有的算法进行优化，如引入随机采样、并行的思想等，以提高算法挖掘规则的效率；对关联规则的应用进行推广。</FONT></P>
<P><FONT size=2>最近也有独立于Agrawal的频集方法的工作[HPY00]，以避免频集方法的一些缺陷，探索挖掘关联规则的新方法。也有一些工作[KPR98]注重于对挖掘到的模式的价值进行评估，他们提出的模型建议了一些值得考虑的研究方向。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>2 基本概念</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>设I={i1,i2,..,im}是项集，其中ik(k=1,2,…,m)可以是购物篮中的物品，也可以是保险公司的顾客。设任务相关的数据D是事务集，其中每个事务T是项集，使得T&amp;Iacute;I。设A是一个项集，且A&amp;Iacute;T。</FONT></P>
<P><FONT size=2>关联规则是如下形式的逻辑蕴涵：A &amp;THORN; B，A&amp;Igrave;I, A&amp;Igrave;I，且A∩B=F。关联规则具有如下两个重要的属性：</FONT></P>
<P><FONT size=2>支持度: P(A∪B)，即A和B这两个项集在事务集D中同时出现的概率。</FONT></P>
<P><FONT size=2>置信度: P(B｜A)，即在出现项集A的事务集D中，项集B也同时出现的概率。</FONT></P>
<P><FONT size=2>同时满足最小支持度阈值和最小置信度阈值的规则称为强规则。给定一个事务集D，挖掘关联规则问题就是产生支持度和可信度分别大于用户给定的最小支持度和最小可信度的关联规则，也就是产生强规则的问题。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>3 关联规则种类</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>1) 基于规则中处理的变量的类别，关联规则可以分为布尔型和数值型。</FONT></P>
<P><FONT size=2>布尔型关联规则处理的值都是离散的、种类化的，它显示了这些变量之间的关系。</FONT></P>
<P><FONT size=2>数值型关联规则可以和多维关联或多层关联规则结合起来，对数值型字段进行处理，将其进行动态的分割，或者直接对原始的数据进行处理，当然数值型关联规则中也可以包含种类变量。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>2) 基于规则中数据的抽象层次，可以分为单层关联规则和多层关联规则。</FONT></P>
<P><FONT size=2>在单层关联规则中，所有的变量都没有考虑到现实的数据是具有多个不同的层次的。</FONT></P>
<P><FONT size=2>在多层关联规则中，对数据的多层性已经进行了充分的考虑。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>3) 基于规则中涉及到的数据的维数，关联规则可以分为单维的和多维的。</FONT></P>
<P><FONT size=2>在单维关联规则中，我们只涉及到数据的一个维，如用户购买的物品</FONT></P>
<P><FONT size=2>在多维关联规则中，要处理的数据将会涉及多个维。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4 算法综述</FONT></P>
<P><FONT size=2>4.1 经典的频集算法</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>Agrawal等于1994年提出了一个挖掘顾客交易数据库中项集间的关联规则的重要方法 [AS94a, AS94b]，其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。</FONT></P>
<P><FONT size=2>所有支持度大于最小支持度的项集称为频繁项集，简称频集。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.1.1 算法的基本思想</FONT></P>
<P><FONT size=2>首先找出所有的频集，这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则，这些规则必须满足最小支持度和最小可信度。</FONT></P>
<P><FONT size=2>挖掘关联规则的总体性能由第一步决定，第二步相对容易实现。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.1.2 Apriori核心算法分析</FONT></P>
<P><FONT size=2>为了生成所有频集，使用了递推的方法。其核心思想简要描述如下：</FONT></P>
<P><FONT size=2>(1) L1 = {large 1-itemsets};</FONT></P>
<P><FONT size=2>(2) for (k=2; Lk-1&amp;sup1;F; k++) do begin</FONT></P>
<P><FONT size=2>(3) Ck=apriori-gen(Lk-1); //新的候选集</FONT></P>
<P><FONT size=2>(4) for all transactions t&amp;Icirc;D do begin</FONT></P>
<P><FONT size=2>(5) Ct=subset(Ck,t); //事务t中包含的候选集</FONT></P>
<P><FONT size=2>(6) for all candidates c&amp;Icirc; Ct do</FONT></P>
<P><FONT size=2>(7) c.count++;</FONT></P>
<P><FONT size=2>(8) end</FONT></P>
<P><FONT size=2>(9) Lk={c&amp;Icirc; Ck |c.count&amp;sup3;minsup}</FONT></P>
<P><FONT size=2>(10) end</FONT></P>
<P><FONT size=2>(11) Answer=∪kLk;</FONT></P>
<P><FONT size=2>首先产生频繁1-项集L1，然后是频繁2-项集L2，直到有某个r值使得Lr为空，这时算法停止。这里在第k次循环中，过程先产生候选k-项集的集合Ck，Ck中的每一个项集是对两个只有一个项不同的属于Lk-1的频集做一个(k-2)-连接来产生的。Ck中的项集是用来产生频集的候选集，最后的频集Lk必须是Ck的一个子集。Ck中的每个元素需在交易数据库中进行验证来决定其是否加入Lk，这里的验证过程是算法性能的一个瓶颈。这个方法要求多次扫描可能很大的交易数据库，即如果频集最多包含10个项，那么就需要扫描交易数据库10遍，这需要很大的I/O负载。</FONT></P>
<P><FONT size=2>可能产生大量的候选集,以及可能需要重复扫描数据库，是Apriori算法的两大缺点。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.1.3 算法的优化</FONT></P>
<P><FONT size=2>为了提高算法的效率，Mannila等引入了修剪技术来减小候选集Ck的大小[MTV94]，由此可以显著地改进生成所有频集算法的性能。算法中引入的修剪策略基于这样一个性质：一个项集是频集当且仅当它的所有子集都是频集。那么，如果Ck中某个候选项集有一个(k-1)-子集不属于Lk-1，则这个项集可以被修剪掉不再被考虑，这个修剪过程可以降低计算所有的候选集的支持度的代价。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.2 改进的频集算法</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.2.1散列</FONT></P>
<P><FONT size=2>该算法由Park等在1995年提出[PCY95b]。通过实验发现寻找频繁项集的主要计算是在生成频繁2项集L2上，Park就是利用这个性质引入散列技术来改进产生频繁2项集的方法。</FONT></P>
<P><FONT size=2>其基本思想是：当扫描数据库中每个事务，由C1中的候选1项集产生频繁1项集L1时，对每个事务产生所有的2项集，将它们散列到散列表结构的不同桶中，并增加对应的桶计数，在散列表中对应的桶计数低于支持度阈值的2项集不可能是频繁2项集，可从候选2项集中删除，这样就可大大压缩了要考虑的2项集。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.2.2 事务压缩</FONT></P>
<P><FONT size=2>Agrawal等提出压缩进一步迭代扫描的事务数的方法[AS94b, HF95]。因为不包含任何K项集的事务，不可能包含任何（K+1）项集，可对这些事务加上删除标志,扫描数据库时不再考虑。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.2.3 杂凑</FONT></P>
<P><FONT size=2>一个高效地产生频集的基于杂凑的算法由Park等提出[PCY95a]。通过实验我们可以发现寻找频集主要的计算是在生成频繁2-项集Lk上，Park等就是利用了这个性质引入杂凑技术来改进产生频繁2-项集的方法。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.2.4 划分</FONT></P>
<P><FONT size=2>Savasere等设计了一个基于划分的算法[SON95]，这个算法先把数据库从逻辑上分成几个互不相交的块，每次单独考虑一个分块并对它生成所有的频集，然后把产生的频集合并，用来生成所有可能的频集，最后计算这些项集的支持度。这里分块的大小选择要使得每个分块可以被放入主存，每个阶段只需被扫描一次。而算法的正确性是由每一个可能的频集至少在某一个分块中是频集保证的。上面所讨论的算法是可以高度并行的，可以把每一分块分别分配给某一个处理器生成频集。产生频集的每一个循环结束后，处理器之间进行通信来产生全局的候选k-项集。通常这里的通信过程是算法执行时间的主要瓶颈；而另一方面，每个独立的处理器生成频集的时间也是一个瓶颈。其他的方法还有在多处理器之间共享一个杂凑树来产生频集。更多的关于生成频集的并行化方法可以在文献[AS96]中找到。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.2.5 选样</FONT></P>
<P><FONT size=2>基本思想是在给定数据的一个子集挖掘。对前一遍扫描得到的信息，仔细地组合分析，可以得到一个改进的算法，Mannila等先考虑了这一点[MTV94]，他们认为采样是发现规则的一个有效途径。随后又由Toivonen进一步发展了这个思想[Toi96]，先使用从数据库中抽取出来的采样得到一些在整个数据库中可能成立的规则，然后对数据库的剩余部分验证这个结果。Toivonen的算法相当简单并显著地减少了I/O代价，但是一个很大的缺点就是产生的结果不精确，即存在所谓的数据扭曲(data skew)。分布在同一页面上的数据时常是高度相关的，可能不能表示整个数据库中模式的分布，由此而导致的是采样5%的交易数据所花费的代价可能同扫描一遍数据库相近。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.2.6 动态项集计数</FONT></P>
<P><FONT size=2>Brin等人给出该算法[BMUT97]。动态项集计数技术将数据库划分为标记开始点的块。不象Apriori仅在每次完整的数据库扫描之前确定新的候选，在这种变形中，可以在任何开始点添加新的候选项集。该技术动态地评估以被计数的所有项集的支持度，如果一个项集的所有子集以被确定为频繁的，则添加它作为新的候选。结果算法需要的数据库扫描比Apriori 少。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.3 FP-树频集算法</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>针对Apriori算法的固有缺陷，J. Han等提出了不产生候选挖掘频繁项集的方法—FP-树频集算法[HPY00]。采用分而治之的策略，在经过第一遍扫描之后，把数据库中的频集压缩进一棵频繁模式树（FP-tree），同时依然保留其中的关联信息，随后再将FP-tree分化成一些条件库，每个库和一个长度为1的频集相关，然后再对这些条件库分别进行挖掘。当原始数据量很大的时候，也可以结合划分的方法,使得一个FP-tree可以放入主存中。实验表明，FP-growth对不同长度的规则都有很好的适应性，同时在效率上较之apriori算法有巨大的提高。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.4 多层关联规则挖掘</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>对于很多的应用来说，由于数据分布的分散性，所以很难在数据最细节的层次上发现一些强关联规则。当我们引入概念层次后，就可以在较高的层次上进行挖掘[HF95, SA95]。虽然较高层次上得出的规则可能是更普通的信息，但是对于一个用户来说是普通的信息，对于另一个用户却未必如此。所以数据挖掘应该提供这样一种在多个层次上进行挖掘的功能。</FONT></P>
<P><FONT size=2>多层关联规则的分类：根据规则中涉及到的层次，多层关联规则可以分为同层关联规则和层间关联规则。</FONT></P>
<P><FONT size=2>多层关联规则的挖掘基本上可以沿用“支持度-可信度”的框架。不过，在支持度设置的问题上有一些要考虑的东西。</FONT></P>
<P><FONT size=2>同层关联规则可以采用两种支持度策略：</FONT></P>
<P><FONT size=2>1) 统一的最小支持度。对于不同的层次，都使用同一个最小支持度。这样对于用户和算法实现来说都比较的容易，但是弊端也是显然的。</FONT></P>
<P><FONT size=2>2) 递减的最小支持度。每个层次都有不同的最小支持度，较低层次的最小支持度相对较小。同时还可以利用上层挖掘得到的信息进行一些过滤的工作。</FONT></P>
<P><FONT size=2>层间关联规则考虑最小支持度的时候，应该根据较低层次的最小支持度来定。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>4.5 多维关联规则挖掘</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>对于多维数据库而言，除维内的关联规则外，还有一类多维的关联规则。例如：</FONT></P>
<P><FONT size=2>年龄（X，“20...30”） 职业（X,“学生”）==&gt; 购买(X，“笔记本电脑”)</FONT></P>
<P><FONT size=2>在这里我们就涉及到三个维上的数据：年龄、职业、购买。</FONT></P>
<P><FONT size=2>根据是否允许同一个维重复出现，可以又细分为维间的关联规则（不允许维重复出现）和混合维关联规则（允许维在规则的左右同时出现）。</FONT></P>
<P><FONT size=2>年龄（X，“20...30”） 购买(X，“笔记本电脑”) ==&gt; 购买(X，“打印机”)</FONT></P>
<P><FONT size=2>这个规则就是混合维关联规则。</FONT></P>
<P><FONT size=2>在挖掘维间关联规则和混合维关联规则的时候，还要考虑不同的字段种类：种类型和数值型。</FONT></P>
<P><FONT size=2>对于种类型的字段，原先的算法都可以处理。而对于数值型的字段，需要进行一定的处理之后才可以进行[KHC97]。处理数值型字段的方法基本上有以下几种：</FONT></P>
<P><FONT size=2>1) 数值字段被分成一些预定义的层次结构。这些区间都是由用户预先定义的。得出的规则也叫做静态数量关联规则。</FONT></P>
<P><FONT size=2>2) 数值字段根据数据的分布分成了一些布尔字段。每个布尔字段都表示一个数值字段的区间，落在其中则为1，反之为0。这种分法是动态的。得出的规则叫布尔数量关联规则。</FONT></P>
<P><FONT size=2>3) 数值字段被分成一些能体现它含义的区间。它考虑了数据之间的距离的因素。得出的规则叫基于距离的关联规则。</FONT></P>
<P><FONT size=2>4) 直接用数值字段中的原始数据进行分析。使用一些统计的方法对数值字段的值进行分析，并且结合多层关联规则的概念，在多个层次之间进行比较从而得出一些有用的规则。得出的规则叫多层数量关联规则。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>5 展望</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>对于关联规则挖掘领域的发展，笔者认为可以在如下一些方向上进行深入研究：在处理极大量的数据时，如何提高算法效率；对于挖掘迅速更新的数据的挖掘算法的进一步研究；在挖掘的过程中，提供一种与用户进行交互的方法，将用户的领域知识结合在其中；对于数值型字段在关联规则中的处理问题；生成结果的可视化，等等。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>参考文献</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[AIS93b] R. Agrawal, T. Imielinski, and A. Swami. Mining association rules between sets of items in large databases. Proceedings of the ACM SIGMOD Conference on Management of data, p.p. 207-216, May 1993.</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[AS94a] R. Agrawal, and R. Srikant. Fast algorithms for mining association rules in large database. Technical Report FJ9839, IBM Almaden Research Center, San Jose, CA, Jun. 1994.</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[AS94b] R. Agrawal, and R. Srikant. Fast algorithms for mining association rules. In Proc. 1994 Int. Conf. Very Large Databases(VLDB’94), Sep. 1994.</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[AS96] R. Agrawal, and J. Shafer. Parallel mining of association rules: Design, Implementation, and Experience. IEEE Trans. Knowledge and data engineering, 8:962-969, Jan. 1996.</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[BMUT97] S. Brin, R. Motwani, J. D. Ullman, and S. Tsur. Dynamic itemset counting and implication rules for market basket data. In ACM SIGMOD International Conference On the Management of Data, p.p. 255-264, May 1997.</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[HF95] J, Han and Y. Fu. Discovery of multiple-level association rules from large databases. In Proc. 1995 Int. Conf. Very Large Databases(VLDB’95), p.p. 402-431, Sep. 1995.</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[HPY00] J.Han,J.Pei, and Y.Yin.Mining. Frequent patterns without candidate generation. In Proc. 2000 ACM-SIGMOD Int. Conf. Management of Data (SIGMOD’00), p.p. 1-12, May 2000.</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2>[KHC97] M. Kamber, J. Han, J. Chang. Metarule-guided mining of multi-dimensional association rules using data cubes. In Proc. 1997 Int. Conf. Khowledge Discovery and Data Mining(KDD’97), p.p. 207-210, Aug. 1997</FONT></P>
<P><FONT size=2>[KPR98] J. Kleinberg, C. Papadimitriou, and P. Raghavan. Segmentation problems. Proceedings of the 30th Annual Symposium on Theory of Computing, ACM. Sep. 1998.</FONT></P>
<P><FONT size=2>[MTV94] H. Mannila, H. Toivonen, and A. Verkamo. Efficient algorithm for discovering association rules. AAAI Workshop on Knowledge Discovery in Databases, p.p. 181-192, Jul. 1994.</FONT></P>
<P><FONT size=2>[PCY95a] J. S. Park, M. S. Chen, and P. S. Yu. An effective hash-based algorithm for mining association rules. Proceedings of ACM SIGMOD International Conference on Management of Data, p.p. 175-186, May 1995.</FONT></P>
<P><FONT size=2>[PCY95b] J. S. Park, M. S. Chen, and P. S. Yu. Efficient parallel data mining of association rules. 4th International Conference on Information and Knowledge Management, Baltimore, Maryland, Nov. 1995.</FONT></P>
<P><FONT size=2>[SA95] R. Srikant, and R. Agrawal. Mining generalized association rules. Proceedings of the 21st International Conference on Very Large Database, p.p. 407-419, Sep.1995.</FONT></P>
<P><FONT size=2>[SON95] A. Savasere, E. Omiecinski, and S. Navathe. An efficient algorithm for mining association rules in large databases. Proceedings of the 21st International Conference on Very Large Database, p.p. 432-443, Sep. 1995.</FONT></P>
<P><FONT size=2>[Toi96] H. Toivonen. Sampling large databases for association rules. Proceedings of the 22nd International Conference on Very Large Database, Bombay, India, p.p. 134-145, Sep. 1996. <BR><BR>转自：<A href="http://www.dmresearch.net/survey/association_rule_survey.htm">http://www.dmresearch.net/survey/association_rule_survey.htm</A></FONT></P><img src ="http://www.blogjava.net/weidagang2046/aggbug/3936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2005-04-29 12:24 <a href="http://www.blogjava.net/weidagang2046/articles/3936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>