我发现很难理解如何与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
发布于 2015-11-18 06:01:31
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有一个可以从命令行和programmatically运行的Spark implementation of Naive Bayes。这在确定准确性方面可能更有用。
https://stackoverflow.com/questions/33732418
复制相似问题