weka使用笔记1-cluster内方法的使用
weka提供了11种聚类算法,常用的有kmeans 和EM,weka的simpleKmeans是最简单的聚类方法,距离是计算欧几里德距离,但是新版本的weka是可以置入自己的计算距离的公式的。EM聚类的效率很低,建议如果不是实验情况,不要使用。
主要说一下simpleKmeans聚类。SimpleKmeans聚类参数很简单,这里不再赘述,文档里面写的很清楚。用图形界面的情况下,聚类之后,在左下方的result list栏里,右键,有很多选项,其中visualize cluster assignment可以看聚类之后的结果,在这个visualize界面,有一个save,是可以把类标号添加到每一行数据的,如果数据里面有用户ID的话,那这个就可以把每个用户ID和这个用户所在的类提取出来,很方便,生成的也是.arff文件。
但是在命令行模式下,没有办法得到这个类标号,只能得到一个很简单的数据,所以只能用编程实现了。
在一个工程内引用weka.jar之后就能用weka的接口了,非常方便.废话不说,直接上代码:
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import weka.clusterers.SimpleKMeans; import weka.clusterers.ClusterEvaluation; import weka.core.Instances; import weka.core.converters.ArffLoader; public class Kmeans { public static void startCluster(String inputfilename,String outputfilename) { Instances ins = null ; SimpleKMeans KM = null ; ClusterEvaluation cl = null ; File file = new File(inputfilename); ArffLoader loader = new ArffLoader(); File f = new File(outputfilename); try { cl = new ClusterEvaluation(); loader.setFile(file); ins = loader.getDataSet(); ins.deleteAttributeAt( 0 ); //忽略第一列 KM = new SimpleKMeans(); KM.setNumClusters( 15 ); KM.buildClusterer(ins); cl.setClusterer(KM); cl.evaluateClusterer( new Instances(ins)); double [] d = cl.getClusterAssignments(); //得到每一列的类标号 if (f.exists()) { System.out.print( "cunzai" ); } else { System.out.print( "bucunzai" ); f.createNewFile(); } BufferedWriter output = new BufferedWriter( new FileWriter(f)); String dataline = "" ; output.write(cl.clusterResultsToString()); //就是聚类之后打印出来的聚类结果 for ( int i = 0 ; i < d.length;i++){ dataline = d[i]+ "" ; output.write(dataline); output.newLine(); System.out.println(dataline); } output.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
然后打上jar包就能运行了,上面代码只是得到了一个简单的类标号,还可以根据自己的需要输出更多的数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步