Spark mllib API- classification

本贴最后更新于 2938 天前,其中的信息可能已经渤澥桑田

Apark mllib API 的翻译 - 分类篇。 对官方文档进行翻译的同时加入了一些常识性知识。

更多分类的相关知识可以查看我的另外一篇博客数据挖掘算法初窥门庭--分类回归

Spark 当前提供 LogisticRegression、SVM、NaiveBayes。


##LogisticRegression 逻辑回归

###背景知识

LinerRegression 是使用线性方程对数据进行两分类(在线的一侧属于同一类)。而 LogisticRegression 就是一个被 logistic 方程归一化后的 LinerRegression(归一化后值域为 0-1)。LogisticRegression 一般也用于两分类,预测样本属于某个类别的概率。

LogisticRegression 的过程是典型的监督机器学习,也就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。
大致步骤如下:

  • 目标函数为 f(f 为未知的),我们假定目标函数为 h。(假设)
  • 构造损失函数 cost(基于最大似然估计),表示 h 的预测结果与实际结果 f 之间的偏差。(预测并评估)
  • 通过迭代,调整 h,使 h 与 f 尽可能接近。(求最优解)

LogisticRegression 有很多不同的算法版本,大多数的主要不同在于求最优解。目前,spark 提供两种 LogisticRegression 方法:SGD(随机梯度下降)和 LBFGS(改进的拟牛顿法)。

特征选择:

  • LogisticRegression 假设向量的各个维度是独立不相互影响的。
  • 由于 LogisticRegression 的终止条件是收敛或达到最大迭代次数,因此在数据预处理时进行归一化,加快收敛速度。
  • 更多具体的变量选择方法,参考华山大师兄的 Logistic Regression--逻辑回归算法汇总

###Spark API

  • 类:pyspark.mllib.classification.LogisticRegressionWithSGD
    • 方法:
      train(data, iterations=100, step=1.0, miniBatchFraction=1.0, initialWeights=None, regParam=0.01, regType='l2', intercept=False, validateData=True, convergenceTol=0.001)
      通过给定数据训练逻辑回归模型。
      • data:训练数据,LabeledPoint 格式的 RDD 数据集。
      • iterations:迭代次数,默认为 100。
      • step:SGD 的步长,默认为 1.0。(太大容易错过最优解,太小导致迭代次数过多)。
      • miniBatchFraction:用于每次 SGD 迭代的数据,默认 1.0。(SGD 每次迭代选用随机数据)。
      • initialWeights:初始权值,默认 None。
      • regParam:规则化参数,默认 0.01。
      • regType:用于训练模型的规则化类型,可选为 l1 或 l2(默认)。
      • intercept:布尔值,表示是否使用增强表现来训练数据,默认 False。
      • validateData:布尔值,表示算法是否在训练前检验数据,默认 True。
      • convergenceTol:终止迭代的收敛值,默认 0.001。

  • 类: pyspark.mllib.classification.LogisticRegressionWithLBFGS
    • 方法:
      train(data, iterations=100, initialWeights=None, regParam=0.01, regType='l2', intercept=False, corrections=10, tolerance=0.0001, validateData=True, numClasses=2)
      通过给定数据训练逻辑回归模型。
      • data:训练数据,LabeledPoint 格式的 RDD 数据集。
      • iterations:迭代次数,默认为 100。
      • initialWeights:初始权值,默认 None。
      • regParam:规则化参数,默认 0.01。
      • regType:用于训练模型的规则化类型,可选为 l1 或 l2(默认)。
      • intercept:布尔值,表示是否使用增强表现来训练数据,默认 False。
      • corrections:用于 LBFGS 更新的修正值,默认 10。
      • tolerance:LBFGS 迭代的收敛容忍系数,默认 1e-4。
      • validateData:布尔值,表示算法是否在训练前检验数据,默认 True。
      • numClasses:多分类逻辑回归中类别的个数,默认 2。

  • 类:pyspark.mllib.classification.LogisticRegressionModel
    使用多/两逻辑分类方法训练得到的模型。
    • 属性:
      • weights:每个向量计算的权值。
      • intercept:该模型的计算截距(只用于两逻辑回归)。
      • numFeatures:向量的维度。
      • numClasses:输出类别的个数。
      • threshold:用于区分正负样本的阈值。
    • 方法: clearThreshold()
      去除阈值,直接输出预测值,只用于两分类
    • 方法: load(sc, path)
      从指定路径加载模型
    • 方法: save(sc, path)
      将模型保存到指定路径
    • 方法: predict(x)
      预测,输入可以为单个向量或整个 RDD
    • 方法: setThreshold(value)
      设置用于区分正负样本的阈值。当预测值大于该预置时,判定为正样本。

SVM 支持向量机

###背景知识

SVM 是二分类的分类模型。给定包含正负样本的数据集,SVM 的目的是寻找一个超平面(WX+b=0)对样本进行分割,且使得离超平面比较近的点能有更大的间距。

(待补充)


###Spark API

  • 类:class pyspark.mllib.classification.SVMWithSGD
    • 方法:
      train(data, iterations=100, step=1.0, regParam=0.01, miniBatchFraction=1.0, initialWeights=None, regType='l2', intercept=False, validateData=True, convergenceTol=0.001)
      通过给定的数据训练 SVM 模型。
      • data:训练数据,LabeledPoint 格式的 RDD 数据集。
      • iterations:迭代次数,默认为 100。
      • step:SGD 的步长,默认为 1.0。
      • regParam:规则化参数,默认 0.01。
      • miniBatchFraction:用于每次 SGD 迭代的数据,默认 1.0。
      • initialWeights:初始权值,默认 None。
      • regType:用于训练模型的规则化类型,可选为 l1 或 l2(默认)。
      • intercept:布尔值,表示是否使用增强表现来训练数据,默认 False。
      • validateData:布尔值,表示算法是否在训练前检验数据,默认 True。
      • convergenceTol:终止迭代的收敛值,默认 0.001。

  • 类: pyspark.mllib.classification.SVMModel
    支持向量机模型
    • 属性:
      • weights:每个向量计算的权值。
      • intercept:该模型的计算截距。
    • 方法: clearThreshold()
      去除阈值,直接输出预测值
    • 方法: load(sc, path)
      从指定路径加载模型
    • 方法: save(sc, path)
      将模型保存到指定路径
    • 方法: predict(x)
      预测,输入可以为单个向量或整个 RDD
    • 方法: setThreshold(value)
      设置用于区分正负样本的阈值。当预测值大于该预置时,判定为正样本。

##NaiveBayes 朴素贝叶斯
###背景知识
贝叶斯概率公式:
P(B[j]|A[i])=P(A[i]|B[j])P(B[j]) / P(A[i])
朴素贝叶斯分类器是使用贝叶斯概率公式为核心的分类算法,其基本思想为:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
朴素贝叶斯假定样本的不同特征属性对样本的归类影响时相互独立的。

(待补充)


###Spark API

  • 类:pyspark.mllib.classification.NaiveBayes
    • 方法:
      train(data, lambda_=1.0)
      通过给定数据集训练贝叶斯模型
      • data:训练数据,LabeledPoint 格式的 RDD 数据集。
      • lambda:平滑参数,默认 1.0

  • 类: pyspark.mllib.classification.NaiveBayesModel
    朴素贝叶斯分类器模型
    • 属性:
      • labels:label 列表
      • pi:每个类别的 priors
      • theta:使用矩阵存储每个向量划分到每个类的条件概率
    • 方法: load(sc, path)
      从指定路径加载模型
    • 方法: save(sc, path)
      将模型保存到指定路径
    • 方法: predict(x)
      预测,输入可以为单个向量或整个 RDD
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 548 关注
  • 数据挖掘
    17 引用 • 32 回帖 • 2 关注
  • 默认
    5 引用 • 22 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 685 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 6 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6551 引用 • 29424 回帖 • 246 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 2 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 443 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    205 引用 • 357 回帖 • 1 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 8 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    82 引用 • 122 回帖 • 621 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 42 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 71 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    40 引用 • 24 回帖
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 399 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 636 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 174 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    180 引用 • 447 回帖 • 1 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 247 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 2 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 513 关注