• MLlib-分类与回归


    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使用普通最小二乘支持流式数据。修正和离线执行是相似的,对每批数据进行修正,这样模型就可以针对数据流进行连续更新。

    例子

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

  • 相关阅读:
    thinkphp6事件监听eventlistene
    学习笔记(四)2022
    学习笔记(二)元数据(metadata)和代码(code)
    学习笔记(三)2022
    读书笔记
    20192415 202120222 《网络与系统攻防技术》实验四实验报告
    Nacos下Seata的配置
    SqlServer查询整个数据库的所有表所有数据行数及占空间大小
    blupf90 如何在windows下安装使用
    appium+python自动化代码
  • 原文地址:https://www.cnblogs.com/lemonqin/p/4218689.html
Copyright © 2020-2023  润新知