华为StreamDM中读取文件的操作

之所以写这篇博客,是因为我在用streamDM的hoeffding tree中遇到了问题。我遇到的问题就是我之前下载的数据格式是libsvm格式,即格式为
label findex1:value1 findex2:value2
然后hoeffding tree是源码中没有设置读取libsvm格式数据,只包含了weka中的ARFF格式数据 和常见的csv格式数据。
其中,ARFF格式数据分为带头文件与不带头文件的数据,如下图所示
这里写图片描述

运行的目录位置 
/usr/local/eclipse/eclipsework/streamDM/streamDM/scripts 
运行SGDLearner 代码
  ./spark.sh "EvaluatePrequential -l (SGDLearner -l 0.01 -p .001 -o   LogisticLoss -r ZeroRegularizer -f 10) -s (FileReader -k 100 -d 60 -f ../data/hyperplanesampledata)" 1> ../result 2>../log
  运行SGDLearner 代码
./spark.sh "EvaluatePrequential -l trees.HoeffdingTree -s (FileReader -k 100 -d 60 -f ../data/hyperplanesampledata)" 1> ../result 2>../log

其中1>是把结果写到result文件,2>是把运行日志写到log文件中去。
那么重点来了
当我们传入文件是hyperplanesampledata,程序会去找到这个文件,
1:然后并且去检索同一个目录下如否存在hyperplanesampledata.arff.head文件,而这个hyperplanesampledata.arff.head文件存放的是这个数据集的属性及其类的介绍,如下:

@relation sample-data
@attribute NumericFeature0 numeric
@attribute NumericFeature1 numeric
@attribute NumericFeature2 numeric
@attribute NumericFeature3 numeric
@attribute NumericFeature4 numeric
@attribute NumericFeature5 numeric
@attribute NumericFeature6 numeric
@attribute NumericFeature7 numeric
@attribute NumericFeature8 numeric
@attribute NumericFeature9 numeric
@attribute class {false,true}

hyperplanesampledata存放数据的文件格式如下,其中第一列是类标签然后空格然后第一个属性取值,第二个属性取值,依次类推:

1.0 2.2184009561542757,2.3595683630654993,1.8448494994495541,4.696733657126028,4.646215956856672,-1.668424873976766,-1.7296616533854,2.4001462585369557,-2.8541816428428954,-2.9286398568270475
```:
**2** 如果找不到arff的头文件那么说明这个arff文件应该满足下面的格式也就是weka中自带的那种格式,程序才能正常运行,举个常见的iris的数据例子如下;





<div class="se-preview-section-delimiter"></div>

@RELATION iris

@ATTRIBUTE sepallength REAL
@ATTRIBUTE sepalwidth REAL
@ATTRIBUTE petallength REAL
@ATTRIBUTE petalwidth REAL
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}

@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa

**3**.当读取的非以上两种arff格式数据时候,比如读取csv数据,那么源码中的确有提到csv数据读取,但是无论是否csv对应着有头文件,那么读取头文件并进行操作时候都返回了一个类的空指针,然而这个类在模型初始化时候用到了,这个类其实是封装了属性及其类的一些情况,那么初始化时候有个需要读取numclasses时候会取不到值,无法正常初始化。因此表明streamDM中hoeffdingtree算法读取csv文件会始终报错。那么我们如何处理呢?
我们可以把csv文件转为weka中arff文件格式然后去跑数据;
或者我们把数据中第一列后面的逗号编程空格,然后自己加个arff带头文件的那种格式,然后也可以运行。加个头文件模仿就行,首先创建个文件名字按照下面格式命名:filename.arff.head  其中filename是你存放数据的按个文件的名字,然后内容模仿如下:





<div class="se-preview-section-delimiter"></div>

@relation sample-data
@attribute NominalFeature0 {0,1,2,3,4}
@attribute NominalFeature1 {0,1,2,3,4}
@attribute NominalFeature2 {0,1,2,3,4}
@attribute NominalFeature3 {0,1,2,3,4}
@attribute NominalFeature4 {0,1,2,3,4}
@attribute NumericFeature5 numeric
@attribute NumericFeature6 numeric
@attribute NumericFeature7 numeric
@attribute NumericFeature8 numeric
@attribute NumericFeature9 numeric
@attribute class {false,true}

“`

4如果是libsmv格式怎么办呢?同理转就可以,转为上面提到的两种arff数据就可以。

@relation sample-data
@attribute NominalFeature0 {0,1,2,3,4}
@attribute NominalFeature1 {0,1,2,3,4}
@attribute NominalFeature2 {0,1,2,3,4}
@attribute NominalFeature3 {0,1,2,3,4}
@attribute NominalFeature4 {0,1,2,3,4}
@attribute NumericFeature5 numeric
@attribute NumericFeature6 numeric
@attribute NumericFeature7 numeric
@attribute NumericFeature8 numeric
@attribute NumericFeature9 numeric
@attribute class {false,true}

4如果是libsmv格式怎么办呢?同理转就可以,转为上面提到的两种arff数据就可以。
转换数据可看这篇博客[博客地址](http://blog.csdn.net/jiandanjinxin/article/details/50886826)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值