k-means聚类算法hadoop实现源码

本篇文章只讲可用的hadoop实现算法的源码,可直接拷贝用于工程中!

算法实现主要包括了四个类

ParticleModel:质点特征类,任何业务都必须提取出事务的数字特征才可用程序来处理,例如,一个苹果的质点特征可以是:颜色、重量、口感

在定义质点特征类时可以这样来做,double x,y,z分别代表颜色、重量、口感,例如0代表青色,1代表红色,这样就把具体的事务抽像成了程序可以识别与处理的普通bean

ClusterCenter:对熟悉k-means算法的人来说,这个类非常容易理解,就是最终要聚类成几个簇

KmeanMRStep1:这是一个map-reduce类,随机生成k个聚类中心,其中Map函数就是读取需要聚类的原始数据,Reduce过程根据随机原则从原始数据中抽取K个数据作为原始簇中心

KmeanMRStep2:迭代计算聚类结果,map计算相似度,reduce更新簇中心

KmeansDriver类:这是Map-reduce的驱动函数,所有的工程都是类似的固定的编程风格和方法

/**
 * 质点特征模型,可根据自己的业务需求进行修改
 *
 * @author jianting.zhao
 */
public class ParticleModel {

    //特征x
    public double x;

    //特征y
    public double y;

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }
}
/**
 * 定义簇中心
 *
 * @author jianting.zhao
 */
public class ClusterCenter {

    //簇的编号
    public int K;

    public ParticleModel particleModel;


    public ParticleModel getParticleModel() {
        return particleModel;
    }

    public void setParticleModel(ParticleModel particleModel) {
        this.particleModel = particleModel;
    }

    public int getK() {
        return K;
    }

    public void setK(int K) {
        this.K = K;
    }


}
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

/*
 * kmeans聚类第一步:随机生成k个聚类中心
 */
public class KmeanMRStep1 {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
        if (otherArgs.length != 3) {
            System.err.println("Usage: Data Deduplication <in> <out> <cluster num>");
            System.exit(2);
        }
        conf.set("ClusterNum", otherArgs[2]);
        FileSystem fs = FileSystem.get(conf);
        Path centerPath = new Path(otherArgs[1]);
        fs.deleteOnExit(cente
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿童木-atom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值