weka中,如何使用EM聚类,并导出聚类结果

新建Eclipse工程,下载weka.jar包,导入工程,新建class类,创建main函数,这些都不用说了吧!

首先准备数据

官方文本格式为arff,个人原因选择TXT格式,这个不必纠结!

新建txt文本,格式为ANSI,接下来文件内容格式:
@relation 作者
@attribute 特征名称 特征属性
@data
第一个特征值,第二个特征值,……

备注:①个人认为relation不是很重要,但是为了不必要的麻烦,可以写一下。
②attribute为特征,如果你的样本用k个特征表示,那么就有k行@attribute。
③data后面写每个样本的特征向量,中间用英文逗号隔开。
④特征属性可以为实数,可以为bool值,可以为string,
⑤特征属性有四种基本类型

numeric                     数值型 
<nominal-specification>     分类(nominal)型 
string                      字符串型 
date [<date-format>]        日期和时间型

注意“integer”,“real”,“numeric”,“date”,“string”这些关键字是区分大小写的,而“relation”“attribute ”和“date”则不区分。

具体数据格式可以看博客:http://blog.csdn.net/buaalei/article/details/7103055

准备好数据就可以写代码了!!

Instances ins = null;//用来存放样本
EM em = null;//聚类模型
int classnum=400;//聚类数目
try {
// 读入样本数据
    File file = new File("D:/f.txt");//准备刚才的数据
    ArffLoader loader = new ArffLoader();//weka自带的数据读取类
    loader.setFile(file);//读入文件
    ins = loader.getDataSet();//获取样本

// 初始化聚类器 (加载算法)
    em = new EM();//初始化聚类器
    em.setNumClusters(classnum); // 设置聚类要得到的类别数量
    em.buildClusterer(ins); // 开始进行聚类
// 打印聚类结果
    ClusterEvaluation evaluation=new ClusterEvaluation();//聚类评估器
    evaluation.setClusterer(em);//设置需要评估的聚类器
    evaluation.evaluateClusterer(new Instances(ins));//设置样本
    double[] cnum=evaluation.getClusterAssignments();//获取每个样本聚类后所属类别
    //System.out.println(KM.toString());//输出每个簇的簇中心
} catch (Exception e) {
    e.printStackTrace();
}

基础代码就是这些,想要输出聚类后每个簇有哪些样本,需要自己根据实际情况写代码。cnum标记了每个每个样本所属的类簇,且顺序是与data(代码中为f.txt)后的数据顺序是一致的。

如果问我我是怎么输出聚簇结果,那我说说我的思路吧!我有一个分词文件,里面是每个样本分词结果!data文件(f.txt)中每个样本的特征向量就是基于原始样本分词结果生成的,分词文件(里面是文本)与data文件(里面有特征向量)中的样本顺序是保持一致的,这样我只需要读入分词文件中的每一个样本,并用cnum做标记,然后用Map进行分类,进行输出,就可以得到最后聚类的结果!

Map<Double,List<String>> result=new HashMap<Double,List<String>>();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值