Spark高级数据分析
2021-04-20 18:26:00 0 举报
AI智能生成
spark高级数据分析,机器学习
作者其他创作
大纲/内容
PART1 大数据分析
应用举例
构建信用卡欺诈模型
产品推荐
评估金融风险
发现致病基因
数据科学的挑战
数据预处理
迭代的读取瓶颈
模型的完善与探索
ApacheSpark
线性拓展
容错性
DAG有向无环图
内存能力
支持Hadoop生态
数据格式
Avro
Parquet
NoSQL数据库
HBase
Cassandra
流式组件
Flume
Kafka
SQL库
Hive
Metastore
资源调度
YARN
其他引擎
MapReduce
Impala
PART2 用Scala和Spark进行数据分析
第一步:数据清洗
很重要的一步
科学家的scala
scala兼容java
spark使用scala写的
Spark编程模型
transformation
调用action
本地运行模式
本章案例
记录关联问题
同一个地点的不同表示形式
不同地点的相近表示形式
加州大学欧文分校机器学习资料库
数百万病人记录
数据结构
"id_1","id_2","cmp_fname_c1","cmp_fname_c2","cmp_lname_c1","cmp_lname_c2","cmp_sex","cmp_bd","cmp_bm","cmp_by","cmp_plz","is_match"
37291,53113, // 0.833333333333333,?,1,?,1,1,1,1,0, // TRUE
匹配的病人1,匹配的病人2,…中间的九位代表病人不同字段(姓名,生日,地址等)匹配的分值…,最后一位代表病人记录对是否匹配
SparkShell和SparkContext
hadoop fs
-mkdir
-put
sc
textFile
parallelize
:help
:history
:paste
从集群获得数据
函数式编程
foreach(println)
def 函数名(参数:参数类型):返回类型={ }
first
take
filter
saveAsTextFile
用元组和case calss对数据进行结构化
Array
array(0)
toInt toString toDouble
slice
Double.NaN
元组
(x1,x2)
_1 _2
case class
case class MatchData(id1:Int,id2:Int)
聚合
groupby
mapValues
创建直方图
countByValue
scala集合
list
set
map
toSeq
sortBy
reverse
array
连续变量的概要统计
得到分布的统计信息
stats方法
spark提供的一种简单的统计工具,结果是(总数,均值,标准差,最大值,最小值)
isNaN
创建可重用的代码
NAStatCounter
stats
new StatCounter() 数据分析类
missing
统计NaN的个数
def add(Double)
添加元素
def merge(NAStatCounter)
合并两个NAStatsCounter
map
or mapPartitions
reduce
变量的选择和评分简介
选取差异化较大的特征,根据这几个特征的评分的总和,设定阈值,根据阈值筛选
使用不同阈值,检测过滤效果
PART3 音乐推荐和Audioscrobbler数据集
音乐推荐
音乐推荐引擎
spark机器学习算法 MLlib
机器学习基本思想
3.1 数据集
播放次数比评分更能准确反映一个人的听歌习惯
user_artist_data_txt
记录了用户、艺术家、用户播放艺术家歌曲的信息(包括次数)
userid artistid playcount
artist_data.txt
记录了每个艺术家的ID和对应的名字
artistid artist_name
artist_alias.txt
记录拼写错误的艺术家的名字和正确的ID
badid, goodid
3.2 交替最小二乘法推荐算法
问题
稀疏数据集的推荐算法
概念
协同过滤算法
潜在因素模型
矩阵分解模型(矩阵补全算法)
原理
行:用户,列:艺术家,形成的大矩阵A,数据稀疏
转换为两个数据密集的小矩阵的乘积 A≈XYᵀ
将问题转换为 用户-特征矩阵 和 特征-艺术家矩阵 的乘积
因为数据的稀疏,通常XY是没有解的
想直接求X和Y的最优解也很难
算法
交替最小二乘算法
将Y初始化为随机行向量矩阵
由A和Y求出X的最优解
数据可并行化
目标是A和Y组成的方程和X 最小化平方误差
借助QR分解方法,由前一步的X计算出Y
重复前两步,反复交替,最终X和Y收敛到一个合适的结果
实现
SparkMLlib的ALS算法
优化,分解A为1和0组成的矩阵P
元素为正对应1,否则0
A的具体值在后面以权重形式体现
也可以利用数据稀疏的特点,用简单的线性代数运算求解
数据本身可以并行化
3.3 准备数据
3.4 准备第一个模型
3.5 逐个检查推荐结果
3.6 评价推荐质量
3.7 计算AUC
3.8 选择超参数
3.9 产生推荐
3.10 小结
PART4 用决策树算法预测森林植被
4.1 回归简介
趋均数回归现象
分类与回归
举例
分类:预测类别,例如是否为垃圾邮件
回归:预测数值型数量,例如大小、收入、温度
共同点
特征值 => 目标值
都通过一个或多个值预测另一个或多个值
区别
分类预测类别型目标
回归预测数值型目标
监督学习:需要告诉它们问题以及问题答案的学习方法
分类和回归的算法
支持向量机
logistics回归
朴素贝叶斯算法
神经网络
深度学习
决策树算法
随机决策森林算法
决策树应用
根据线上行为预测购买汽车的概率
根据用词预测是否是垃圾邮件
根据地理位置和土壤的化学成分预测哪块耕地产量更高
4.2 向量和特征
特征(维度、预测指标、变量)
数值型特征
可以用数值进行量化的特征,并且排序是有意义的
类别型特征
不是数字,没有顺序可言,只能在几个离散值中取一个
特征向量
五个特征值按顺序排列,用于描述每天的天气
格式化向量
稀疏向量
密集向量
4.3 样本训练
目标作为特征向量的一个附加特征
训练集
所有样本的集合
目标
回归:数值型
有的回归分类算法只能处理数值型特征
分类:类别型
4.4 决策树和决策森林
决策树算法
能自然地处理类别型和数值型特征
过度拟合现象
过于拟合训练样本,导致噪声过大,预测准确率降低
决策森林算法
4.5 Covtype数据集
科罗拉多州不同地块的植被类型
描述了土地的海拔、坡度、到水源的距离、遮阳情况、土壤类型等
总共54个特征,包含数值型特征和类别型特征
4.6 准备数据
读取数据
spark读取CSV文件
类别型特征的编码
one-hot(1-of-n)编码
一个有N个不同取值的类别特征,可以变成N个数值型的特征
每个特征取值0或1,有且只有一个特征取1,其余为0
另一种编码
为类别型特征的每个可能取值分配一个不同数值
例如:多云 1.0,有雨 2.0,晴朗 3.0
要小心类别特征被当做数值特征,1.0,2.0,3.0会被理解为权重
添加列名
读取为DataFrame数据,且加入列名
目标列一般为Double类型
4.7 第一课决策树
格式化训练集
输入必须是LabeledPoint对象格式
样本集
训练集 90%
训练集的10%为交叉检验集
测试集 10%
格式化为向量
所有输入合并成一列,该列的值为一个向量
构建模型
构建分类器
配置输入列列名和预测列列名
代码管道化
分类器类型
trainRegressor
trainClassifier
目标值为类别标号
BinaryClassificationMetrics
仅用于类别目标只有两种取值
生成模型
评估模型
目的
超参数
训练集和CV集用于选择合适值
测试集用于对模型期望准确度进行无偏估计
方法
评估输入特征的比重
数据评估
AUC指标
准确率
召回率
F1值
准确率*召回率*2/(准确率+召回率)
混淆矩阵
随机猜测的准确率
4.8 决策树的超参数
最大深度
限制决策树层数,防止过度拟合
最大桶数
决策规则的集合,桶越多,计算时间越多,决策可能更优
不纯性度量
Gini不纯度
全都一样,最纯的 0 -> 1 不同类别均相等,最不纯的
熵
不确定性小,混乱度小 熵小 -> 熵大 不确定性大,混乱大
最小信息增益
指一种超参数,会使最小信息增益,或最小不纯度降低
4.9 决策树调优
构建多种不同的参数组合,比较起准确率
构建管道
构建超参数的组合
构建管道
生成模型
评估模型
获得最佳模型的参数
获得每一种组合的参数和准确率
过度拟合问题:减小最大深度可改善
4.10 重谈类别性特征
用一个字段表示多个特征,优于one-hot方式
对类别型特征重新编码,更换one-hot方式
准确率提升了2%
4.11 随机决策森林
决策树是启发式策略,随即使用一部分数据集,以大幅提升计算速度
决策森林又许多决策树组成,具有随机性,有利于降噪
准确率又提升了2%
API几乎不变
并行化
4.12 进行预测
最优模型是包含了所有操作的整个管道
4.13 小结
如上
PART8 纽约出租车轨迹的空间和时间数据分析
8.1 数据的获取
数据结构:车牌号hash,司机驾驶好hash,开始时间,结束时间,上车经纬度,下车经纬度
8.2 框架选择:Spark
8.3 时间数据处理:JodaTime和NScalaTime
过程:从数据中格式化出时间-解析时间-计算时间段
java的SimpleDateFormat类 格式化时间
DateTime类 解析时间
import com.github.nscala.time.time.Imports._
Duration类 计算时间段
8.4 地理空间数据处理
EsriGeometryAPI和Spray
地理数据分类
矢量
本章数据格式:GeoJSON
光栅
过程:解析GeoJSON数据-处理其空间关系
EsriGeometryAPI
Geometry核心数据类型
代表一个形状和它所在的地理位置
GeometryEngine助手类
它提供了执行所有空间关系操作的静态方法
contains方法
WKID 4326坐标系统(GPS采用的)
定义包装类RichGeometry
拓展EsriGeometry对象,并提供一些有用的辅助方法
定义伴生对象,将Geometry实例隐式转换为RichGeometry
import RichGeometry._
GeoJSON
表示纽约行政区域范围的数据格式
数据格式
FeatureCollection
Feature
id
properties
geometry
处理JSON对象的类Spray
toJson
将scala对象转换为JsValue
parseJson
将JSON格式转换为中间类型
converTo[T]
中间类型转换为Scala类型T
case class
case class FeatureCollection
extends IndexedSeq[Feature]
可使用map filter sortBy
case class Feature
id
properties
geometry
RichGeometry
定义RichGeometry Feature FeatureCollection与相应的JsValue实例相互转化的格式
RootJsonFormat[T]
8.5 出租车客运数据预处理
case calss Trip
SimpleDateFormat格式化时间数据
Point存放上下车的经纬度
parse方法将文本解析成Trip
非法记录的处理
safeParse函数
safe函数
Either类型
Left
Righe
filter
乘车时间为正
乘车时间小于三小时
地理空间分析
加载纽约行政区域文件
scala.io.Source.fromFile()
解析
geojson.parseJson.convertTo[FeatureCollection]
排序
对特征排序,区域大的排在前面
广播
广播字典文件 sc.broadcast(areaSortedFeatures)
函数
判断trip的点落在哪行政区域的函数
得到数据
从结果中过滤掉终点为null的数据
会话分析
构建会话:二级排序
repartitionAndSortWithinPartitions
0 条评论
下一页