为了账号安全,请及时绑定邮箱和手机立即绑定

使用来自模型向量的数据(具有很少的属性)

使用来自模型向量的数据(具有很少的属性)

吃鸡游戏 2022-07-20 10:36:30
我正在尝试在我的模型类的两个向量中准备一些数据,以使用 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() };}向量是这些的大集合。任何人都可以帮助我吗?
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

要在 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);


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信