当前位置: 萬仟网 > IT编程>数据库>其他数据库 > spark 机器学习 朴素贝叶斯 实现(二)

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

2019年06月12日 07:27  | 萬仟网IT编程  | 我要评论

已知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()

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

◎已有 0 人评论

Copyright © 2019  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com