ナイーブベイズ - RDDベースのAPI

ナイーブベイズ は特徴の各ペア間の独立性を仮定する、単純な多クラス分類アルゴリズムです。ナイーブベイズはとても効率的に訓練することができます。訓練データの一回の走査で、ラベルが付けられた各特徴の条件付確率の分布を計算し、与えられた観察のラベルが付けられた各特徴の条件付確率の分布を計算するためにベイズ定理を適用し、予測のために使用します。

spark.mllib多項ナイーブベイズ および ベルヌーイナイーブベイズをサポートします。これらのモデルは一般的に文章の分類に使われます。コンテキスト内で、各観測はドキュメントであり、各特徴は値が単語の頻度(多項ナイーブベイズ)、あるいは単語がドキュメントで見つかったかどうかを0あるいは1で示す(ベルヌーイナイーブベイズ)単語です。特徴値は非負数でなければなりません。モデルのタイプは任意のパラメータ"multinomial" あるいは"bernoulli"を使って選択されます。デフォルトは"multinomial"です。パラメータ $\lambda$ (デフォルトは $1.0$)を設定することで加法スムージング を使うことができます。文章の分類の場合、入力特徴ベクトルは通常sparse で、まばらさを利用するために入力としてsparseベクトルが提供されなければなりません。訓練データは一度しか使われないため、それをキャッシュする必要はありません。

NaiveBayes は多項ナイーブベイズを実装します。LabeledPointのRDDと任意のスムージングパラメータlambda を入力として、任意のモデルのタイプパラメータ(デフォルトは"multinomial")を取り、評価および予想のために使用することができるNaiveBayesModelを出力します。

APIの詳細はNaiveBayes Scala ドキュメント および NaiveBayesModel Scala ドキュメント を参照してください。

import org.apache.spark.mllib.classification.{NaiveBayes, NaiveBayesModel}
import org.apache.spark.mllib.util.MLUtils

// Load and parse the data file.
val data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")

// Split data into training (60%) and test (40%).
val Array(training, test) = data.randomSplit(Array(0.6, 0.4))

val model = NaiveBayes.train(training, lambda = 1.0, modelType = "multinomial")

val predictionAndLabel = test.map(p => (model.predict(p.features), p.label))
val accuracy = 1.0 * predictionAndLabel.filter(x => x._1 == x._2).count() / test.count()

// Save and load model
model.save(sc, "target/tmp/myNaiveBayesModel")
val sameModel = NaiveBayesModel.load(sc, "target/tmp/myNaiveBayesModel")
例の完全なコードは Spark のリポジトリの "examples/src/main/scala/org/apache/spark/examples/mllib/NaiveBayesExample.scala" で見つかります。

NaiveBayes は多項ナイーブベイズを実装します。LabeledPointのScala RDDと任意のスムージングパラメータlambda を入力として取り、評価および予想のために使用することができるNaiveBayesModelを出力します。

APIの詳細はNaiveBayes Java ドキュメント および NaiveBayesModel Java ドキュメント を参照してください。

import scala.Tuple2;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.mllib.classification.NaiveBayes;
import org.apache.spark.mllib.classification.NaiveBayesModel;
import org.apache.spark.mllib.regression.LabeledPoint;
import org.apache.spark.mllib.util.MLUtils;

String path = "data/mllib/sample_libsvm_data.txt";
JavaRDD<LabeledPoint> inputData = MLUtils.loadLibSVMFile(jsc.sc(), path).toJavaRDD();
JavaRDD<LabeledPoint>[] tmp = inputData.randomSplit(new double[]{0.6, 0.4});
JavaRDD<LabeledPoint> training = tmp[0]; // training set
JavaRDD<LabeledPoint> test = tmp[1]; // test set
NaiveBayesModel model = NaiveBayes.train(training.rdd(), 1.0);
JavaPairRDD<Double, Double> predictionAndLabel =
  test.mapToPair(p -> new Tuple2<>(model.predict(p.features()), p.label()));
double accuracy =
  predictionAndLabel.filter(pl -> pl._1().equals(pl._2())).count() / (double) test.count();

// Save and load model
model.save(jsc.sc(), "target/tmp/myNaiveBayesModel");
NaiveBayesModel sameModel = NaiveBayesModel.load(jsc.sc(), "target/tmp/myNaiveBayesModel");
例の完全なコードは Spark のリポジトリの "examples/src/main/java/org/apache/spark/examples/mllib/JavaNaiveBayesExample.java" で見つかります。

NaiveBayes は多項ナイーブベイズを実装します。LabeledPointのRDDと任意のスムージングパラメータlambda を入力として取り、評価および予想のために使用することができるNaiveBayesModelを出力します。

Python API はまだモデルの保存/ロードをサポートしていませんが、将来的にサポートされるでしょう。

APIについての詳細はNaiveBayes Python ドキュメント およびNaiveBayesModel Python ドキュメントを参照してください。

from pyspark.mllib.classification import NaiveBayes, NaiveBayesModel
from pyspark.mllib.util import MLUtils



# Load and parse the data file.
data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")

# Split data approximately into training (60%) and test (40%)
training, test = data.randomSplit([0.6, 0.4])

# Train a naive Bayes model.
model = NaiveBayes.train(training, 1.0)

# Make prediction and test accuracy.
predictionAndLabel = test.map(lambda p: (model.predict(p.features), p.label))
accuracy = 1.0 * predictionAndLabel.filter(lambda pl: pl[0] == pl[1]).count() / test.count()
print('model accuracy {}'.format(accuracy))

# Save and load model
output_dir = 'target/tmp/myNaiveBayesModel'
shutil.rmtree(output_dir, ignore_errors=True)
model.save(sc, output_dir)
sameModel = NaiveBayesModel.load(sc, output_dir)
predictionAndLabel = test.map(lambda p: (sameModel.predict(p.features), p.label))
accuracy = 1.0 * predictionAndLabel.filter(lambda pl: pl[0] == pl[1]).count() / test.count()
print('sameModel accuracy {}'.format(accuracy))
例の完全なコードは Spark のリポジトリの "examples/src/main/python/mllib/naive_bayes_example.py" で見つかります。
TOP
inserted by FC2 system