spark 机器学习 朴素贝叶斯 实现(二)
已知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()
下一篇: 2017年传统企业如何融入互联网