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