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

前端之家收集整理的这篇文章主要介绍了总结:如何生成mulan软件的.arrf和.xml文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

到此为止,关于如何生成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的内容如下:

  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileReader;
  4.  
  5.  
  6. import weka.core.Attribute;
  7. import weka.core.FastVector;
  8. import weka.core.Instance;
  9. import weka.core.Instances;
  10. import weka.core.converters.ArffSaver;
  11. /**
  12. * Generates a big ARFF file with different attribute types.
  13. *
  14. * @author WuQiang
  15. * <span style="color: rgb(0,130,0); font-family: Consolas,'Courier New',Courier,mono,serif; line-height: 18px;">Email:qiang4.wu@changhong.com</span>
  16. */
  17.  
  18.  
  19.  
  20. public class CsvToArrf {
  21. public static void main(String[] args) throws Exception {
  22. FastVector atts;
  23. FastVector attVals;
  24. Instances data;
  25. double[] vals;
  26. int i;
  27.  
  28.  
  29. // 1. set up attributes
  30. atts = new FastVector();
  31. // - numeric
  32. double num_fea=294;//the dims of a feature
  33. for (i=1;i<=num_fea;i++)
  34. <span style="white-space:pre"> </span> atts.addElement(new Attribute("feature" + (i)));
  35. // - nominal ;only two {0,1}
  36. attVals = new FastVector();
  37. attVals.addElement("0");
  38. attVals.addElement("1");
  39. double num_labels=5;//the number of classes
  40. for (i=1;i<=num_labels;i++)
  41. atts.addElement(new Attribute("label"+(i),attVals));
  42.  
  43.  
  44. // 2. create Instances object
  45. data = new Instances("traindata_ch",atts,0);
  46. // 3. fill with data from 。csv file
  47. String fileName="E:/methods/Eclipse/Create_Arrf/data/traindata_ch.csv";
  48. String result=null;
  49. FileReader fileReader=null;
  50. BufferedReader bufferedReader=null;
  51. fileReader=new FileReader(fileName);
  52. bufferedReader=new BufferedReader(fileReader);
  53. // String read=null;
  54. // vals = new double[data.numAttributes()];
  55. while ((result=bufferedReader.readLine())!=null)
  56. {
  57. String [] subAtt=result.split(",");
  58. // System.out.println(subAtt.length);
  59. vals = new double[data.numAttributes()];
  60. for(i=0;i<num_fea;i++)
  61. {
  62. <span style="white-space:pre"> </span> double d = Double.parseDouble(subAtt[i]);
  63. <span style="white-space:pre"> </span> vals[i] = d;
  64. }
  65. // - nominal
  66. for(;i<num_fea+num_labels;i++)
  67. vals[i] = attVals.indexOf(subAtt[i]);
  68. // setVals(vals,data);
  69. //---- add
  70. data.add(new Instance(1.0,vals));
  71. // data.add(new Instance(1.0,'\n'));
  72. }
  73. bufferedReader.close();
  74. fileReader.close();
  75. //4. output data
  76. System.out.println(data);
  77. //save to a arrf file
  78. ArffSaver saver = new ArffSaver();
  79. saver.setInstances(data);
  80. saver.setFile(new File("./data/traindata_ch.arff"));
  81. // saver.setDestination(new File("./data/test.arff")); // **not** necessary in 3.5.4 and later
  82. saver.writeBatch();
  83. }
  84.  
  85.  
  86. /*private static void setVals(double[] vals,Instances data) {
  87. <span style="white-space:pre"> </span>// TODO Auto-generated method stub
  88. <span style="white-space:pre"> </span>data.add(new Instance(1.0,vals));
  89. <span style="white-space:pre"> </span>
  90. }*/
  91.  
  92.  
  93.  
  94.  
  95. }


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

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

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

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

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

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

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

猜你在找的XML相关文章