java - 使用来自模型向量的数据(具有很少的属性),而无需在 JAVA 中的 WEKA API 中制作 ARFF 文件
问题描述
我正在尝试在我的模型类的两个向量中准备一些数据,以使用 Java 中的 WEKA API 进行分类训练(一个用于训练,另一个用于测试)。有没有一种方法可以让我不必制作 *.ARFF 文件来安排我的数据?
我的模型类包含六个属性 L1(String)、L2(String)、A(double)、B(double)、C(double)、D(double)、Station(String)
每行看起来像这样,其中 traindata 是向量:
for(int i=0; i<traindata.size(); i++) {
double[] row = new double[] { traindata.get(i).getL1(),traindata.get(i).getL2(),traindata.get(i).getA(), traindata.get(i).getB(), traindata.get(i).getC(), traindata.get(i).getD(), traindata.get(i).getStation() };
}
向量是这些的大集合。
任何人都可以帮助我吗?
解决方案
要在 Weka 中训练分类器,您需要一个Instances
对象。一个Instances
对象既包含您的数据结构,也包含您的每个Instance
数据。ARFF 文件是 Instances 对象的序列化版本。AnInstance
只是一个包含数据示例/实例的结构。
所以你可以创建一个对象,用sInstances
填充它。Instance
这是一个简单的代码:
// create attributes. For nominal attributes list all possible values
ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(new Attribute("L1", new ArrayList<String>(Arrays.AsList("L1_val1", "L1_val2", ...)));
attributes.add(new Attribute("L2", new ArrayList<String>(Arrays.AsList("L2_val1", "L2_val2", ...)));
attributes.add(new Attribute("A"));
attributes.add(new Attribute("B"));
attributes.add(new Attribute("C"));
attributes.add(new Attribute("D"));
attributes.add(new Attribute("Station", new ArrayList<String>(Arrays.AsList("S1", "S2", ...)));
//create Instances
Instances ins = new Instances(name, attributes, traindata.size());
//create Instance
for(int i=0; i<traindata.size(); i++) {
String L1 = traindata.get(i).getL1();
String L2 = traindata.get(i).getL2();
String station = traindata.get(i).getStation();
double[] row = new double[] {
attributes.get(0).indexOfValue(L1), //convert string to double - index of L1
attributes.get(1).indexOfValue(L2), //convert string to double - index of L2
traindata.get(i).getA(),
traindata.get(i).getB(),
traindata.get(i).getC(),
traindata.get(i).getD(),
attributes.get(1).indexOfValue(station), //convert string to double
};
Instance instance = new DenseInstance(weight, row);
instances.add(instance);
}
//build classifier
classifier.buildClassifier(instances);
推荐阅读
- wordpress - 我如何更改大小 fa fa-instagram (wordpress)
- javascript - 返回虚假声明不适用于我的表单
- javascript - javascript拼接方法从末尾删除元素
- authentication - 使用 okta 身份验证和客户端凭据 API 身份验证集成前端和资源服务器
- php - 如何为 WSDL 服务器做中继?
- wordpress - WordPress 主题开发中的文本域问题
- html - 定义 CSS 网格中的行数
- xaml - XAML MSBuild 任务 XamlMarkupCompilePass1 在并行 MSBuild 中失败并引发错误访问被拒绝
- angular - 如何在同一个项目中使用另一个库的角度构建一个库
- c++ - 如何评估开关中的 QChar 对象?