linux - 象夫基准

标签 linux mahout naivebayes

我发现很难理解如何与 Mahout 交互。我有这个测试代码来训练和测试朴素贝叶斯分类。 我想测量训练所需的时间,并且想从输出文件中读取准确度值。我不知道如何阅读输出文件或衡量以良好方式学习所需的时间(例如,我可以自动运行此脚本 10 次)。感谢您的帮助!

export WORK_DIR=/user/hue/Bayes-Test/newTestData
mahout seqdirectory -i ${WORK_DIR}/data-all -o ${WORK_DIR}/data-seq -ow 
mahout seq2sparse -i ${WORK_DIR}/data-seq -o ${WORK_DIR}/data-vectors -lnorm -nv -wt tfidf
mahout split -i ${WORK_DIR}/data-vectors/tfidf-vectors  --trainingOutput ${WORK_DIR}/train-vectors  --testOutput ${WORK_DIR}/test-vectors -randomSelectionPct 99  --overwrite --sequenceFiles -xm sequential 
mahout trainnb -i ${WORK_DIR}/train-vectors -el -o ${WORK_DIR}/model -li ${WORK_DIR}/labelindex -ow -c
mahout testnb -i ${WORK_DIR}/test-vectors -m ${WORK_DIR}/model -l ${WORK_DIR}/labelindex -ow -o ${WORK_DIR}/output-testing -c

最佳答案

mahout testnb 将显示训练模型在给定数据集上的表现的混淆矩阵和分类统计数据。它实际上并不输出任何文件到目录。

您提供的 -o ${WORK_DIR}/output-testing 参数实际上未被使用,因此:

mahout testnb -i ${WORK_DIR}/test-vectors -m ${WORK_DIR}/model -l ${WORK_DIR}/labelindex -ow -o ${WORK_DIR}/output-testing -c

应该改为:

mahout testnb -i ${WORK_DIR}/test-vectors -m ${WORK_DIR}/model -l ${WORK_DIR}/labelindex -c

这将显示一个混淆矩阵和一些统计数据——如下所示:

=======================================================
Statistics
-------------------------------------------------------
Kappa                                       0.8523
Accuracy                                   88.6853%
Reliability                                84.3296%
Reliability (standard deviation)            0.2171
Weighted precision                          0.8874
Weighted recall                             0.8869
Weighted F1 score                           0.8846

因此,如果您想多次运行,以测试挂钟时间或准确性或两者兼而有之,您可以将(调整后的)脚本的 stderr/stdout 通过管道传输到一个文本文件中,例如。运行次数的平均准确度(通过搜索“准确度”等)。如果您不想测量整个管道的挂钟时间,我建议只运行一次 seqdirectoryseq2sparse,因为这些步骤会占用大量时间,并循环 split trainnbtestnb

对您的脚本进行一些调整:

export WORK_DIR=/user/hue/Bayes-Test/newTestData
mahout seqdirectory -i ${WORK_DIR}/data-all -o {WORK_DIR}/data-seq -ow 
// use either -lnorm -n 2 (log L2 length normalization) or no normalization
mahout seq2sparse -i ${WORK_DIR}/data-seq -o ${WORK_DIR}/data-vectors -nv -wt tfidf
// adjust the randomSelectionPct down to 40 for a 60/40 train/test set
mahout split -i ${WORK_DIR}/data-vectors/tfidf-vectors  --trainingOutput ${WORK_DIR}/train-vectors  --testOutput ${WORK_DIR}/test-vectors -randomSelectionPct 40  --overwrite --sequenceFiles -xm sequential 
mahout trainnb -i ${WORK_DIR}/train-vectors -o ${WORK_DIR}/model -li ${WORK_DIR}/labelindex -ow -c
mahout testnb -i ${WORK_DIR}/test-vectors -m ${WORK_DIR}/model -l ${WORK_DIR}/labelindex  -c

请注意: Mahout 有一个 Spark implementation of Naive Bayes可以从命令行和 programmatically 运行.这对确定准确性更有用。

关于linux - 象夫基准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33732418/

相关文章:

c - ALSA:打开和关闭 PCM On-The-Fly

hadoop - 如何将Hadoop与Mahout集成?

php - 如何在 php-ml 上使用朴素贝叶斯将新样本添加到同一标签?

machine-learning - SciKit Learn 使用 RFECV 进行特征选择和交叉验证

python - 在 Debian Wheezy 上使用 flask-sqlalchemy 怪异的内存使用和泄漏

linux - Grep 并增加值

python - 使用 Anaconda 的 Python 版本创建一个 virtualenv

apache-spark - Apache Mahout 和 Apache Spark 的 MLlib 有什么区别?

image-processing - 如何使用 Apache Mahout 对图像进行分类?

machine-learning - CountVectorizer MultinomialNB ValueError : dimension mismatch