Mahout学习笔记

Mahout支持Hadoop2.X,最低JDK要求为1.7。文章介绍了Mahout中的三种向量类型:DenseVector、RandomAccessSparseVector和SequentialAccessSparseVector,以及它们在不同场景的应用。详细讲解了如何使用mahout工具进行文件向量化,包括seqdirectory、seq2sparse、seqdumper、vectordump和clusterdump等命令,用于文本到SequenceFile的转换、向量文件的读取和聚类结果分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mahou从1.0开始支持hadoop2.X,jdk需要1.7以上。

一、mahout中的向量

1、在mahout中,向量被实现为三个不同的类,每个类都是针对不同场景优化的:DenseVector、RandomAccessSparseVector和SequentialAccessSparseVector。

a、DenseVector可被视为一个double型数组,其大小为数据中的特征个数。因为不管数组的元素之是不是0,数组中所有元素都被预先分配了空间。我们称之为密集的(dense)。

b、RandomAccessSparseVector被实现为integer型和double型之间的一个HashMap,只有非零元素被分配空间。因此,这类向量被成为稀疏向量。

c、SequentialAccessSparseVector实现为两个并列的数组,一个是integer型另一个是double型。其中只保留了非零元素。与面向随机访问的RandomAccessSparseVector不同,它是为顺序读取而优化的。

2向量选择:

具体选择那种实现依赖于算法。如果算法要对向量的值做许多随机插入和更新,就适合使用像DenseVector和RandomAccessSparseVector这样支持快速随机访问的实现。另一方面,而对于像k-means聚类这样反复计算向量大小的算法,SequentialAccessSparseVector实现的执行速度就会比RandomAccessSparseVector更快。


3、Mahout文件向量化

Mahout已经提供了工具类,它基于 Lucene 给出了对文本信息进行分析,然后创建文本向量。mahout提供下面两个命令来将文本转成向量形式(转化成向量后可以聚类):
  • mahout seqdirectory:将文本文件转成SequenceFile(序列)文件,SequenceFile文件是一种二制制存储的key-value键值对,对应的源文件是org.apache.mahout.text.SequenceFilesFromDirectory.java
  • mahout seq2sparse:将SequenceFile(序列)转成向量文件,对应的源文件是org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles.java 
  • 命令: mahout seqdirectory -i /user/hadoop/file1 -o /user/hadoop/file2


查看转化结果:

  • mahout seqdumper:将SequenceFile文件转成文本形式,对应的源文件是org.apache.mahout.utils.SequenceFileDumper.java
  • mahout vectordump:将向量文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.vectors.VectorDumper.java
  • mahout clusterdump:分析最后聚类的输出结果,对应的源文件是org.apache.mahout.utils.clustering.ClusterDumper.java
  • 命令: mahout vectordump -i /user/hadoop/file2 -o /user/hadoop/file3
  • 具体每种命令如何用及参数如何选择,在命令行后面加-h或-help可以查看

3、

mahout rowid \
   -i wikipedia-vectors/tfidf-vectors/part-r-00000
   -o wikipedia-matrix

 mahout rowsimilarity -i zh/matrix/matrix -o zh/similarity  -ow -r 399996 --similarityClassname SIMILARITY_COSINE -m 50 -ess



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值