加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

总结:如何生成mulan软件的.arrf和.xml文件

发布时间:2020-12-15 22:44:26 所属栏目:百科 来源:网络整理
导读:到此为止,关于如何生成mulan的输入文件的方法比较零散,且有些方法不是合适大数据的情况,比如训练和测试 数 据 达到G级别以上。因此,次篇博客将总结出一个通用的方 法,无论数据大小都可以实现。 (1)在matlab中已经有你的输入训练数据traintdata_ch和测

到此为止,关于如何生成mulan的输入文件的方法比较零散,且有些方法不是合适大数据的情况,比如训练和测试

达到G级别以上。因此,次篇博客将总结出一个通用的方法,无论数据大小都可以实现。

(1)在matlab中已经有你的输入训练数据traintdata_ch和测试数据testdata_ch,都存在矩阵中。相应格式请参考

前的博文,此处不再叙述。

(2) 采用matlab自带的命令完成矩阵到.csv文件;

csvwrite('traindata_ch.csv',traindata_ch);

csvwrite('testdata_ch.csv',testdata_ch);

(3)在eclipse中建立一个工程和一个新类CsvToArrf.java。

配置工程的方法:

A、下载Weka的linux版本,解压;

B、右键点击CreatArff->Properties->Java Build Path->Libraries->Add Extern Jars,选择刚才解压文 件中的weka.jar和weka-src.jar这两个jar包;

C、CsvToArrf.java的内容如下:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;


import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffSaver;
/**
* Generates a big ARFF file with different attribute types.
*
* @author WuQiang
 * <span style="color: rgb(0,130,0); font-family: Consolas,'Courier New',Courier,mono,serif; line-height: 18px;">Email:qiang4.wu@changhong.com</span>
*/



public class CsvToArrf {
 public static void main(String[] args) throws Exception {
  FastVector   atts;
  FastVector   attVals;
  Instances    data;
  double[]    vals;
  int       i;


  // 1. set up attributes
  atts = new FastVector();
  // - numeric
  double num_fea=294;//the dims of a feature
  for (i=1;i<=num_fea;i++)
  <span style="white-space:pre">	</span> atts.addElement(new Attribute("feature" + (i)));
  // - nominal ;only two {0,1}
  attVals = new FastVector();
   attVals.addElement("0");
   attVals.addElement("1");
  double num_labels=5;//the number of classes
  for (i=1;i<=num_labels;i++)
   atts.addElement(new Attribute("label"+(i),attVals));


  // 2. create Instances object
  data = new Instances("traindata_ch",atts,0);
  // 3. fill with data from 。csv file
  String fileName="E:/methods/Eclipse/Create_Arrf/data/traindata_ch.csv";
  String result=null; 
  FileReader fileReader=null; 
  BufferedReader bufferedReader=null;
  fileReader=new FileReader(fileName); 
  bufferedReader=new BufferedReader(fileReader);
 // String read=null;
 // vals = new double[data.numAttributes()]; 
 while ((result=bufferedReader.readLine())!=null)
  {
   String [] subAtt=result.split(",");
  //  System.out.println(subAtt.length);
   vals = new double[data.numAttributes()]; 
   for(i=0;i<num_fea;i++)
   {
  <span style="white-space:pre">	</span> double d = Double.parseDouble(subAtt[i]);
  <span style="white-space:pre">	</span>  vals[i] = d;
   }
  // - nominal
   for(;i<num_fea+num_labels;i++)
     vals[i] = attVals.indexOf(subAtt[i]);
   // setVals(vals,data);
  //---- add
    data.add(new Instance(1.0,vals));
   // data.add(new Instance(1.0,'n'));
  }
  bufferedReader.close();
  fileReader.close();
 
  //4. output data
  System.out.println(data);
  //save to a arrf file
  ArffSaver saver = new ArffSaver();
  saver.setInstances(data);
  saver.setFile(new File("./data/traindata_ch.arff"));
 //  saver.setDestination(new File("./data/test.arff"));  // **not** necessary in 3.5.4 and later
  saver.writeBatch();
 }


/*private static void setVals(double[] vals,Instances data) {
<span style="white-space:pre">	</span>// TODO Auto-generated method stub
<span style="white-space:pre">	</span>data.add(new Instance(1.0,vals));
<span style="white-space:pre">	</span>
}*/




}


  
 注意:生成traindata_ch.arrf之后,将traindata_ch.csv改为testdata_ch.csv生成testdata_ch.arrf。 
 

(4)关于如何生.xml文件的方法,本人是在是没有找到合适的方法。如果有人找到了好的方法,希望告诉我一声。

此处,贴出一个很笨的原始生成.xml文件的方法,采用matlab语言写的。

clc;
clear all;
str1='<?xml version="1.0" encoding="utf-8"?>';
str2='<labels xmlns="http://mulan.sourceforge.net/labels">';
basestr1='<label name="';
basestr2='"></label>';
endlabel='</labels>';
lab='label';
fid=fopen('traindata_ch.xml','w');
fprintf(fid,'%sn',str1);
fprintf(fid,str2);
for i=1:num_class %num_class 是总共的类数,需要按照自己的实际需要进行修改
    lab_=[basestr1 strcat(lab,num2str(i)) basestr2];
    fprintf(fid,lab_);
    
end
fprintf(fid,'%s',endlabel);
fclose(fid);
到此,生成.arrf文件和.xml文件已经全部完成,其中训练数据和测试数的.xml文件是完全一样的,只是文件名不

一样巴了。接下来就是如何实验了。

此博文的代码全部经过测试,可能还是有很多的不足的地方。

————————此方法仅供参考,如有不足请指正!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读