Raf*_*ero 5 java apache-spark naivebayes apache-spark-mllib
我有一个带有这种结构的小文件“naivebayestest.txt”
10 1:1
20 1:2
20 1:2
Run Code Online (Sandbox Code Playgroud)
从这些数据中,我试图对向量 (1) 进行分类。如果我正确理解贝叶斯,则 (1) 的标签应该是 10(概率为 1!)。Spark MLlib 中的程序:
String path = "/usr/local/spark/data/mllib/bayestest.txt";
JavaRDD<LabeledPoint> training = MLUtils.loadLibSVMFile(jsc.sc(), path).toJavaRDD();
final NaiveBayesModel model = NaiveBayes.train(training.rdd());
Vector v = Vectors.dense(1);
double prediccion = model.predict(v);
System.out.println("Vector: "+v+" prediction: "+prediccion);
Run Code Online (Sandbox Code Playgroud)
显示 Vector: [1.0] prediction: 20.0
我用 1050 个元素的训练集获得了相同的结果,形式的 350 (1/3)10 1:1和其余的20 1:2(2/3),我仍然得到相同的预测 20.0 向量 1。
我究竟做错了什么?
Naive Bayes模型将针对所有 3 条记录进行训练。你的假设
如果我正确理解贝叶斯,(1) 的标签应该是 10(概率为 1!)
这里是错误的 正确的概率是
P(10|1) = P(1|10) * P(10)/P(1)
Run Code Online (Sandbox Code Playgroud)
这是根据定义,但由于附加平滑,该公式可能会发生变化。我不确定那会是什么公式。但由于加法平滑,概率 P(20|1) 似乎大于 P(10|1)。因此你得到的结果是这样的。
如果有大量的训练数据,它会更有意义。
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |