我发现很难理解如何与 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 通过管道传输到一个文本文件中,例如。运行次数的平均准确度(通过搜索“准确度”等)。如果您不想测量整个管道的挂钟时间,我建议只运行一次 seqdirectory
和 seq2sparse
,因为这些步骤会占用大量时间,并循环 split
trainnb
和 testnb
。
对您的脚本进行一些调整:
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/