zoukankan      html  css  js  c++  java
  • spark mllib和ml类里面的区别

    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
      }
    
    }
  • 相关阅读:
    将数据保存在线程中
    OpenSmtp 的代码修正,支持中文和HTTP代理连接
    枚举.NET的基本类型
    通过HTTP代理连接到目的的协议
    程序出现了异常:应用程序无法启动,因为应用程序的并行配置不正确
    关于最近的一篇文章
    检测TextBox的回车键事件
    程序跳过trycatch地崩溃
    给程序加上UAC控制的几个链接
    Sql Server附加数据库的时候出现Operating system error 5: "5(Access is denied.)" 的错误
  • 原文地址:https://www.cnblogs.com/itboys/p/6860786.html
Copyright © 2011-2022 走看看