3

Ich trainiere ein einfaches CrossValidatorModel mit logistischen Regression und Spark-ml Pipelines. Ich kann neue Daten vorhersagen, aber ich möchte über die Black Box gehen und eine Analyse der KoeffizientenWie erhalten Sie die Koeffizienten der besten logistischen Regression in einem 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") 

Dann definiere ich ein Raster von Parametern tun und ich trainiere über das Gitter das beste Modell WRT zu bekommen

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) 

Wie erhalte ich Koeffizienten (die Betas) des besten Modells der logistischen Regression?

Antwort

5

Extract beste Modell:

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

logistische Regressionsmodell finden:

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

Extract Koeffizienten:

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

Schnell und schmutzig-Äquivalent:

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

(lrm.intercept, lrm.coefficients) 
Verwandte Themen