首页betway必威体育app官网 › Spark机器学习(4):朴素贝叶斯算法

Spark机器学习(4):朴素贝叶斯算法

1. 贝叶斯定理

规格概率公式:

图片 1

其一公式非常简单,就是计量以B发生的景象下,A发生的概率。但是过多辰光,我们那个容易了解P(A|B),需要算的是P(B|A),这时就要用到贝叶斯定理:

图片 2

2. 仔细贝叶斯分类

俭贝叶斯分类的演绎过程尽管非详述了,其流程可以略的之所以同摆设图来代表:

图片 3

 

推个简易的例子来说,下面就张表说明了各级地方的人口构成:

图片 4

夫时段要一个非法皮肤的食指走过来(一个得分类项(0,0,1)),他是出自欧美,亚洲抑或非洲啊?可以根据省贝叶斯分类进行计算:

欧美=0.30×0.90×0.20×0.40=0.0216

亚洲=0.95×0.10×0.05×0.40=0.0019

非洲=0.90×1.00×0.90×0.20=0.1620

即使他自非洲之可能最充分,来自欧美的可能性次之,来自亚洲的可能最小,那么我们即便判断他自非洲,这同咱们日常生活中之涉是一致的。

苟特征性是连连值,则仍下面的公式计算:

图片 5

图片 6

3. MLlib之贝叶斯分类

直上代码:

import org.apache.log4j.{Level, Logger}
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.{SparkConf, SparkContext}

object NaiveBayesTest {
  def main(args: Array[String]) {
    // 设置运行环境
    val conf = new SparkConf().setAppName("Naive Bayes Test")
      .setMaster("spark://master:7077").setJars(Seq("E:\\Intellij\\Projects\\MachineLearning\\MachineLearning.jar"))
    val sc = new SparkContext(conf)
    Logger.getRootLogger.setLevel(Level.WARN)

    // 读取样本数据并解析
    val dataRDD = sc.textFile("hdfs://master:9000/ml/data/sample_naive_bayes_data.txt")
    val parsedDataRDD = dataRDD.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
    }

    // 样本数据划分,训练样本占0.8,测试样本占0.2
    val dataParts = parsedDataRDD.randomSplit(Array(0.8, 0.2))
    val trainRDD = dataParts(0)
    val testRDD = dataParts(1)

    // 建立贝叶斯分类模型并训练
    val model = NaiveBayes.train(trainRDD, lambda = 1.0, modelType = "multinomial")

    // 对测试样本进行测试
    val predictionAndLabel = testRDD.map(p => (model.predict(p.features), p.label, p.features))
    val showPredict = predictionAndLabel.take(50)
    println("Prediction" + "\t" + "Label" + "\t" + "Data")
    for (i <- 0 to showPredict.length - 1) {
      println(showPredict(i)._1 + "\t" + showPredict(i)._2 + "\t" + showPredict(i)._3)
    }

    val accuracy = 1.0 * predictionAndLabel.filter(x => x._1 == x._2).count() / testRDD.count()
    println("Accuracy=" + accuracy)
  }
}

内,NaiveBayes是贝叶斯分类伴生对象,train方法进行模型训练,三个参数分别是训练样本,平滑参数和模型类别。模型类别来少只:multinomial(多项式)和bernoulli(伯努利),这里运用的是multinomial。predict方法根据特征值进行判定分类。

运作结果:

图片 7

转载本站文章请注明出处:bway883.com https://www.piworx.com/?p=1718

上一篇:

下一篇:

相关文章

网站地图xml地图