大数据编程技术——Spark MLlib

高级数据分析

监督学习:分类和回归
推荐系统
无监督学习:聚类、异常检测、主题建模
图分析任务:对图数据进行分析。

1.3 数据采集

  • Spark支持多种数据源
    与hdfs无缝连接使用,支持海量的数据读入
    Spark Streaming支持高通量的实时流数据读入
  • 使用适当的技术提取所需要的数据
    使用规则模板(如:正则表达式)
    OCR技术:一般指光学字符识别。电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。
    语音识别技术

1.4数据清理

收集到数据之后需要清理和检查,也是探索性数据分析(EDA,Exploration Data Analysis)的必要步骤

  • 在此过程中,需要:
  • 提取和整合来自各个数据源的数据
  • 删除空数据
  • 数据类型转换
  • 清理或转换非标数据
  • 删除一些未标注数据或可能的错误标注数据

1.5 特征工程

  • 收集和清理数据后,需要将它转换成为适合算法计算的数据格式,通常是特征空间。
  • 在MLlib中,所有变量通常需要作为浮点型向量输入。

2 MLLIB

  • MLLIB是Spark高级数据分析包
  • MLLIB基于Spark,且是Spark项目的一个软件包,它提供各种API接口用于收集和清理数据、特征工程和特征选择、训练和微调大型机器学习模型。

2.1 MLLIB中的数据结构

  • 转换器(transformer):用于预处理和特征工程
  • 估计器(estimater):用于模型训练
  • 评估器(evaluator):用于评估模型
  • 流水线(pipeline)

2.2 基本数据类型——本地向量

  • 本地向量类型(Vector)
    特征向量空间中的一个坐标,由一组特征值构成
  • 创建本地向量
    稠密向量
//创建稠密向量(1.0,0.0,3.0)
val dv = Vectors.dense(1.0,0.0,3.0)

稀疏向量

// 创建1000维稀疏矩阵向量(1.0,0.0,3.0,0.0,0.0,...)
val sv = Vector.sparse(1000,Array(0,2),Array(1.0,3.0))

2.3 标注点

是一种带有标签的本地向量,通常用在需要标签的有监督学习中。
创建标注点语法

LabeledPoint(label:Double, features:Vector)
label:标签值,features:本地向量值。
稠密向量标注点

LabeledPoint(1.0,Vectors.dense(1.0,0.0,3.0))

稀疏向量标注点

LabeledPoint(1.0,Vectors.saprse(1000,Array(0,2),Array(1.0,3.0)))

2.4 评分

Rating:记录用户评分的一种数据类型,通常用于MLLIB中的推荐算法

  • 推荐算法:根据用户的行为和特征推荐其可能偏好的项目
  • 将用户行为和特征转换为标准的评分模型。

2.5 本地矩阵

本地矩阵类型(Matrix)
表示一个矩阵,其中所有元素均为Double,用以存储一个向量空间
支持稠密矩阵和稀疏矩阵。

  • 本地稠密矩阵创建

Matrices.dense(numRows:Int, numCols:Int, values:Array[Double])
numberRows:矩阵行数,numberCols:矩阵列数,values:矩阵数据,装在Double数组中。

创建一个3行2列的矩阵

Matrices.dense(3,2,Array(2,5,3,4,1,6))
24
51
36

本地系数矩阵创建

Matrices.sparse(numRows:Int, numCols:Int, colPtrs:Array[Int],rowIndices:Array[Int], values:Array[Double])
numberRows:矩阵行数,numberCols:矩阵列数,colPtrs:各列开始索引和所有元素总数。rowIndices:非0元素所在行索引
values:矩阵数据,装在Double数组中。:
创建一个3行2列的本地稀疏矩阵

Matrices.sparse(3,2,Array(0,1,4),Array(0,0,2,1),Array(9,1,6,8))

难点

2.6 分布式矩阵

  • 由本地向量RDD构造,每个本地向量代表矩阵的一行,该矩阵属于行矩阵;支持一切RDD的分布式存储和计算的特性。
    创建分布式矩阵语法
//创建RDD[Int]
val rdd = sc.makeRDD(List((1,2),(2,3),(5,3)))
// 将RDD[(Int,Int)]转为本地稠密向量RDD[DenseVector]
val vd = rdd.map(x => Vectors.dense(x._1,x._2))
val rm1 = RowMatrix(vd)
//将RDD[(Int,Int)]转为本地稀疏矩阵向量RDD[SparseVector]
val vs = rdd.map(x => Vectors.sparse(2,Array(0,1),Array(x._1,x._2)))
val rm2 = RowMatrix(vs)

3 流水线

  • Pipeline
    可将高级数据分析从数据提取、特征转换到分析算法按顺序插入流水线,定义成一个流水线任务可执行或保存以供以后加载执行。
//将步骤以数组的方式插入流水线
//插入了三个步骤tokenizer, hashingTF, lr
val pipeline = new Pipeline().setStages(Array(tokenizer, hashingTF, lr))
//通过流水线执行训练,并返回模型
//流水线会自动按步骤从前往后执行,直到模型训练完毕
val model = pipeline.fit(training)
//执行模型测试
model.transform("测试数据集")

4 MLLIB支持算法

  • 特征工程
  • 分类和回归
  • 决策树和随机森林
  • 聚类
  • 推荐算法
  • 其他

特征工程算法——特征转换

  • Tokenizer
    将字符串划分(如句子)为更小

  • n-gram

  • 又称n元模型,是一种基于统计语言模型的算法,对文档中的文本按固定字节长度(字数)为窗口(window/mask)进行频度统计,形成一个描述文档的特征向量空间;广泛应用在NLP领域,用于文档评估

  • DCT
    离散余弦变换(Discrete Cosine Transform),主要用于离散信号处理(一维信号如音频信号、压力变换和温度变换等,二维信号如图像信号和视频信号灯);将信号的空间域表达转换到频率域上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值