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. 服务器之间免密码ssh登陆

    配置服务器f1(192.168.1.1)与服务器f2(192.168.1.2)之间免密码ssh登陆 一.首先,配置服务器主机名为f1.f2 1.更改/etc/sysconfig下的network文件, ...

  2. cf703A Mishka and Game

    A. Mishka and Game time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  3. Android通过类对象的方式实现JSON数据的解析

    1.通过主Activity的Button按钮实现数据的解析 public class MainActivity extends Activity { //定义一个包含Json格式的字符对象 priva ...

  4. UVa11613 Acme Corporation(最小费用流)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33452 [思路] 最小费用流. 构图: 1 每个月建立2个点,建立 ...

  5. B - Frogger

    题目大意: 一个叫做弗雷迪的青蛙坐在湖中间的一块石头上.突然他注意到他的青蛙女神菲奥娜坐在另一块石头上面,于是他计划去看她,但是呢湖里面的水很脏并且充满了游客的防晒霜,所以他想避免游泳而采用跳跃的方式 ...

  6. ActionScript 3.0数组操作

    var arr:Array=new Array();arr=["a","b","c"];  //赋初值,注意这里的即使单个字符赋值使用的是& ...

  7. Python开发—Ajax系列

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  8. 【转载】运维小技巧:使用ss命令代替 netstat

    转自:https://www.91ri.org/12470.html ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类 ...

  9. jni java和C之间的值传递(int String int[])

    我们通过jni调用C代码不可能每次只是去调一个方法,通常,我们需要传递一些值过去. 例如,播放电影,那就肯定需要你把电影的 url给 C的播放器吧,等等. 接下来就看一看怎么去传递这些值: 首先是最简 ...

  10. 再回首,Java温故知新(二):Java基本数据类型

    Java作为一种强类型语言,意味着每一个变量都会有特定的类型,Java共有8种基本类型,其中有4种整型(byte.short.int.long).两种浮点型(float.double).1种字符型(c ...