mahout读书笔记 -- 聚类(2)
2013-01-06 15:16
99 查看
最简单例子:
聚类算法包括k-means,canopy,fuzzy k-means,lda等,例子是用k-means讲解的。
mahout的聚类算法要求输入格式是sequencefile,hadoop库也广泛使用这一格式
为mahout准备输入数据分为三步:
1:数据预处理
2:使用预处理数据创建vectors
3:保存vectors到sequencefile
具体到例子,第一步不需要做了,从第二步做起,上代码:
从代码中清楚看到,使用的是RandomAccessSparseVector,长度是每个点的维数,这里就是2了,这些Vector都放入到一个Vector List里边备用
下一步是要把这些vectors转换到mahout能使用的sequencefile
sequencefile和writeable这套东西可以看成hadoop自己搞的一套序列化的东东,你按他的要求做就行了
这篇文章对sequencefile的讲解比较好,http://yaoyinjie.blog.51cto.com/3189782/922368
hadoop SequenceFile 是一个由二进制形式key/value的字节流组成的存储文件,SequenceFile可压缩可切分
压缩方式有三种:CompressionType.NONE,CompressionType.RECORD,CompressionType.BLOCK
sequencefile的头格式包括:version,key和value的类名,是否压缩及压缩类名
sequencefile的写入通过SequenceFile.Writer来实现,调用append(key, value)方法写入
下面是实例代码:
可以看到,append的时候,key是一个从0递增的整数LongWritable化,而value是VectorWritable化的vector,这里的vector是上面生成的vector list里边取得的
聚类算法包括k-means,canopy,fuzzy k-means,lda等,例子是用k-means讲解的。
mahout的聚类算法要求输入格式是sequencefile,hadoop库也广泛使用这一格式
为mahout准备输入数据分为三步:
1:数据预处理
2:使用预处理数据创建vectors
3:保存vectors到sequencefile
具体到例子,第一步不需要做了,从第二步做起,上代码:
public static List<Vector> getPoints(double[][] raw) { List<Vector> points = new ArrayList<Vector>(); for (int i = 0; i < raw.length; i++) { double[] fr = raw[i]; Vector vec = new RandomAccessSparseVector(fr.length); vec.assign(fr); points.add(vec); } return points; }
从代码中清楚看到,使用的是RandomAccessSparseVector,长度是每个点的维数,这里就是2了,这些Vector都放入到一个Vector List里边备用
下一步是要把这些vectors转换到mahout能使用的sequencefile
sequencefile和writeable这套东西可以看成hadoop自己搞的一套序列化的东东,你按他的要求做就行了
这篇文章对sequencefile的讲解比较好,http://yaoyinjie.blog.51cto.com/3189782/922368
hadoop SequenceFile 是一个由二进制形式key/value的字节流组成的存储文件,SequenceFile可压缩可切分
压缩方式有三种:CompressionType.NONE,CompressionType.RECORD,CompressionType.BLOCK
sequencefile的头格式包括:version,key和value的类名,是否压缩及压缩类名
sequencefile的写入通过SequenceFile.Writer来实现,调用append(key, value)方法写入
下面是实例代码:
public static void writePointsToFile(List<Vector> points, String fileName, FileSystem fs, Configuration conf) throws IOException { Path path = new Path(fileName); SequenceFile.Writer writer = new SequenceFile.Writer(fs, conf, path, LongWritable.class, VectorWritable.class); long recNum = 0; VectorWritable vec = new VectorWritable(); for (Vector point : points) { vec.set(point); writer.append(new LongWritable(recNum++), vec); } writer.close(); }
可以看到,append的时候,key是一个从0递增的整数LongWritable化,而value是VectorWritable化的vector,这里的vector是上面生成的vector list里边取得的
相关文章推荐
- mahout读书笔记 -- 聚类(1)
- mahout读书笔记 -- 聚类(3)
- mahout读书笔记 -- 聚类(4)
- mahout读书笔记 -- 聚类(5)
- mahout读书笔记 -- 聚类(6)
- 基于文本的信息自动聚类
- 层次聚类的时间控制
- 聚类基本数学模型
- 超大数据之GPU聚类 (10亿量级)
- 互联网中的使用习惯与行为聚类
- Spectral Clustering[谱聚类]
- [学习]探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类
- Lucene聚类分组统计功能(grouping)
- [Hadoop in China 2011] 人人网:基于Hadoop的SNS统计和聚类推荐
- 数据挖掘中分类和聚类的区别
- 探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类
- 完整的最简单的谱聚类python代码
- 使用Mahout0.5进行中文聚类
- 一些关于文档聚类和搜索结果聚类算法的开源项目
- 聚类评估