加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在spark-ml CrossValidatorModel中获得最佳逻辑回

发布时间:2020-12-16 18:06:37 所属栏目:安全 来源:网络整理
导读:我使用逻辑回归和spark-ml管道训练一个简单的CrossValidatorModel.我可以预测新数据,但我想超越黑盒子并对系数进行一些分析 val lr = new LogisticRegression(). setFitIntercept(true). setMaxIter(maxIter). setElasticNetParam(alpha). setStandardizatio
我使用逻辑回归和spark-ml管道训练一个简单的CrossValidatorModel.我可以预测新数据,但我想超越黑盒子并对系数进行一些分析

val lr = new LogisticRegression().
  setFitIntercept(true).
  setMaxIter(maxIter).
  setElasticNetParam(alpha).
  setStandardization(true).
  setFamily("binomial").
  setWeightCol("weight").
  setFeaturesCol("features").
  setLabelCol("response")

val assembler = new VectorAssembler().
  setInputCols(Array("feat1","feat2")).
  setOutputCol("features")

val modelPipeline = new Pipeline().
  setStages(Array(assembler,lr))

val evaluator = new BinaryClassificationEvaluator()
  .setLabelCol("response")

然后我定义了一个参数网格,我在网格上训练以获得最佳模型和AUC

val paramGrid = new ParamGridBuilder().
  addGrid(lr.regParam,lambdas).
  build()

val pipeline = new CrossValidator().
  setEstimator(modelPipeline).
  setEvaluator(evaluator).
  setEstimatorParamMaps(paramGrid).
  setNumFolds(nfolds)

val cvModel = pipeline.fit(train)

如何获得最佳逻辑回归模型的系数(beta)?

解决方法

提取最佳模型:

val bestModel = cvModel.bestModel match {
  case pm: PipelineModel => Some(pm)
  case _ => None
}

查找逻辑回归模型:

val lrm = bestModel
  .map(_.stages.collect { case lrm: LogisticRegressionModel => lrm })
  .flatMap(_.headOption)

提取系数:

lrm.map(m => (m.intercept,m.coefficients))

快速和脏的等价物:

val lrm: LogisticRegressionModel = cvModel
  .bestModel.asInstanceOf[PipelineModel]
  .stages
  .last.asInstanceOf[LogisticRegressionModel]

(lrm.intercept,lrm.coefficients)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读