Weka聚类算法的两个实现算法

在这里将使用Weka自带的K-means以及EM算法对同一份数据进行聚类。

目前使用的是自带的数据集。我也不太清楚这样聚类的效果如何 sigh...

Weka Version: 3.7.10

K-Means K-均值算法

Java代码 收藏代码
  1. importjava.io.File;
  2. importweka.clusterers.SimpleKMeans;
  3. importweka.core.DistanceFunction;
  4. importweka.core.Instances;
  5. importweka.core.converters.ArffLoader;
  6. publicclassTestKMeans{
  7. publicstaticvoidmain(String[]args){
  8. Instancesins=null;
  9. SimpleKMeansKM=null;
  10. //目前没有使用到,但是在3.7.10的版本之中可以指定距离算法
  11. //默认是欧几里得距离
  12. DistanceFunctiondisFun=null;
  13. try{
  14. //读入样本数据
  15. Filefile=newFile("D:\\ProgramFiles\\Weka-3-7\\data\\contact-lenses.arff");
  16. ArffLoaderloader=newArffLoader();
  17. loader.setFile(file);
  18. ins=loader.getDataSet();
  19. //初始化聚类器(加载算法)
  20. KM=newSimpleKMeans();
  21. KM.setNumClusters(2);//设置聚类要得到的类别数量
  22. KM.buildClusterer(ins);//开始进行聚类
  23. //打印聚类结果
  24. System.out.println(KM.toString());
  25. //for(Stringoption:KM.getOptions()){
  26. //System.out.println(option);
  27. //}
  28. //System.out.println("CentroIds:"+tempIns);
  29. }catch(Exceptione){
  30. e.printStackTrace();
  31. }
  32. }
  33. }

在上面的算法之中,使用的是SimpleKMeans这个类。

使用EM算法的方法几乎一样,唯一的不同就是在设置类数目的时候可以设置成-1. 如下:

Java代码 收藏代码
  1. EMem=null;
  2. em=newEM();
  3. //使用交叉验证自动选择聚类数目
  4. em.setNumClusters(-1);
  5. em.setMaxIterations(100);
  6. em.buildClusterer(ins);

具体可以看源码:

Java代码 收藏代码
  1. /**
  2. *Setthenumberofclusters(-1toselectbyCV).
  3. *
  4. *@paramnthenumberofclusters
  5. *@throwsExceptionifnis0
  6. */
  7. @Override
  8. publicvoidsetNumClusters(intn)throwsException{
  9. if(n==0){
  10. thrownewException("Numberofclustersmustbe>0.(or-1to"
  11. +"selectbycrossvalidation).");
  12. }
  13. if(n<0){
  14. m_num_clusters=-1;
  15. m_initialNumClusters=-1;
  16. }else{
  17. m_num_clusters=n;
  18. m_initialNumClusters=n;
  19. }
  20. }

关于EM 以及K-Means的具体描述,请自行百度吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值