欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spark 机器学习 朴素贝叶斯 实现(二)

程序员文章站 2022-03-28 21:27:46
已知10月份10-22日网球场地,会员打球情况通过朴素贝叶斯算法,预测23,24号是否适合打网球。结果,日期,天气 温度 风速结果(0否,1是)天气(0晴天,1阴天,2下雨)温度(0热,1舒适,2冷)风速(0没风,1微风,2大风)训练数据vi p1.txt1,20181010,0 1 00,2018 ......

已知10月份10-22日网球场地,会员打球情况
通过朴素贝叶斯算法,预测23,24号是否适合打网球。
结果,日期,天气 温度 风速
结果(0否,1是)
天气(0晴天,1阴天,2下雨)
温度(0热,1舒适,2冷)
风速(0没风,1微风,2大风)
训练数据
vi p1.txt
1,20181010,0 1 0
0,20181011,2 2 2
1,20181012,0 0 0
1,20181013,0 0 1
1,20181014,0 1 1
1,20181014,0 1 1
1,20181015,0 1 0
0,20181016,1 2 2
0,20181017,1 2 2
0,20181018,2 2 2
0,20181019,2 1 1
0,20181020,2 1 2
0,20181021,1 2 2
1,20181022,0 1 0

测试数据
vi p2.txt
20181023,0 1 1
20181024,2 1 0

1.装载朴素贝叶斯包
scala> import org.apache.spark.mllib.classification.{naivebayes,naivebayesmodel}
scala> import org.apache.spark.mllib.linalg.vectors
scala> import org.apache.spark.mllib.regression.labeledpoint
//标注点labeledpoint是一种带有标签(label/response)的本地向量,它可以是稠密或者是稀疏的。在mllib中,标注点在监督学习算法中被使用。由于标签是用双精度浮点型来存储的,故标注点类型在回归(regression)和分类(classification)问题上均可使用。例如,对于二分类问题,则正样本的标签为1,负样本的标签为0,而对于多类别的分类问题来说,标签则应是一个以0开始的索引序列:0, 1, 2 ...

2.创建rdd数据集
scala> val data1=sc.textfile("hdfs://h201:9000/p1.txt")
scala> val data2=sc.textfile("hdfs://h201:9000/p2.txt")


3.转换格式(贝叶斯算法识别的格式)
val train1=data1.map(line=>{
     val line1=line.split(",")
     val line2=labeledpoint(line1(0).todouble,vectors.dense(line1(2).split(' ').map(_.todouble)))
     (line2)
})
//vectors.dense转换为”稠密向量”
val test1=data2.map(line=>{
   val line1=line.split(",")
   val line2=vectors.dense(line1(1).split(' ').map(_.todouble))
   (line2)
})

4.应用朴素贝叶斯算法
scala>val model =naivebayes.train(train1,lambda = 1.0)
//获得训练模型,第一个参数为数据,第二个参数为平滑参数,默认为1,可改

scala>val tt=model.predict(test1)
scala> tt.collect()