码迷,mamicode.com
首页 > 其他好文 > 详细

MLlib-分类与回归

时间:2015-01-13 15:39:08      阅读:469      评论:0      收藏:0      [点我收藏+]

标签:

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)
  }
}

 

MLlib-分类与回归

标签:

原文地址:http://www.cnblogs.com/lemonqin/p/4218689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!