mahout k-means聚类的入门操作步骤重点:

1.把文本文件变为sequence file:

mahout seqdirectory -i file://$(pwd)/news/
-o file://$(pwd)/news-seq/ -c UTF-8 -chunk 64 -xm sequential

mahout seqdirectory -i file://$(pwd)/1/
-o file://$(pwd)/1-seq/ -c UTF-8 -chunk 64 -xm sequential

2.把本地的seqence file传到hadoop上去:

[[email protected] data]# hadoop fs -mkdir /news/news

[[email protected] data]# hadoop fs -put news-seq /news/news

hadoop fs -put 1-seq /news/1

3.把sequence file向量化:

mahout seq2sparse -i /news/news/news-seq -o /news/news/news-sparse -lnorm
-nv -wt tfidf -a org.apache.lucene.analysis.core.WhitespaceAnalyzer

mahout seq2sparse -i /news/1/1-seq -o /news/1/news-sparse -lnorm
-nv -wt tfidf -a org.apache.lucene.analysis.core.WhitespaceAnalyzer

df-count 目录:保存着文本的频率信息

tf-vectors 目录:保存着以 TF 作为权值的文本向量

tfidf-vectors 目录:保存着以 TFIDF 作为权值的文本向量

tokenized-documents 目录:保存着分词过后的文本信息

wordcount 目录:保存着全局的词汇出现的次数

dictionary.file-0 目录:保存着这些文本的词汇表

frequcency-file-0 目录 : 保存着词汇表对应的频率信息。

4.把向量化的数据用k-means算法聚类

mahout kmeans -i /news/news/news-sparse/tfidf-vectors -c /news/news/news-kmeans-clusters -o /news/news/news-kmeans -k 10 -dm org.apache.mahout.common.distance.CosineDistanceMeasure -x
10 -ow --clustering

bjYTWD1021

mahout kmeans -i /news/1/news-sparse/tfidf-vectors -c /news/1/news-kmeans-clusters -o /news/1/news-kmeans -k 1000 -dm org.apache.mahout.common.distance.CosineDistanceMeasure -x
10 -ow --clustering

5.聚类结束,查看结果:

1)打到屏幕上

mahout seqdumper -i /news/news/news-kmeans/clusteredPoints

2)下载到本地

mahout seqdumper -i /news/news/news-kmeans/clusteredPoints -o ./files

mahout seqdumper -i /news/1/news-kmeans/clusteredPoints -o ./1

推荐:::::

http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/

ik分词用来分词的类:

org.wltea.analyzer.lucene.IKAnalyzer

看聚类的结果:

mahout seqdumper -i /user/news3/news3-kmeans/clusteredPoints/

mahout seq2sparse -i /news/news11/news11-seq -o /news/news11/news-sparse -lnorm -nv -wt tfidf -a org.apache.lucene.analysis.core.WhitespaceAnalyzer


mahout seq2sparse -i ~/mahout-dirs/seq -o ~/mahout-dirs/vectors 
-lnorm -nv -wt tfidf -a org.wltea.analyzer.lucene.IKAnalyzer
mahout seq2sparse -i ~/mahout-dirs/seq -o ~/mahout-dirs/vectors 
-lnorm -nv -wt tfidf -a org.apache.lucene.analysis.core.WhitespaceAnalyzer

mahout seq2sparse -i ~/mahout-dirs/seq -o ~/mahout-dirs/vectors 
-lnorm -nv -wt tfidf -a org.apache.lucene.analysis.standard.StandardAnalyzer

mahout seq2sparse -i /user/news/news-seq -o /user/news/news-sparse -ow --weight tfidf--maxDFPercent 85 --namedVector
-a org.wltea.analyzer.lucene.IKAnalyzer

向量化:

mahout seq2sparse -i /user/coder4/reuters-seq -o /user/coder4/reuters-sparse -ow --weight tfidf --maxDFPercent 85 --namedVector -a org.apache.lucene.analysis.core.WhitespaceAnalyzer

org.wltea.analyzer.lucene.IKAnalyzer

k-means:

mahout kmeans -i /user/news/news-sparse/tfidf-vectors -c
/user/news/news-kmeans-clusters -o /user/news/news-kmeans -k 100 -dm org.apache.mahout.common.distance.CosineDistanceMeasure -x
10 -ow --clustering

1. 修改hadoop文件

JAVA=$JAVA_HOME/bin/java

JAVA_HEAP_MAX=-Xmx1024m

2 修改hadoop-env.sh文件

# The maximum amount of heap to use, in MB. Default is 1000.

export HADOOP_HEAPSIZE=2000

3, 环境变量 JAVA_OPTS

JAVA_OPTS="-Xms3350 -Xmx3350m"

-Xms64m -Xmx1024m

在mapred-site.xml中设置:

<property>

<name>mapred.child.java.opts</name>

<value>-Xmx2048m</value>

</property>

值改大一些  1024m。

我们经常遇到这样的问题,内存溢出,内存溢出的原因是很简单,不够用了,不够用该怎么设置,通过水设置。可以参考下面案例

一、hadoop的mapreduce作业中经常出现Java heap space解决方案

常常被一些用户问到,说“为什么我的mapreduce作业总是运行到某个阶段就报出如下错误,然后失败呢?以前同一个作业没出现过的呀?”

10/01/10 12:48:01 INFO mapred.JobClient: Task Id : attempt_201001061331_0002_m_000027_0, Status : FAILED

java.lang.OutOfMemoryError: Java heap space

at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:498)

at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)

at org.apache.hadoop.mapred.Child.main(Child.java:158)

这个实际上是 Out Of Memory OOM问题。

其实这样的错误有时候并不是程序逻辑的问题(当然有可能是由于程序写的不够高效,产生的内存消耗不合理而导致),而是由于同样的作业,在数据量和数据本身发生不同时就会占据不同数量的内存空间。由于hadoop的mapreduce作业的运行机制是:在jobtracker接到客户端来的job提交后,将许多的task分配到集群中各个tasktracker上进行分块的计算,而根据代码中的逻辑可以看出,其实是在tasktracker上启了一个java进程进行运算,进程中有特定的端口和网络机制来保持map
和reduce之间的数据传输,所以,这些OOM的错误,其实就是这些java进程中报出了OOM的错误。

知道了原因以后就好办了,hadoop的mapreduce作业启动的时候,都会读取jobConf中的配置(hadoop-site.xml),只要在该配置文件中将每个task的jvm进程中的-Xmx所配置的java进程的max heap size加大,就能解决这样的问题:

<property>

<name>mapred.child.java.opts</name>

<value>-Xmx1024m</value>

</property>

PS:该选项默认是200M

新版本应该是在conf/hadoop-env.sh文件中修改。默认为1000M

输入分析:

mahout下处理的文件必须是SequenceFile格式的,所以需要把txtfile转换成sequenceFile,而聚类必须是向量格式的,mahout提供下面两个命令来将文本转成向量形式

1.mahout seqdirectory:将文本文件转成SequenceFile文件,SequenceFile文件是一种二制制存储的key-value键值对,对应的源文件是org.apache.mahout.text.SequenceFilesFromDirectory.java

2.mahout seq2sparse:将SequenceFile转成向量文件,对应的源文件是org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles.java

输出分析:即查看结果

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

具体每种命令如何用及参数选择,可以在命令行后面加-h或-help,例如,查看mahout seqdumper -h,这样终端下,就会列出详细的参数选项及说明

最重要的是读读这几个命令的源代码,看看是如何实现的,这样才可以灵活运用到自己的应用中去

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 22:52:41

mahout k-means聚类的入门操作步骤重点:的相关文章

k means聚类过程

k-means是一种非监督 (从下图0 当中我们可以看到训练数据并没有标签标注类别)的聚类算法 0.initial 1.select centroids randomly 2.assign points 3.update centroids 4.reassign points 5.update centroids 6.reassign points 7.iteration reference: https://www.naftaliharris.com/blog/visualizing-k-me

scikitlearn库中调用K近邻算法的操作步骤

1.k近邻算法可以说是唯一一个没有训练过程的机器学习算法,它含有训练基础数据集,但是是一种没有模型的算法,为了将其和其他算法进行统一,我们把它的训练数据集当做它的模型本身.2.在scikitlearn中调用KNN算法的操作步骤如下(利用实际例子举例如下):#1导入相应的数据可视化模块import numpy as npimport matplotlib.pyplot as plt #2输入训练的数据集x_train.y_trainraw_data_X=[[3.393533211,2.331273

k均值聚类

目录 一.k均值简介 二.应用简介 三.算法 四.选择合适的K 五.具体实例 一.k均值简介 K均值聚类是一种无监督学习,对未标记的数据(即没有定义类别或组的数据)进行分类. 该算法的目标是在数据中找到由变量K标记的组.该算法迭代地工作基于所提供的特征,将每个数据点分配给K个组中的一个. 基于特征相似性对数据点进行聚类. K均值聚类算法的结果是: 1.K簇的质心,可用于标记新数据 2.训练数据的标签(每个数据点分配给一个集群) 二.应用简介 K均值聚类算法用于查找未在数据中明确标记的组.这可用于

第十篇:K均值聚类(KMeans)

前言 本文讲解如何使用R语言进行 KMeans 均值聚类分析,并以一个关于人口出生率死亡率的实例演示具体分析步骤. 聚类分析总体流程 1. 载入并了解数据集:2. 调用聚类函数进行聚类:3. 查看聚类结果描述:4. 将聚类结果图形化展示:5. 选择最优center并最终确定聚类方案:6. 图形化展示不同方案效果并提交分析报表. 人口出生/死亡率聚类分析 - K均值聚类 1. 载入并了解数据集 1.1 从网上下载一份txt格式的关于人口出生率统计的数据(countries.txt).其内容大致如下

R与数据分析旧笔记(十五) 基于有代表性的点的技术:K中心聚类法

基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成聚簇 随机选择一个非中心点,用它代替某个现有的中心点,计算这个代换的总代价S 如果S<0,则用代替,形成新的k个中心点集合 重复2,直至中心点集合不发生变化 K中心法的实现:PAM PAM使用离差平方和来计算成本S(类似于ward距离的计算) R语言的cluster包实现了PAM K中心法的优点:对于&

机器学习--k均值聚类(k-means)算法

一.基本原理 分类是指分类器根据已标注类别的训练集,通过训练可以对未知类别的样本进行分类.分类被称为监督学习.如果训练集的样本没有标注类别,那么就需要用到聚类.聚类是把相似的样本聚成一类,这种相似性通常以距离来度量.聚类被称为无监督学习. 聚类是指根据"物以类聚"的原理,将本身没有类别的样本聚集成不同的组,这样的一组数据对象的集合叫做簇,并且对每一个这样的簇进行描述的过程.它的目的是使得属于同一个簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似.与分类规则不同,进行聚类前并不知道

iOS数据库操作之coredata详细操作步骤

CHENYILONG Blog iOS数据库操作之coredata详细操作步骤 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong iOS应用数据存取的常用方式 ? XML属性列表 -- PList? NSKeyedArchiver 归档 ?Preference(偏好设置) ? SQLite3? Core DataCore Data简介 ? Core Data 是iOS SDK 里的一个很强大的

机器学习实战笔记-利用K均值聚类算法对未标注数据分组

聚类是一种无监督的学习,它将相似的对象归到同一个簇中.它有点像全自动分类.聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好 簇识别给出聚类结果的含义.假定有一些数据,现在将相似数据归到一起,簇识别会告诉我们这些簇到底都是些什么.聚类与分类的最大不同在于,分类的目标事先巳知,而聚类则不一样.因为其产生的结果与分类相同,而只是类别没有预先定义,聚类有时也被称为无监督分类(unsupervised classification ). 聚类分析试图将相似对象归人同一簇,将不相似对象归到不

[机器学习][K-Means] 无监督学习之K均值聚类

有监督学习虽然高效.应用范围广,但最大的问题就是需要大量的有标签的数据集,但现实生活中我们遇到的大量数据都是没有明确标签的,而且对于庞大的数据集进行标注工作本身也是一项费时费力的工作模式,所以我们希望找到一种方法能自动的挖掘数据集中各变量的关系,然后"总结"出一些规律和特征进行分类,这样的方法我们成为无监督学习(Unsupervised learning). 在无标签的数据集中进行分类的方法成为聚类.顾名思义,聚类就是依照某种算法将相似的样本聚在一起形成一类,而不管它的标签是什么.在聚