【问题标题】:Spark multiclass logistic regression class number and labelsSpark 多类逻辑回归类数和标签
【发布时间】:2016-03-27 13:01:54
【问题描述】:

我正在为 scala 运行来自 here 的 Spark 逻辑回归示例。

在训练部分:

val model = new LogisticRegressionWithLBFGS().setNumClasses(10).run(training)

类数设置为 10。如果我的数据包含 3 个标签,即 5、12 和 20;它引发了一个异常,例如

ERROR DataValidators: Classification labels should be in {0 to 9}. Found 6 invalid labels.

我知道我可以通过将classnum 设置为大于最大类值来解决它。

是否可以在不对标签值进行显式转换的情况下在此类数据集上运行具有真实类数的算法?

如果我以高 classnum 运行它以使其工作,算法是否会预测不存在的类,例如上面的 17?

【问题讨论】:

    标签: scala apache-spark logistic-regression


    【解决方案1】:

    我认为您能做的最好的事情是map 您的训练数据并修改每个条目,并使用Map 将您的labels 交换为0.0, 1.0, 2.0, ..., n - 1,其中n = number of classes

    import org.apache.spark.mllib.regression.LabeledPoint 
    import org.apache.spark.mllib.classification.LogisticRegressionWithLBFGS
    import org.apache.spark.mllib.linalg.Vectors
    
    val rdd = sc.parallelize(List(
      LabeledPoint(5.0, Vectors.dense(1,2)), 
      LabeledPoint(12.0, Vectors.dense(1,3)),
      LabeledPoint(20.0, Vectors.dense(-1,4))))
    
    val map = Map(5 -> 0.0, 12.0 -> 1.0, 20.0 -> 2.0)
    
    val trainingData = rdd.map{
      case LabeledPoint(category, features) => LabeledPoint(map(category), features)
    }
    
    val model = new LogisticRegressionWithLBFGS().setNumClasses(3).run(trainingData)
    

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 2018-12-05
      • 1970-01-01
      • 2020-09-21
      • 2020-09-10
      • 2018-11-22
      • 2016-07-31
      • 2020-08-01
      相关资源
      最近更新 更多