好久没写 blog 了 , 由于之前对毕业设计的要求理解错误 , 导致研究方向发生了偏移 . 在 3 月 7 号的时候导师开了一个会才知道要做的系统是一个聚类系统 , 之前研究的使用训练集产生分类器的方法是针对 " 自动归类 " 的 .<o:p></o:p>
香港回来后 (3 月 9~3 月 16), 开始了这个课题的研究 , 这个过程中碰到种种困难 . 比如 vsm( 向量空间模型 ), STC( 后缀树表示法 ) 等等要涉及一些矩阵分解 ( 对 web 网页表示的降维 ), 基向量 , 特征值 ... 以前一直觉得学数学对软件开发毫无用处 , 现在得洗洗脑子了 , 因为以前接触的多是 web 应用型项目 , 框架建好了 , 填填代码而已 .<o:p></o:p>
很感谢陈黎飞博士 , soulmachine , 在我学习的过程中 , 给予的指导 .<o:p></o:p>
过几天就要交开题报告了 , 所以我就先在这里总结一下我这几天的学习心得 . 一开始我看了几篇陈博士给我的几篇论文 , 大概对 web 网页聚类过程有了大概的了解 . 后来研究 Carrot2( 一个开源的聚类程序 , 读者可以上网查询相关信息 , 网址是 project.carrot2.org), 看的全是英文资料 , 比较的累 , 呵呵 , 不够 Carrot2 设计的真的很好 , 很容易看懂 , 不过对几个聚类算法 (lingo, Fuzzyant...) 还是要花一些功夫的 <v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" o:extrusionok="f" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock> </v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 14.25pt; HEIGHT: 14.25pt" alt="" type="#_x0000_t75"><v:imagedata src="file:///C:/DOCUME~1/Kyler/LOCALS~1/Temp/msohtml1/01/clip_image001.gif" o:href="http://fullfocus.javaeye.com/javascripts/fckeditor/editor/images/smiley/msn/wink_smile.gif"></v:imagedata></v:shape><o:p></o:p>
下面我分要点进行总结 .<o:p></o:p>
一. web 网页聚类基本流程和框架 <o:p></o:p>
这里引用的是 Carrot2 的一个框架 , 这跟我研究的 web 网页自动分类是一致的 .
<o:p> </o:p>
通过各种大型搜索引擎 API 获得源数据 ( 一般至少包括一个唯一的 URL 地址 , 网页标题 ), 通过网页清洗 , 分词 , 提取特征项 ( 降维作用 ), 建立 VSM, 构造 STC 进行聚类 ( 如果你采用 STC 作为聚类算法 ), 聚类后就到了怎样把聚类结果展现给用户了 , 这里有个很关键的问题是 , 如果让用户一看分类目录的标题 , 就知道这个类里包含那方面的内容 .<o:p></o:p>
这里要补充说一下的是 , Carrot2 并没有中文分词功能 , 其默认的分词功能往往不能尽如人意 . 本人打算以后用中科院的 ICTCLAS 分词组件进行分词 .<o:p></o:p>
<o:p></o:p>
二. 基本概念解释 <o:p></o:p>
1. TF :( term frequency ) 用关键词的次数除以网页的总字数(在一篇特定网页中) ------- 词权值 , 用于建立 VSM <o:p></o:p>
2. IDF ( Inverse document frequency ): 它的公式为log(D/Dw)其中D是全部网页数(假定一个关键词 w 在 Dw 个网页中出现过) <o:p></o:p>
------- 词权值 , 用于建立 VSM<o:p></o:p>
3. TF/IDF( 可以有改进 , 见论文 TFRDF--- 词频相对文本频率 ): 在 VSM 中文档被映射成由一组规范化特征项权值矢量 , 其中特征项权值常见的量化加权模型有 : 布尔模型、词频模型、 TF IDF 模型 , 我们使用效果较好的 TF IDF 模型。这种模型认为特征词条在某文档中的重要性与其在该文档中出现的频率成正比 , 与其在其他文档中出现的频率成反比。因此它主 <o:p></o:p>
要考虑两个因素 : ①词语频率 TF TermFrequency , 即词语在 ( 文档中出现次数 ; ②词语倒排文档频率 IDF InverseDocumentFrequency , 即词语在文档集合中分布的一种量化。 .<o:p></o:p>
4. 频度:指一个词(或其它语义单位)在文本中出现的次数越多,则所带 的 信息量越大。 <o:p></o:p>
集中度:指在多类别的大量文本中,一个词只在一类或少数几类文本里出现,而在其它文本里不出现,则它所带的信息量就大,对所在文本的类别的表示能力就强。 <o:p></o:p>
分散度:指在某一类文本中,一个词在越多的文本中出现,即越分散,说明它信息量越大,对类别表示能力越强。 <o:p></o:p>
5.. 文档频率 DF 、互信息 MI 、信息增益 IG 、期望交叉熵 CE 、 CHI 统计、文本证据权和优势率、特征强度 ------ 一系列特征提取的方法 ( 目的 : 降维 )<o:p></o:p>
<o:p> </o:p>
6. 归一化 ( 实际应用中各类别文本的长度很难一致,各类文本包含的字数、词数可能差别会很大,这对词频会造成直接影响,因此通常对词频作归一化处理。 ) 你在所有的数据中找出最大的那个数 max 可以用 matlab 的 max 函数 在所有的数据中找出最小的那个数 min 可以用 matlab 的 min 函数 然后把所有的数据这样计算 (x-min)/(max-min) 这样所有的数据都归一化为 0 到 1 之间的数了
这对于模式识别是很重要的一环 无论你是用 BP 网、多层感知器、 SVM<o:p></o:p>
<o:p> </o:p>
7 .Stopwords :词 “ 的 ” 站了总词频的 80% 以上,而它对确定网页的主题几乎没有用。我们称这种词叫 “ 应删除词 ” ( Stopwords) ,也就是说在度量相关性是不应考虑它们的频率。 <o:p></o:p>
8 负熵 :sdg ( 在 google 的数学之美系列里能找到 )<o:p></o:p>
<o:p> </o:p>
熵:是表征热力学系统的混乱度或者是无序度大小的物理量,主要描述的是
系统的稳定状态的一个表征值。<o:p></o:p>
熵包括高熵和低熵,其中“ 高熵” 对系统是高混乱的或者是无序的状态,“ 低熵” 对系统是低混乱的或者是有序的状态。
其中大多数书中主要讲到的是“ 负熵流” ,关于负熵流的概念我的理解是:外界向系统输入能量,使系统降低的熵值超过系统内部产生的熵值的那部分熵值就是负熵流。负熵值使系统趋于平衡,稳定。
9.n 元语法短语 <o:p></o:p>
一般來說, N-Gram 模型就是假設當前詞的出現概率只同它前面的 N-1 個詞有關,或者說它是用前 N-1 個詞的出現概率去預測當前詞的出現概率 (Markov Chain) 。常用的 N-Gram 模型有 uni-Gram (N=1 、一元組 ) 、 bi-Gram(N=2 、二元組 ) 和 tri-Gram (N=3 、三元組 ) 。 <o:p></o:p>
1.
傳統檢索系統以詞庫比對法斷出索引詞,則可稱為「以詞彙為主」
(word-based) 的索引詞模式。 <o:p></o:p>
2.
中文系統中亦有「以字元為主」
(character-based)
的索引詞模式。
<o:p></o:p>
3.
「
N-gram
索引法」,
N-gram
為文件中任意
N
個連續字元,
如「中國社會」此一字串,
當
N
為2時將可產生
<o:p></o:p>
「中國」、「國社」、「社會」三個索引詞。如此可排除或降低
「字元法」中類似
「中國」與「國中」的字串順序問題,也可省去「詞彙法」中維護詞庫的煩惱。
10. 一个矩阵被因式分解成两个矩阵 , 左 矩阵 U 中所有列向量 ( 称为 基向量 ).<o:p></o:p>
一直没搞懂基向量 ( 那个红坐标是怎么弄出来的 )---- 该图的背景可以看附件 Clustering SearchResults with Carrot2 的第 47 页
<o:p> </o:p>
<o:p>
11. KNN(K-Nearest Neighbor)
KNN法即K最近邻法,最初由Cover和Hart于1968年提出的,是一个理论上比较成熟的方法。该方法的思路非常简单直观:如果 一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近的一 个或者几个样本的类别来决定待分样本所属的类别。
KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。因此,采用这种方法可以较好地避免样本的不平衡 问题。另外,由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来 说,KNN方法较其他方法更为适合。
该方法的不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决 方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。另外还有一种Reverse KNN法,能降低KNN算法的计算复杂度,提高分类的效率。
该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
12. SVM法
SVM法即支持向量机(Support Vector Machine)法,由Vapnik等人于1995年提出,具有相对优良的性能指标。该方法是建立在统计学习理论基础上的机器学习方法。通过学习算 法,SVM可以自动寻找出那些对分类有较好区分能力的支持向量,由此构造出的分类器可以最大化类与类的间隔,因而有较好的适应能力和较高的分准率。该方法 只需要由各类域的边界样本的类别来决定最后的分类结果。
支持向量机算法的目的在于寻找一个超平面H(d),该超平面可以将训练集中的数据分开,且与类域边界的沿垂直于该超平面方 向的距离最大,故SVM法亦被称为最大边缘(maximum margin)算法。待分样本集中的大部分样本不是支持向量,移去或者减少这些样本对分类结果没有影响,SVM法对小样本情况下的自动分类有着较好的分类 结果。
12. K-NN和SVM是基于向量空间模型(VSM)的最好的分类器,
14. 聚类的方法: 1. 基于图论的方法,形成一个样本间相似性矩阵, 根据阀值类确定类别; 二是基于种子的方法,先指定一个初识的类中心,其他的样本的类别与最近的类中心相同; 3.聚类分裂法,将新的信息样本作为一个查询,与已经存在的类进行比较,寻求最佳匹配类作为其所属的类别. 当然,还可以将聚类方法分为平面方法和层次方法,只是考虑的角度不同而已.
(以上12点,是我学习过程中摘记下来的,虽然已经过整理,但还是有些乱^_!!)