1. 程式人生 > >spark mllib和ml類裏面的區別

spark mllib和ml類裏面的區別

回歸 ati pam return lec ref nsf 有變 onf

mllib是老的api,裏面的模型都是基於RDD的,模型使用的時候api也是有變化的(model這裏是naiveBayes),
(1:在模型訓練的時候是naiveBayes.run(data: RDD[LabeledPoint])來訓練的,run之後的返回值是一個NaiveBayesModel對象,就可以使用NaiveBayesModel.predict(testData: RDD[Vector]): RDD[Double] 裏面不僅可以傳入一個RDD[Vector] ,裏面還可以傳入單個Vector,得到單個預測值,然後就可以調用save來進行保存了,具體的可以看官方文檔API
(2:模型使用可以參考(1,模型的讀取是使用load方法去讀的

ml是新的API,ml包裏面的模型是基於dataframe操作的
(1:在模型訓練的時候是使用naiveBayes.fit(dataset: Dataset[]): NaiveBayesModel來訓練模型的,返回值是一個naiveBayesModel,可以使用naiveBayesModel.transform(dataset: Dataset[]): DataFrame,進行模型的檢驗,然後再通過其他的方法來評估這個模型,
(2:模型的使用可以參考(1: 是使用transform來進行預測的,取預測值可以使用select來取值,使用select的時候可以使用“$”label””的形式來取值

訓練的時候是使用的NaiveBayes,使用的時候使用naiveBayesModel

ml包裏的模型訓練代碼請參考ml包裏面的模型訓練代碼 ml包裏面的模型的使用

mllib代碼的使用會在稍後貼上:
mllib的建模使用代碼:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.classification.LogisticRegressionWithSGD

class EmailClassification { } object EmailClassification{ def main(args: Array[String]): Unit = { val sc = getSparkCont() //每一行都以一封郵件 val spam = sc.textFile("spam.txt"); val nomal = sc.textFile("normal.txt") //創建一個hashingTF實例來吧郵件文本映射為包含10000個特征的向量 val tf = new HashingTF(10000) //把郵件都被分割為單詞,每個單詞都被映射成一個向量 val spamFeatures = spam.map { email => tf.transform(email.split(" ")) } val nomalFeatures = nomal.map { email => tf.transform(email.split(" ")) } //創建LabelPoint 的數據集 val positiveExamples = spamFeatures.map { feature => LabeledPoint(1,feature) } val negativeExamples = nomalFeatures.map { feature => LabeledPoint(1,feature) } val trainingData = positiveExamples.union(negativeExamples) //使用SGD算法運行邏輯回歸 返回的類型是LogisticRegression 但是這個模型是有save,但是沒有load方法,我還在思考,讀者如果有什麽意見或者看法可以下面評論的 val model = new LogisticRegressionWithSGD().run(trainingData) //創建一個郵件向量進行測試 val posTest = tf.transform("cheap stuff by sending money to ....".split(" ")) val prediction = model.predict(posTest) println(prediction) } def getSparkCont():SparkContext={ val conf = new SparkConf().setAppName("email").setMaster("local[4]") val sc = new SparkContext(conf) return sc } }

spark mllib和ml類裏面的區別