十二、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的其它算法也是类似的使用,你只需要给它数据,然后训练模型,便可以利用模型来预测分析分类等
十二、spark MLlib的scala示例的更多相关文章
- 十、spark graphx的scala示例
简介 spark graphx官网:http://spark.apache.org/docs/latest/graphx-programming-guide.html#overview spark g ...
- spark mllib lda 简单示例
舆情系统每日热词用到了lda主题聚类 原先的版本是python项目,分词应用Jieba,LDA应用Gensim 项目工作良好 有以下几点问题 1 舆情产品基于elasticsearch大数据,es内应 ...
- Spark MLlib + maven + scala 试水~
使用SGD算法逻辑回归的垃圾邮件分类器 package com.oreilly.learningsparkexamples.scala import org.apache.spark.{SparkCo ...
- 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)
朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...
- 十一、spark SQL的scala示例
简介 spark SQL官网:http://spark.apache.org/docs/latest/sql-programming-guide.html sparkSQL是构建在sparkCore之 ...
- spark 源码分析之十二 -- Spark内置RPC机制剖析之八Spark RPC总结
在spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv中,剖析了NettyRpcEnv的创建过程. Dispatcher.NettyStreamManager.T ...
- spark 源码分析之十八 -- Spark存储体系剖析
本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...
- 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...
- Spark学习之路 (二十二)SparkStreaming的官方文档
官网地址:http://spark.apache.org/docs/latest/streaming-programming-guide.html 一.简介 1.1 概述 Spark Streamin ...
随机推荐
- Vue 框架 笔记
1.兼容 2.性能优化 vuejs ******作者:尤雨溪 *** *******MVVM框架: M:model层 数据层 数据的增删改查 V:view视图层 类似于html的模板 vm:vie ...
- BZOJ 1150--数据备份(链表&堆&贪心)
1150: [CTSC2007]数据备份Backup Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2572 Solved: 1038[Submit ...
- 蹭你wifi后 我竟然干了这样的事
前言:故事发生在前两天,我们去参观工业园区内一家电商公司. 去参观他们公司的时候,我说要用下无线网,他们技术说密码就是他们的网站域名,我一脸懵逼表示我不知道域名,然后对方接过我手机给我连上了他们wif ...
- Linux 下的 netfilter 认识与常规操作
Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...
- iOS 计算文字宽度的一个细节
设计师给到的图,经常是 "按钮的左边距离文字右边5px" 这样子的标注.于是我们需要计算文字的宽度. 有两种方法: 用 label 或 button 的 sizetofit 方法 ...
- Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.******.seashell.bpc.query.query.service.FscBankPayCodeQueryService
2019-03-19 16:22:14,945 WARN [main] (org.springframework.context.support.AbstractApplicationContext. ...
- 【Quartz】解密properties配置文件中的账号密码
在配置quartz时,为了保密某些信息(特别是账号密码),通常会使用密文.那么在实际使用这些配置信息时,需要进行解密.本文提供一种解密方法如下: (1)假设在properties文件中加密了账号密码 ...
- 题目1003:A+B(字符串转数字)
问题来源 http://ac.jobdu.com/problem.php?pid=1003 问题描述 每次给你两个数,数的形式是每三位有一个间隔符',',计算两数之和. 问题分析 两个问题,一.如何读 ...
- IDEA + SpringBoot + Java搭建Web项目
打开IDEA,选择Spring Initializr,默认配置,点击Next  添写GAV.(group.Artifact.Version)  选择Spring Boot版本,这里选2.1.4稳定 ...
- [温故]图解java多线程设计模式(二)
join & interrupt 这俩方法属于线程对象里的方法,属于线程本身的操作. join方法 用于等待一个线程的终止,等待期间将会阻塞,直到被等待的线程终止结束. 所以join可以用来做 ...