SparkMLlib 逻辑回归
逻辑回归是预测分类响应的常用方法。这是广义线性模型的一个特例,可以预测结果的概率。
在spark.ml逻辑回归中,可以使用二项逻辑回归来预测二元结果,或者可以使用多项逻辑回归来预测多类结果。使用该family 参数在这两种算法之间进行选择,或者保持不设置,Spark将推断出正确的变量。
逻辑回归的基本概念
逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型。logistic回归的因变量可以是二分类的,也可以是多分类的。
逻辑回归与线性回归的区别:
线性回归中 y 的值域在[-∞,+∞],不能很好的表示;
逻辑回归通过 sigmod 函数将线性回归作为一个系数传进来,值域被映射为[0,1],然后比如大于0.5为一类,小于0.5为一类
补充:
1、逻辑回归本质是求解二分类问题,一般所谓的预测就是分类;
2、所有的多分类的问题都可以转化为多个二分类的问题;
3、在Spark MLlib中二分类的话,1为正例,0为负例。
归结一句话就是:逻辑回归是一种线性有监督分类模型。
逻辑回归的公式:
f(z)=11+e−zf(z)=\frac{1}{1+ ...
SparkMLlib线性回归
关于机器学习,Spark MLlib中也对相关算法有API的讲解,本章介绍线性回归算法。
线性回归简介
什么是回归
回归问题主要关注确定一个唯一的因变量(dependent variable)(需要预测的值)和一个或多个数值型的自变量(independent variables)(预测变量)之间的关系。
广义线性回归,GLM。比如,逻辑回归,泊松回归。
对于简单线性回归问题,也就是小学大家就都会了的解应用题y=a+bx。
线性回归用来做预测,是一种线型有监督的预测模型。
线性回归模型保存的是权重系数 w,它是用历史数据找出规律用于预测未来。
**模型:**模型就是 y=ax1+bx2+…+d 这个公式
**建模/训练模型:**求出这个 y=ax+d
公式的过程,即用训练集数据求出 a、b 的过程。
**训练集:**参与求出 y=ax+b 公式过程的数据就是训练集,即历史数据(100万个点)
**测试集:**用于检测模型准确度的数据,应当额外寻找一些数据来测试,将训练集的数据排除在外。
损失函数(误差函数):
J(θ0,θ1)=12m∑i=1m(hθ(xi)−yi)2J(\the ...
SparkMLlib Kmeans聚类
Kmeans聚类算法又叫K均值聚类。
聚类:给事物打标签,寻找同一组内的个体之间的一些潜在的相似模式。力图找到数据的自然分组 kmeans。
理解Kmeans聚类算法
聚类是一种无监督的机器学习任务,它可以自动将数据划分成类 cluster。因此聚类分组不需要提前被告知所划分的组应该是什么样的。因为我们甚至可能都不知道我们再寻找什么,所以聚类是用于知识发现而不是预测。
聚类原则是一个组内的记录彼此必须非常相似,而与该组之外的记录截然不同。所有聚类做的就是遍历所有数据然后找到这些相似性。
使用距离来分配和更新类
探究距离测度
欧氏距离测度(EuclideanDistanceMeasure)
平方欧氏距离测度(SquaredEuclideanDistanceMeasure)
曼哈顿距离测度(ManhattanDistanceMeasure)
图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。对于一个具有正南正北、 ...
SparkMLlib贝叶斯分类
机器学习算法中,有种依据概率原则进行分类的朴素贝叶斯算法,正如气象学家预测天气一样,朴素贝叶斯算法就是应用先前事件的有关数据来估计未来事件发生的概率。如:70%降水概率。
贝叶斯分类算法是一个非线性有监督的分类算法。
贝叶斯分类用于做概率分类。二分类、正负例。
贝叶斯条件概率
思考:
一所学校里面有 60% 的男生,40% 的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。假设你走在校园中,迎面走来一个穿长裤的学生(很不幸的是你高度近视,你只看得见他(她)穿的是否长裤,而无法确定他(她)的性别),你能够推断出他(她)是男生的概率是多大吗?
基于贝叶斯定理的条件概率
通过此公式可以算出上题:
理解朴素贝叶斯
如果我们知道P(垃圾邮件)和P(Viagra)是相互独立的,则容易计算P(垃圾邮件&Viagra),即这两个事件同时发生的概率。 20% * 5% = 1%
对于我们垃圾邮件来说
计算贝叶斯定理中每一个组成部分的概率,我们必须构造一个频率表
P(垃圾邮件∣Viagra)=P(Viagra∣垃圾邮件)∗P(垃圾邮件)/P(Viagra)P(垃圾邮件|Viag ...
Spark性能优化
关于Spark,在实际工作中有很多需要去优化的地方。本篇文章将给出一些需要手动去调整的配置供大家参考。
资源调优
1、在部署 spark 集群中指定资源分配的默认参数
在 spark 安装包的 conf 下 spark-env.sh
SPARK_WORKER_CORES #每个worker用到的核数SPARK_WORKER_MEMORY #每个worker用到的内存SPARK_WORKER_INSTANCES #每台机器启动worker数
2、在提交 Application 的时候给当前的 Application 分配更多的资源
提交命令选项:(在提交 Application 的时候使用选项)
--executor-cores #每个executor用到的核数--executor-memory #每个executor用到的内存--total-executor-cores #所有的executor需要用到的核数
配置信息:(Application 的代码中设置或在 Spark-default.conf 中设置)
spark.executor.coresspark. ...
Spark计算框架(六)
SparkStreaming 是流式处理框架,是 Spark API 的扩展,支持可扩展、高吞吐、容错的实时数据流处理。
实时数据的来源可以是:Kafka,Flume,Twitter,ZeroMQ 或者 TCP sockets,并且可以使用高级功能的复杂算子来处理流数据。例如:map,reduce,join,window 。最终,处理后的数据可以存放在文件系统,数据库等,方便实时展现。
SparkStreaming 与 Storm 的区别
1、Storm 是纯实时的流式处理框架,SparkStreaming 是准实时的处理框架(微批处理)。因为微批处理,SparkStreaming 的吞吐量比 Storm 要高。
2、Storm 的事务机制比 SparkStreaming 的要完善。
3、Storm 支持动态资源调度。(spark1.2 开始和之后也支持)
4、SparkStreaming 擅长复杂的业务处理,Storm 不擅长复杂的业务处理,擅长简单的汇总型计算。
SparkStreaming 初始
1、SparkStreaming 初始理解
注意:
receiver tas ...
Spark计算框架(五)
Spark SQL 是 Spark 处理数据的一个模块,跟基本的 Spark RDD 的API不同,Spark SQL中提供的接口将会提供给Spark 更多关于结构化数据和计算的信息。其本质是,Spark SQL使用这些额外的信息去执行额外的优化。
Shark
Shark 是基于 Spark 计算框架之上且兼容 Hive 语法的 SQL 执行引擎,由于底层的计算采用了 Spark,性能比 MapReduce 的 Hive 普遍快 2 倍以上,当数据全部 load 在内存的话,将快 10 倍以上,因此 Shark 可以作为交互式查询应用服务来使用。
除了基于 Spark 的特性外,Shark 是完全兼容 Hive 的语法,表结构以及UDF函数等,已有的 HiveSql 可以直接进行迁移至 Shark 上 Shark 底层依赖于 Hive 的解析器,查询优化器,但正是由于 SHark 的整体设计架构对 Hive 的依赖性太强,难以支持其长远发展,比如不能和 Spark 的其他组件进行很好的集成,无法满足 Spark 的一栈式解决大数据处理的需求。
SparkSQL
1、SparkSQL ...
SparkShuffle调优
SparkShuffle在使用时,默认的配置中有些配置可能不适合实际中的业务处理,需要我们手动进行调整优化。这里列举了一些常用的 SparkShuffle 调优策略和建议。
1、spark.shuffle.file.buffer
默认值:32k
参数说明:该参数用于设置shuffle write task的BufferedOutputStream的buffer缓冲大小。将数据写到磁盘文件之前,会先写入buffer缓冲中,待缓冲写满之后,才会溢写到磁盘。
调优建议:如果作业可用的内存资源较为充足的话,可以适当增加这个参数的大小(比如64k),从而减少shuffle write过程中溢写磁盘文件的次数,也就可以减少磁盘IO次数,进而提升性能。在实践中发现,合理调节该参数,性能会有1%~5%的提升。
2、spark.reducer.maxSizeInFlight
默认值:48m
参数说明:该参数用于设置shuffle read task的buffer缓冲大小,而这个buffer缓冲决定了每次能够拉取多少数据。
调优建议:如果作业可用的内存资源较为充足的话,可以适当增加这个参数的大小(比如9 ...