当前位置: 首页 > article >正文

在java中调用weka聚类方法并显示相应的类标签+weka中创建arff数据

1.读取arff文件

Instances data = new Instances(new BufferedReader(new FileReader("/some/where/data.arff")));
// setting class attribute
data.setClassIndex(data.numAttributes() - 1);

2.直接在程序中创建数据集

1)创建数据格式:

1numeric(数值型):Attribute numeric = new Attribute("name_of_attr");

2data(日期):Attribute date = new Attribute("name_of_attr", "yyyy-MM-dd");

3nominal(标称型):

ArrayList<String> labels = new ArrayList<String>();

labels.addElement("label_a");

labels.addElement("label_b");

labels.addElement("label_c");

labels.addElement("label_d");

Attribute nominal = new Attribute("name_of_attr", labels);

4stringAttribute string = new Attribute("name_of_attr", (ArrayList<String>)

null);

5)实例:创建一个关系relation(名字叫attributes),其中包含三个属性(两个个数值型,一个标称型包含yesno

//创建两个数值型
Attribute num1 = new Attribute("num1");
Attribute num2 = new Attribute("num2");
//创建一个标称型
ArrayList<String> labels = new ArrayList<String>();
labels.add("no");
labels.add("yes");
Attribute cls = new Attribute("class", labels);
//创建一个relation关系
ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(num1);
attributes.add(num2);
attributes.add(cls);
//把创建的格式应用在数据集中
Instances dataset = new Instances("Test-dataset", attributes, 0);
//如果知道数据有多少行,就可以不用0

结果:


(2)添加数据

1)创建一个数组

double[] values = new double[data.numAttributes()];

2)添加相应的数据

numeric just sets the numeric value:

values[0] = 1.23;

date turns the date string into a double value:

values[1] = data.attribute(1).parseDate("2001-11-09");

nominal determines the index of the label:

values[2] = data.attribute(2).indexOf("label_b");

string determines the index of the string, using the addStringValue method (internally, a hashtable holds all the string values):

values[3] = data.attribute(3).addStringValue("This is a string");

relational

Instances dataRel = new Instances(data.attribute(4).relation(),0);

valuesRel = new double[dataRel.numAttributes()];

valuesRel[0] = 2.34;

valuesRel[1] = dataRel.attribute(1).indexOf("val_C");

dataRel.add(new DenseInstance(1.0, valuesRel));

values[4] = data.attribute(4).addRelation(dataRel);

 

例子:创建一个atff文件格式

                /*** 1.创建数据格式*///创建两个数值型Attribute num1 = new Attribute("num1");Attribute num2 = new Attribute("num2");//创建一个标称型ArrayList<String> labels = new ArrayList<String>();labels.add("no");labels.add("yes");Attribute cls = new Attribute("class", labels);//创建一个relation关系ArrayList<Attribute> attributes = new ArrayList<Attribute>();attributes.add(num1);attributes.add(num2);attributes.add(cls);//把创建的格式应用在数据集中//如果知道数据有多少行,就可以不用0Instances dataset = new Instances("Test-dataset", attributes, 0);/*** 2.添加数据(第一行)*/double[] values = new double[dataset.numAttributes()];values[0] = 1.23;values[1] = 2;values[2] = dataset.attribute(2).indexOfValue("yes");dataset.add(new DenseInstance(1.0, values));/*** 2.添加数据(第二行)*/values=new double[dataset.numAttributes()];values[0] = 10.23;values[1] = 100;values[2] = dataset.attribute(2).indexOfValue("no");dataset.add(new DenseInstance(1.0, values));System.out.println(dataset);

结果:



3.生成一个arff文件

import weka.datagenerators.DataGenerator;
import weka.datagenerators.classifiers.classification.RDG1;
...
// configure generator
RDG1 generator = new RDG1();
generator.setMaxRuleSize(5);
// set where to write output to
java.io.PrintWriter output = new java.io.PrintWriter(
new java.io.BufferedWriter(new java.io.FileWriter("rdg1.arff")));
generator.setOutput(output);
DataGenerator.makeData(generator, generator.getOptions());
output.flush();
output.close();

4.参数设置

1手工建立一个String数组

String[] options = new String[2];

options[0] = "-R";

options[1] = "1";

2weka.core.Utils类中的函数splitOptions将一个命令行字符串转换成一下数组

String[] options = weka.core.Utils.splitOptions("-R 1");


5.聚类方法

(1)实现方法

Instances data = ... // from somewhere

String[] options = new String[2];

options[0] = "-I"; // max. iterations

options[1] = "100";

EM clusterer = new EM(); // new instance of clusterer

clusterer.setOptions(options); // set the options

clusterer.buildClusterer(data); // build the clusterer


(2)评价聚类的标准(用来确定该聚类方法是否是好的)

使用ClusterEvaluation类

Instances data = ... // from somewhere

EM cl = new EM();

cl.buildClusterer(data);

ClusterEvaluation eval = new ClusterEvaluation();

eval.setClusterer(cl);

eval.evaluateClusterer(new Instances(data));

System.out.println(eval.clusterResultsToString());

 

例子:实现KMeans算法

/*** 5.实现聚类方法*/String[] option=new String[4];	//设置相应的参数option[0]="-N";	//聚类数option[1]="2";option[2]="-I";	//最大迭代次数option[3]="500";SimpleKMeans kmeans = new SimpleKMeans(); // new instance of clustererkmeans.setOptions(option); // set the optionskmeans.buildClusterer(dataset); // build the clusterer/*** 6.评价聚类,使用ClusterEvaluation*/ClusterEvaluation eval = new ClusterEvaluation();eval.setClusterer(kmeans);eval.evaluateClusterer(new Instances(dataset));System.out.println(eval.clusterResultsToString());

6.保存数据(可以保存成arffcsv文件)

// data structure to save

Instances data = ...

// save as ARFF

DataSink.write("/some/where/data.arff", data);

// save as CSV

DataSink.write("/some/where/data.csv", data);


7.获取聚类的编号

                /*** 6.评价聚类,使用ClusterEvaluation*/ClusterEvaluation eval = new ClusterEvaluation();eval.setClusterer(kmeans);eval.evaluateClusterer(new Instances(dataset));System.out.println(eval.clusterResultsToString());/*** 7.每个实例的所属类别*/for(int i=0;i<eval.getClusterAssignments().length;i++){System.out.println(eval.getClusterAssignments()[i]);}



http://www.lryc.cn/news/2413676.html

相关文章:

  • 企业安全意识必修课——修改远程桌面登录端口避免恶意扫描入侵
  • JSP | 简易购物车的实现
  • HTC (Desire V)T328W ROOT 教程 及关闭充电动画
  • 传奇单机版就是自己在家里架设一个
  • 基于SpringBoot+Vue酒店订房系统的设计与实现
  • 关于代理服务器的原理及用法
  • svn找不到节点_章泽天公园甩鞭抽陀螺,现场图曝光:生活不易,全靠自己找乐趣...
  • BUCK电路工作原理以及参数设计
  • 这篇文章带你了解一下WAP建站。
  • Scala 的那些奇怪的符号 (一)
  • 用户行为分析的背景以及几种模型分析、实例分析——淘宝用户行为分析
  • ASP进行数据库查询时SQL语句的几种特殊用法
  • 在线网址URL生成二维码的API接口
  • 一个Springboot项目页面中CSS,JS文件加载失败的问题
  • 包括遗传算法在内的现代优化算法简介
  • 从零开始的Android学习之路:一、AndroidStudio的安装以及安卓开发环境的配置
  • 开源项目 `blog` 使用教程
  • datagridview设置选中行_pycharm常用快捷键和设置
  • 智能ABC输入法使用技巧
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。_网络安全教程
  • KVM 介绍
  • python编程有什么用处,python编程主要学什么
  • 风云决动画好看吗??
  • FreeTextBox使用详解(FTBv3-1-6)
  • 【无线安全实践入门】破解WiFi密码的多个方法
  • 开根号计算机在线应用,根号计算器(万能计算器在线计算)
  • debugbar php漏洞,Laravel-debugbar 开发调试利器
  • Nodejs基础
  • CVE-2015-0235
  • python心理学实验平台,python心理学实验程序(psychopy)