MLlib支持二分类,多酚类和回归分析的多种方法,具体如下:

问题类别   支持方法
二分类 线性支持向量机, 逻辑回归,决策树,朴素贝叶斯
多分类 决策树,朴素贝叶斯
回归 线性最小二乘,Lasso,ridge regression, 决策树
  • 线性模型

    • 二分类(支持向量机, 逻辑回归)
    • 线性回归(最小二乘,Lasso, ridge)
  • 决策树
  • 朴素贝叶斯

线性模型

  • 数学公式

    • 损失函数
    • 正则化
    • 最优化
  • 二分类
    • 线性支持向量机
    • 逻辑回归
    • 评价矩阵
    • 例子
  • 线性最小二乘,Lasso,ridgeregression
    • 例子
  • 流式线性回归
    • 例子
  • 执行(开发者)

数学公式

损失函数

正则化

最优化

二分类

二分类问题的目的是将项目分成两个类别:正例和负例。MLlib支持两种二分类方法:线性支持向量机和逻辑回归。这两种方法都支持L1和L2两种正则变量。训练数据表示为MLlib的LabeledPoint格式。注意:在数学公式中,训练标记y表示为+1(正例)或-1(负例),是为了方便公式表示。然而,在MLlib为了兼容多分类情况,负例用0表示,而不是-1.

线性支持向量机(SVMs)

线性支持向量机是一种大规模分类问题的标准方法。线性表示如下

\(L(w;x,y):=\max\{0, 1-yw^{T}x\}\)

默认,使用L2正则化。L1为可选。这样,问题编程了一个线性程序。

线性SVM算法输出一个SVM模型。给定一个新数据点,用\(x\)表示,模型根据\(w^{T}x\)的值做预测。默认,如果\(w^{T}x \geq 0\)输出为正值,否则为负值。

逻辑回归

逻辑回归广泛用于二只问题。线性表示如下,使用logistic损失函数:

\( L(w;x,y) := log(1+ exp(-yw^{T}x)) \)

逻辑回归算法输出一个逻辑回归模型。给定一个新数据点,用\(x\)表示,模型将使用下面的损失函数做出预测

\( f(z)=\frac{1}{1+e^{-z}} \)

这里 \( z=w^{T}x \).默认,如果 \( f(w^{T}x) > 0.5 \),输出为正,反之为负。和线性SVM不不同,逻辑回归模型的原始输出,\( f(z) \),有一种概率解释(例如;\(x\)为正的概率)

评价矩阵

MLlib支持常用的二分类评价矩阵(PySpark不支持)。包括准确率,召回率,F值,receiver operating characteristic(ROC),准确率召回率曲线,和area under the curvers(AUC)。AUC是一种常用的模型性能比较方法,用于帮助用户通过准确率/召回率/F值来选择预测阈值(http://www.douban.com/note/284051363/?type=like)。

例子

下面的代码展示了如果如何加载一个简单的数据集,使用算法对象object上的静态方法训练数据,并且使用结果模型做出预测并计算训练错误率。

import org.apache.spark._
import org.apache.spark.mllib.classification.SVMWithSGD
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics
import org.apache.spark.mllib.util.MLUtils /**
* Created by ******qin on 2015-1-13.
*/
object ClassifySVM {
def main (args: Array[String]) {
val conf = new SparkConf().setAppName("classifySVM")
val sc = new SparkContext(conf)
//load training data in LibSVM format
val data = MLUtils.loadLibSVMFile(sc, args(0)) // args(0) println(data.count()) //split data into training and test(6:4)
val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
val training = splits(0).cache()
val test = splits(1) //run training algorithm to build the model
val numIterations = 100
val model = SVMWithSGD.train(training, numIterations) //clean the default threshold
model.clearThreshold() //compute raw scores on the test set
val scoreAndLabels = test.map { point =>
val score = model.predict(point.features)
(score, point.label)
} //get evaluation metrics
val metrics = new BinaryClassificationMetrics(scoreAndLabels)
val auROC = metrics.areaUnderROC() println("Area under ROC = " + auROC)
}
}

SVMWithSGD.train()默认使用L2正则化,参数为1.0. 如果想定制该算法,可以直接创建一个SVMWithSGD对象并调用setter方法即可。MLlib中其他所有算法也支持使用这种方法进行定制。例如,下面的算法SVM算法使用L1正则化参数为1.0,循环次数为200.

    //the SVMWithSGD with L1
val svmAlg = new SVMWithSGD()
svmAlg.optimizer.setNumIterations(200)
.setRegParam(1.0)
.setUpdater(new L1Updater)
val model = svmAlg.run(training)

LogisticRegressionWithSGD和SVMWithSGD使用方法相似。

线性最小二乘,Lasso,ridge regression

线性最小二乘法是回归问题最常用的解法。线性表示如下,使用平方损失函数

\( L(w;x,y):=\frac{1}{2}(w^Tx-y)^2 \)

根据使用的正则化方法的不同,各种回归方法被分为:普通最小二乘或线性最小二乘(不使用正则化);岭回归(使用L2正则化);和Lasso(使用L1正则化)。所有的方法都是用平均错误率或训练错误率,\( \frac{1}{n}\sum_{i=1}^{n}(w^Tx_i-y_i)^2 \),即均方差错误率。

例子

下面的例子描绘了如何加载训练数据,解析数据成为LabeledPoint的RDD格式。之后使用LinearRegressionWithSGD建立简单的线性模型去预测标签值。然后计算均方差错误率评价结果。

流式线性回归

数据以流的方式到达,就需要用到在线的修正回归模型,在新数据到达时更新模型参数。MLlib使用普通最小二乘支持流式数据。修正和离线执行是相似的,对每批数据进行修正,这样模型就可以针对数据流进行连续更新。

例子

下面的例子描述了如何加载数据,测试来自两个不同文本文件流的数据,将流解析为标记点,使用第一个流修正一个在线线性回归模型,用第二个流进行预测

MLlib-分类与回归的更多相关文章

  1. 【Todo】【转载】Spark学习 & 机器学习(实战部分)-监督学习、分类与回归

    理论原理部分可以看这一篇:http://www.cnblogs.com/charlesblc/p/6109551.html 这里是实战部分.参考了 http://www.cnblogs.com/shi ...

  2. SVM分类与回归

    SVM(支撑向量机模型)是二(多)分类问题中经常使用的方法,思想比较简单,但是具体实现与求解细节对工程人员来说比较复杂,如需了解SVM的入门知识和中级进阶可点此下载.本文从应用的角度出发,使用Libs ...

  3. SPSS数据分析—多分类Logistic回归模型

    前面我们说过二分类Logistic回归模型,但分类变量并不只是二分类一种,还有多分类,本次我们介绍当因变量为多分类时的Logistic回归模型. 多分类Logistic回归模型又分为有序多分类Logi ...

  4. CART分类与回归树与GBDT(Gradient Boost Decision Tree)

    一.CART分类与回归树 资料转载: http://dataunion.org/5771.html        Classification And Regression Tree(CART)是决策 ...

  5. CART分类与回归树 学习笔记

    CART:Classification and regression tree,分类与回归树.(是二叉树) CART是决策树的一种,主要由特征选择,树的生成和剪枝三部分组成.它主要用来处理分类和回归问 ...

  6. 【机器学习笔记之三】CART 分类与回归树

    本文结构: CART算法有两步 回归树的生成 分类树的生成 剪枝 CART - Classification and Regression Trees 分类与回归树,是二叉树,可以用于分类,也可以用于 ...

  7. weka实际操作--构建分类、回归模型

    weka提供了几种处理数据的方式,其中分类和回归是平时用到最多的,也是非常容易理解的,分类就是在已有的数据基础上学习出一个分类函数或者构造出一个分类模型.这个函数或模型能够把数据集中地映射到某个给定的 ...

  8. AI - TensorFlow - 分类与回归(Classification vs Regression)

    分类与回归 分类(Classification)与回归(Regression)的区别在于输出变量的类型.通俗理解,定量输出称为回归,或者说是连续变量预测:定性输出称为分类,或者说是离散变量预测. 回归 ...

  9. 【ML入门系列】(二)分类与回归

    前言 在机器学习中,“分类”和“回归”这两个词经常听说,但很多时候我们却混为一谈.本文主要从应用场景.训练算法等几个方面来叙述两者的区别. 本质区别 分类和回归的区别在于输出变量的类型.分类的输出是离 ...

  10. 【Machine Learning】分类与回归 区别

    一.分类与回归的区别 两类监督学习 Classification Regression 分类和回归的区别在于输出变量的类型(而非输入变量). 定性输出称为分类,或者说是离散变量预测(discrete) ...

随机推荐

  1. [Locked] Strobogrammatic Number & Strobogrammatic Number II & Strobogrammatic Number III

    Strobogrammatic Number A strobogrammatic number is a number that looks the same when rotated 180 deg ...

  2. [Locked] Shortest Word Distance I & II & III

    Shortest Word Distance Given a list of words and two words word1 and word2, return the shortest dist ...

  3. 【纯干货】SVN使用时应注意的那些事

    一.SVN使用步骤 检出 checkout 更新 update 冲突 confilicte 添加 Add (没有添加项目可不写) 填写svn日志 提交 commit你以为到这儿就结束了吗?....NO ...

  4. 完美逆向百度手机助手5.0底部菜单栏 - Android Tabhost 点击动画

    先看看百度手机助手5.0的样子: 发现他是用一个CustomTabHost.java来实现底部TabHost点击效果的,很漂亮,点击Tab的时候文字会上跑,图片会从底部跑出来的一个小动画. 下面我用自 ...

  5. halt和shutdown 的区别

    1.halt -h 标准情况下是关机 但是要手动关闭电源 .有些发行版增强了halt脚本 使其可以关闭电源 halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核. 2. ...

  6. cocos2dx内存管理的一些看法

    今年年初进入一家游戏公司,正式开始游戏引擎的学习,之前的ios学习,对现在的游戏引擎学习还是有很大的帮助的,虽然使用c++,但却能时刻感受到ios框架对于cocos2dx的巨大影响. 由于之前一直使用 ...

  7. URL重写:RewriteCond指令与RewriteRule 指令格式(转)

    Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等.本文将针对mod_rewrite和URL匹配的技术细 ...

  8. 如何写好一个UITableView

    本文是直播分享的简单文字整理,直播共分为上.下两部分. 第一部分: 优酷 :http://v.youku.com/v_show/id_XMTUzNzQzMDU0NA%3Cmark%3E.html Or ...

  9. UI实时预览最佳实践(转)

    UI实时预览最佳实践 概要:Android中实时预览UI和编写UI的各种技巧.本文的例子都可以在结尾处的示例代码中看到并下载.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以 ...

  10. Android 发送验证码 简易代码

    效果 Activity ;//倒计时 private Timer timer; private Handler handler = new Handler() { public void handle ...