Spark算法初入门-逻辑回归篇3

本文深入探讨了逻辑回归在分类问题中的应用,包括二项逻辑回归和多项逻辑回归的原理及实践。通过Spark MLlib的示例,展示了如何设置参数进行模型训练,并解释了不同算法之间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

逻辑回归:

二项逻辑回归:

多项逻辑回归:


原文参考Apache Spark官方网站http://spark.apache.org/docs/2.2.0/ml-classification-regression.html#logistic-regression

逻辑回归:
 

逻辑回归是预测分类相应的常用方法。广义线性回归的一个特例是预测结果的概率。在spark.ml逻辑回归中,可以使用二线逻辑回归来预测二元结果,或者可以使用多项逻辑回归来预测多类结果。使用该family参数在这两种算法之间继续宁选择,或者保持不设置,Spark将推断出正确的变量。

通过将family参数设置为“多项式”,可以将多项逻辑回归用于二进制分类。它将产生两组系数和两个截距。

但在不具有常量非零列的数据集上截断LogsticRegressionMode时,Spark MLlib为常量非零列输出零系数。

此行为与R glmnet相同,但是不同于LIBSVM。

---在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类的例子,区别一个肿瘤是恶性的还是良性的。

--来自黄海广老师的学习笔记-https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

二项逻辑回归:
 

我们从二元的分类问题开始讨论。

我们将因变量(dependent variable)可能属于的两个类分别成为负向类(negative class)和正向类(positive class),则因变量y∈0,1 ,其中0表示负向类,1表示正向类。

-------------------------上图来自黄海广老师个人学习笔记----https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

我们要用线性回归算法来解决一个分类问题,对于分类,y取值为0或者1,但如果你使用的线性回归,那么假设函数的输出值可能远大于1,或者远小于0,即使所有训练样本的标签y都等于0或1.尽管我们知道标签应该取值0或1,但是如果算法得到的值永远大于1或者小于0的话,就会觉得很奇怪。所以我们在接下来要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在0到1之间。

Spark官网给出的逻辑回归的Demo:
 

/**
  * 逻辑回归的Demo
  */
object LRDemo {
  def main(args: Array[String]): Unit = {

    // 加载训练数据
    val session = SparkSession
      .builder()
      .master("local[3]")
      .appName("LRDemo")
      .getOrCreate()
    val training = session.read.format("libsvm").load("C:\\tools\\spark-2.2.1\\data\\mllib\\sample_libsvm_data.txt")

    val lr = new LogisticRegression()
      .setMaxIter(10)   // 设置最大迭代次数 默认100
      .setRegParam(0.3)  // 设置正则化系数  默认0 用于防止过拟合
      .setElasticNetParam(0.8)  // 正则化范式比(默认0),正则化有两种形式:L1(Lasso)和L2(Ridge),L1用于特征的稀疏化,L2用于防止过拟合

    // 训练模型
    val lrModel = lr.fit(training)

    // 打印coefficients和intercept
    println(s"每个特征对应系数Coefficients:${lrModel.coefficients} 截距Intercept: ${lrModel.intercept}")

    // 我们也可以使用多项式进行二元分类
    val mlr = new LogisticRegression()
      .setMaxIter(10) // 设置最大迭代次数 默认100
      .setRegParam(0.3) // 设置正则化系数 默认0 用于防止过拟合
      .setElasticNetParam(0.8) // 正则化范式比(默认0),正则化有两种形式:L1(Lasso)和L2(Ridge),L1用于特征的稀疏化,L2用于防止过拟合
      .setFamily("multinomial")

    val mlrModel = mlr.fit(training)

    println(s"Multinomial coefficients:${mlrModel.coefficientMatrix}")
    println(s"Multinomial coefficients:${mlrModel.interceptVector}")
}
}

多项逻辑回归:
 

待续~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值