• 十二、spark MLlib的scala示例


    简介

    spark MLlib官网:http://spark.apache.org/docs/latest/ml-guide.html

    mllib是spark core之上的算法库,包含了丰富的机器学习的一系列算法。你可以通过简单的API来构建算法模型,然后利用模型来进行预测分析推荐之类的。

    它包含了一些工具,如:

    1)算法工具:分类、回归、聚类、协同等

    2)特征化工具:特征提取、转换、降维、选择等

    3)管道:用于构建、评估和调整机器学习管道的工具

    4)持久性:保存和加载算法、模型、管道

    5)实用工具:线性代数、统计、数据处理等工具

    spark MLlib支持的算法很丰富,以下将以ALS推荐算法为例,简单使用MLlib

    ALS简介

    目前热门的推荐算法主要是协同过滤算法,而ALS(alternate least square:交替最小二乘法)指的是使用最小二乘法的协同过滤算法。

    ALS在mllib.recommendation.ALS中,使用步骤如下:

    1)输入RDD,类型为mllib.recommendation.Rating

    2)调用train方法训练出模型,类型未mllib.recommendation.MatrixFactorizationModel

    有了ALS模型以后,我们可以利用这个模型去做一些预测

    代码示例

    以下代码,使用Array数组模拟了一份简单的数据(用户ID, 商品ID, 评分),并生成RDD。

    我们将RDD作为输入,进行模型训练。而后,我们拿训练好的模型进行预测:用户ID=1,产品ID=2的评分

    import org.apache.spark.mllib.recommendation.{ALS, MatrixFactorizationModel, Rating}
    import org.apache.spark.rdd.RDD
    import org.apache.spark.{SparkConf, SparkContext}
    
    /**
      * @Description spark 协同过滤推荐算法示例
      * @Author lay
      * @Date 2018/12/10 22:29
      */
    object SparkALSDemo {
      var conf: SparkConf = _
      var sc: SparkContext = _
      var data: Array[String] = Array("1,1,1.0", "1,2,2.0", "1,3,4.5", "2,3,4.0", "2,4,5.0")
      var dataRDD: RDD[(Int, Int, Float)] = _
      var ratings: RDD[Rating] = _
      var model: MatrixFactorizationModel = _
    
      def init: Unit = {
        conf = new SparkConf().setAppName("spark als demo").setMaster("local")
        sc = new SparkContext(conf)
      }
    
      def makeRdd: Unit = {
        dataRDD = sc.parallelize(data).map{x => val lines = x.split(","); (lines(0).toInt, lines(1).toInt, lines(2).toFloat)}
        ratings = dataRDD.map(x => Rating(x._1, x._2, x._3))
      }
    
      def trainModel: Unit = {
        val rank = 10 // 向量大小,默认10
        val iterations = 10 // 迭代次数,默认10
        model = ALS.train(ratings, rank, iterations)
      }
    
      def main(args: Array[String]): Unit = {
        // 初始化
        init
        // 生成RDD
        makeRdd
        // 训练模型
        trainModel
        // 预测结果
        val result = model.predict(1, 2)
        println("预测评分:" + result)
      }
    }

    输出结果为:

    预测评分:1.9874704066075966

    我们看到预测数据与我们的训练数据 “2” 近似

    以上代码只是做了一个简单的过程演示,大体了解MLlib的过程是个什么样的概念。

    在实际项目中,输入数量可能是海量的,并且会有训练数据和校验数据。在不断地训练和校验过程当中去迭代算法实现不断地逼近实际值,从而达到满意的结果。所以,除了模型训练过程外,机器学习中对模型的精确校验也是很重要的,它的结果标识着你的模型训练是否是一个有使用价值的模型。

    spark MLlib的其它算法也是类似的使用,你只需要给它数据,然后训练模型,便可以利用模型来预测分析分类等

  • 相关阅读:
    数组,集合,泛型
    DataSet和实体,泛型集合
    数据源绑定控件的Row/ItemDataBound事件
    Access 中时间格式 yyyyMMdd HH:mm:ss
    IMG标记的alt属性和title属性详解
    后台代码(cs)中加空格
    数据绑定控件之绑定项
    数据绑定控件之DataBound事件
    DataSet,DataTable,DateView的关系和用法
    程序编程网
  • 原文地址:https://www.cnblogs.com/lay2017/p/10099967.html
Copyright © 2020-2023  润新知