本文接数据挖掘-基于Kmeans算法、MBSAS算法及DBSCAN算法的newsgroup18828文本聚类器的JAVA实现(上).
(update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见 newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQ )
本文要点如下:
介绍基于LSI(隐性语义索引)中SVD分解做特征降维的方法
介绍两外两种文本聚类算法MBSAS算法及DBSCAN算法
对比三种算法对newsgroup18828文档集的聚类效果
1、SVD分解降维
    以词项(terms)为行, 文档(documents)为列做一个大矩阵(matrix). 设一共有t行d列, 矩阵名为A. 矩阵的元素为词项的tf-idf值。然后对该矩阵做SVD分解  A=T*S*D‘,把S的m个对角元素的前k个保留(最大的k个保留), 后m-k个置0, 我们可以得到一个新的近似的分解: Xhat=T*S*D’ 。Xhat在最小二乘意义下是X的最佳近似
给定矩阵A, 基于A可以问三类同文件检索密切有关的问题
术语i和j有多相似? 
即术语的类比和聚类问题
文件i和j有多相似?
即文件的类比和聚类问题
术语i和文件j有多相关?
即术语和文件的关联问题
利用SVD分解得到的矩阵可以计算这三个问题,方法如下(DT代表D的转置,以此类推)
比较两个术语  
做"正向"乘法:
Xhat*XhatT=T*S*DT*D*S*TT=T*S2*TT=(TS)*(TS)T
DT*D=I, 因为D已经是正交归一的 ,s=sT
它的第i行第j列表明了术语i和j的相似程度
比较两个文件做"逆向"乘法:
XhatT*Xhat=D*S*TT*T*S*DT=D*S2*DT=(DS)(DS)T
TT*T=I, 因为T已经是正交归一的, s=sT
它的第i行第j列表明了文件i和j的相似程度
此法给出了求文件之间相似度的一个途径,于是可以基于此相似度矩阵实现K-means算法
比较一个文件和一个术语恰巧就是Xhat本身. 
它的第i行第j列表明了术语i和文件j的相关联程度.
SVD分解主要基于JAMA矩阵运算包实现,JAMA矩阵运算包下载见http://math.nist.gov/javanumerics/jama/
DimensionReduction.java
package com.pku.yangliu;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import Jama.Matrix;
import Jama.SingularValueDecomposition;
/**基于LSI对文档的特征向量做降维,SVD运算基于JAMA矩阵运算包实现
 *
 */
public class DimensionReduction {
	/**把测试样例的map转化成文档相似性矩阵
	 * @param Map<String, Map<String, Double>> allTestSampleMap 所有测试样例的<文件名,向量>构成的map
	 * @param String[] terms 特征词集合
	 * @return double[][] doc-doc相似性矩阵
	 * @throws IOException 
	 */
	public double[][] getSimilarityMatrix(
			Map<String, Map<String, Double>> allTestSampleMap, String[] terms) {
		// TODO Auto-generated method stub
		System.out.println("Begin compute docTermMatrix!");
		int i = 0;
		double [][] docTermMatrix = new double[allTestSampleMap.size()][terms.length];
		Set<Map.Entry<String, Map<String,Double>>> allTestSampleMapSet = allTestSampleMap.entrySet();
		for(Iterator<Map.Entry<String, Ma
 
                   
                   
                   
                   本文介绍了基于LSI的SVD分解进行特征降维方法,并对比了KMeans、MBSAS和DBSCAN算法在newsgroup18828文档集上的聚类效果。SVD分解用于计算术语相似度和文件相似度,但因计算耗时可能不适用于大规模数据。实验结果显示,KMeans在余弦相似度度量下表现良好,而SVD降维可能不是最佳选择。
本文介绍了基于LSI的SVD分解进行特征降维方法,并对比了KMeans、MBSAS和DBSCAN算法在newsgroup18828文档集上的聚类效果。SVD分解用于计算术语相似度和文件相似度,但因计算耗时可能不适用于大规模数据。实验结果显示,KMeans在余弦相似度度量下表现良好,而SVD降维可能不是最佳选择。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   2万+
					2万+
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            