kmeans
canopy算法
[TODO: canopy原理]
canopy算法mahout kmeans参数
-i:指定待分类数据集所在的路径
-c:指定初始类别所在路径
-o:输出聚类后的结果存放路径
-k:随机选取的类别数目
-x:最多迭代终止次数
-cl:是否首先通过canopy选取k个点,然后再运行k-means聚类
-dm:采用的向量距离计算方法,在此指定实现类
-cd:聚集偏移量,即本轮迭代次数与上一轮迭代相比,变动点总量变化值
-ow:结果目录已经存在时是否对其覆盖
-xm:sequential或者mapreduce,顺序执行还是分布式执行
实例
/usr/local/mahout/examples/bin/cluster-reuters.sh
if [[ -z "$MAHOUT_WORK_DIR" ]]; then
WORK_DIR=/tmp/mahout-work-${USER}
else
WORK_DIR=$MAHOUT_WORK_DIR
fi
curl http://kdd.ics.uci.edu/databases/reuters21578/reuters21578.tar.gz \
-o ${WORK_DIR}/reuters21578.tar.gz
mkdir -p ${WORK_DIR}/reuters-sgm
tar xzf ${WORK_DIR}/reuters21578.tar.gz -C ${WORK_DIR}/reuters-sgm
# 将SGML格式数据转化为文本文件
mahout org.apache.lucene.benchmark.utils.ExtractReuters \
${WORK_DIR}/reuters-sgm \
${WORK_DIR}/reuters-out
hdfs dfs -mkdir -p ${WORK_DIR}/
hdfs dfs -mkdir ${WORK_DIR}/reuters-sgm
hdfs dfs -mkdir ${WORK_DIR}/reuters-out
hdfs dfs -put ${WORK_DIR}/reuters-sgm ${WORK_DIR}/reuters-sgm
hdfs dfs -put ${WORK_DIR}/reuters-out ${WORK_DIR}/reuters-out
# 将数据转化为SequenceFile格式
mahout seqdirectory \
-i ${WORK_DIR}/reuters-out \
-o ${WORK_DIR}/reuters-out-seqdir \
-c UTF-8 -chunk 64 -xm sequential
# 数据向量化
mahout seq2sparse \
-i ${WORK_DIR}/reuters-out-seqdir/ \
-o ${WORK_DIR}/reuters-out-seqdir-sparse-kmeans \
--maxDFPercent 85 --namedVector \
# 执行kmeans
mahout kmeans \
-i ${WORK_DIR}/reuters-out-seqdir-sparse-kmeans/tfidf-vectors/ \
-c ${WORK_DIR}/reuters-kmeans-clusters \
-o ${WORK_DIR}/reuters-kmeans \
-dm org.apache.mahout.common.distance.EuclideanDistanceMeasure \
-x 10 -k 20 -ow --clustering
# 导出结果
mahout clusterdump \
-i `hdfs dfs \
-ls -d ${WORK_DIR}/reuters-kmeans/clusters-*-final | awk '{print $8}'` \
-o ${WORK_DIR}/reuters-kmeans/clusterdump \
-d ${WORK_DIR}/reuters-out-seqdir-sparse-kmeans/dictionary.file-0 \
-dt sequencefile -b 100 -n 20 \
--evaluate -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure \
-sp 0 \
--pointsDir ${WORK_DIR}/reuters-kmeans/clusteredPoints
cat ${WORK_DIR}/reuters-kmeans/clusterdump
网友评论