简介

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的评分

  1. import org.apache.spark.mllib.recommendation.{ALS, MatrixFactorizationModel, Rating}
  2. import org.apache.spark.rdd.RDD
  3. import org.apache.spark.{SparkConf, SparkContext}
  4.  
  5. /**
  6. * @Description spark 协同过滤推荐算法示例
  7. * @Author lay
  8. * @Date 2018/12/10 22:29
  9. */
  10. object SparkALSDemo {
  11. var conf: SparkConf = _
  12. var sc: SparkContext = _
  13. 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")
  14. var dataRDD: RDD[(Int, Int, Float)] = _
  15. var ratings: RDD[Rating] = _
  16. var model: MatrixFactorizationModel = _
  17.  
  18. def init: Unit = {
  19. conf = new SparkConf().setAppName("spark als demo").setMaster("local")
  20. sc = new SparkContext(conf)
  21. }
  22.  
  23. def makeRdd: Unit = {
  24. dataRDD = sc.parallelize(data).map{x => val lines = x.split(","); (lines(0).toInt, lines(1).toInt, lines(2).toFloat)}
  25. ratings = dataRDD.map(x => Rating(x._1, x._2, x._3))
  26. }
  27.  
  28. def trainModel: Unit = {
  29. val rank = 10 // 向量大小,默认10
  30. val iterations = 10 // 迭代次数,默认10
  31. model = ALS.train(ratings, rank, iterations)
  32. }
  33.  
  34. def main(args: Array[String]): Unit = {
  35. // 初始化
  36. init
  37. // 生成RDD
  38. makeRdd
  39. // 训练模型
  40. trainModel
  41. // 预测结果
  42. val result = model.predict(1, 2)
  43. println("预测评分:" + result)
  44. }
  45. }

输出结果为:

  1. 预测评分:1.9874704066075966

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

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

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

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

十二、spark MLlib的scala示例的更多相关文章

  1. 十、spark graphx的scala示例

    简介 spark graphx官网:http://spark.apache.org/docs/latest/graphx-programming-guide.html#overview spark g ...

  2. spark mllib lda 简单示例

    舆情系统每日热词用到了lda主题聚类 原先的版本是python项目,分词应用Jieba,LDA应用Gensim 项目工作良好 有以下几点问题 1 舆情产品基于elasticsearch大数据,es内应 ...

  3. Spark MLlib + maven + scala 试水~

    使用SGD算法逻辑回归的垃圾邮件分类器 package com.oreilly.learningsparkexamples.scala import org.apache.spark.{SparkCo ...

  4. 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  5. 十一、spark SQL的scala示例

    简介 spark SQL官网:http://spark.apache.org/docs/latest/sql-programming-guide.html sparkSQL是构建在sparkCore之 ...

  6. spark 源码分析之十二 -- Spark内置RPC机制剖析之八Spark RPC总结

    在spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv中,剖析了NettyRpcEnv的创建过程. Dispatcher.NettyStreamManager.T ...

  7. spark 源码分析之十八 -- Spark存储体系剖析

    本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...

  8. 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)

    梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...

  9. Spark学习之路 (二十二)SparkStreaming的官方文档

    官网地址:http://spark.apache.org/docs/latest/streaming-programming-guide.html 一.简介 1.1 概述 Spark Streamin ...

随机推荐

  1. Maven 项目中使用mybatis-generator生成代码

    在使用Maven构建SSM项目时,使用mybatis-generator插件自动生成代码 一.目录结构 bean:用来存放生成的实体类 dao:用来存放生成的 *mapper.java文件 mappe ...

  2. kali linux之msf后渗透阶段

    已经获得目标操作系统控制权后扩大战果 提权 信息收集 渗透内网 永久后门 基于已有session扩大战果 绕过UAC限制 use exploit/windows/local/ask set sessi ...

  3. 查域名对应的ip的命令:Nslookup

    使用Nslookup命令可查询域名对应的ip,如下所示

  4. jquery中通过trim() length 判断数据是否有值

    在jquery中可以通过如下方式判断某一个字符串是否有值,结合if else if 语句进行业务逻辑的处理 <!DOCTYPE html> <html lang="en&q ...

  5. 使用git提交代码流程

    一.拉取最新代码 一般在本地进行开发时,都是切换到自己的dev分支进行开发,当开发完成需要进行代码提交,在进行代码提交前需要先进行拉取远程仓库代码,进行更新,但是此时会提示需要将本地代码进行commi ...

  6. 【docker】docker下安装mysql

    1 拉取mysql镜像,采用网易加速地址docker pull hub.c.163.com/library/mysql:5.7 2 重命名镜像名docker tag hub.c.163.com/lib ...

  7. python中的字符串和编码

    了解编码之前首先说下这几个词的概率: 位.字节.字符.字符串 1.位(bit)也称为比特 这个其实很简单,因为计算机都是二进制存储数据,也就是0和1,一个0或者1就表示一位.这是计算机存储的最小单位. ...

  8. (Lua) C++ 寫函式,Lua 呼叫使用

    C++ 裡頭寫一個 Function 但是透過 Lua 提供input參數並且回傳結果給Lua 輸出的辦法. Lua 檔案 , , ) print("ave : ", ave, & ...

  9. [Alpha]Scrum Meeting#10

    github 本次会议项目由PM召开,时间为4月13日晚上10点30分 时长25分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写每日例会报告撰写并整理任务分配博客 撰写每日例会报告配合测试.验收 ...

  10. python学习,day4:装饰器的使用示例2

    这个例子比较复杂 # coding=utf-8 # Author: RyAn Bi user,passwd = ' #输入用户名密码 def auth(auth_type): #装饰器第一层,确定鉴权 ...