./spark.sh "EvaluatePrequential -l (SGDLearner -l 0.01 -p .001 -o LogisticLoss -r ZeroRegularizer)
–s (FileReader –k 100 –d 60 –f ../data/mydata)" 1> ../log 2>../result
上面的例子中是在streamDM程序的scripts下运行的,linux系统终端cd进去这个目录就可以,然后执行上面代码,streamDM自己去github下载。
下面说明一下这些参数:
-l -s这两个参数是EvaluatePrequential 类中的,当然还有其他参数 如下:
/**
* Task for evaluating a classifier on a stream by testing then training with
* each example in sequence.
*
* <p>It uses the following options:
* <ul>
* <li> Learner (<b>-l</b>), an object of type <tt>Classifier</tt>
* <li> Evaluator (<b>-e</b>), an object of type <tt>Evaluator</tt>
* <li> Reader (<b>-s</b>), a reader object of type <tt>StreamReader</tt>
* <li> Writer (<b>-w</b>), a writer object of type <tt>StreamWriter</tt>
* </ul>
*/
-l对应的为所用的算法,这里调用了SGD算法;
SGDLearner后面跟着SGD算法的参数:
1. -1对应学习参数(Learning parameter),
2. -o 对应损失函数(Loss function parameter),可以是LogisticLoss,Squaredloss,HingeLoss或者PerceptronLoss,
3. -r对应正则方法(Regularizer parameter),可以是ZeroRegularizer, L1Regularizer或者L2Regularizer;
当然还有其他的参数如下:
/**
* The SGDLearner trains a LinearModel using the stochastic gradient descent
* algorithm. The type of loss function, the lambda learning
* reate parameter, and the number of features need to be specified in the
* associated Task configuration file.
*
* <p>It uses the following options:
* <ul>
* <li> Number of features (<b>-f</b>)
* <li> Rate of learning parameter (<b>-l</b>)
* <li> Loss function (<b>-o</b>), an object of type <tt>Loss</tt>-o 对应损失函数(Loss function parameter),可以是LogisticLoss,Squaredloss,HingeLoss或者PerceptronLoss
* <li> Regularizer (<b>-r</b>), an object of type <tt>Regularizer</tt>-r对应正则方法(Regularizer parameter)ZeroRegularizer, L1Regularizer或者L2Regularizer
* <li> Regularization parameter (<b>-p</b>)-p对应正则化参数(Regularization parameter)
* </ul>
*/
-s对应数据的来源:
例子中通过从文件mydata读取数据生成DStream,周期为60秒,每一个RDD包含100个数据;
参数列表如下:
/**
* FileReader is used to read data from one file of full data to simulate a stream data.
*
* <p>It uses the following options:
* <ul>
* <li> Chunk size (<b>-k</b>)
* <li> Slide duration in milliseconds (<b>-d</b>)
* <li> Type of the instance to use, it should be "dense" or "sparse" (<b>-t</b>)
* <li> Data File Name (<b>-f</b>)
* <li> Data Header Format,uses weka's arff as default.(<b>-h</b>)
* </ul>
*/
1>将log重定向到log文件,
2>将结果重定向到result文件。
之前博客运行的数据是mydata,我自己运行的是hyperplanesampledata,都在源码中data里面存在。
./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> ../log 2>../result
这是我跑程序的代码,其中比上面的多了一个-f 因为源码里面默认的是
特征个数默认是3 所以会经常报错误提示:java.lang.ArrayIndexOutOfBoundsException:4
val numFeaturesOption: IntOption = new IntOption("numFeatures", 'f',
"Number of Features", 3, 1, Integer.MAX_VALUE)
当你数据特征大于3时候,因此非常有必要加上-f,这是我初步用-f解决的这个异常的错误,如有不正确希望提出。
其次就是官方文档中的写的感觉不好,可能是格式问题吧,我直接赋值粘贴过来跟源代码应该匹配的是不一样的。
上面的黄色圈起来的是官方文档的,下面的黄色圈起来是看源码得到的,有没有发现两个横杠不一样长呢?????下面那个短的是对的,如果写成上面的会报错的。