[SPARK-7762] [MLLIB] set default value for outputCol

Set a default value for `outputCol` instead of forcing users to name it. This is useful for intermediate transformers in the pipeline. jkbradley

Author: Xiangrui Meng <meng@databricks.com>

Closes #6289 from mengxr/SPARK-7762 and squashes the following commits:

54edebc [Xiangrui Meng] merge master
bff8667 [Xiangrui Meng] update unit test
171246b [Xiangrui Meng] add unit test for outputCol
a4321bd [Xiangrui Meng] set default value for outputCol

(cherry picked from commit c330e52dae)
Signed-off-by: Joseph K. Bradley <joseph@databricks.com>
This commit is contained in:
Xiangrui Meng 2015-05-20 17:26:26 -07:00 committed by Joseph K. Bradley
parent 8d66849862
commit 5f64269c52
5 changed files with 42 additions and 4 deletions

View file

@ -49,7 +49,7 @@ private[shared] object SharedParamsCodeGen {
isValid = "ParamValidators.inRange(0, 1)"),
ParamDesc[String]("inputCol", "input column name"),
ParamDesc[Array[String]]("inputCols", "input column names"),
ParamDesc[String]("outputCol", "output column name"),
ParamDesc[String]("outputCol", "output column name", Some("uid + \"__output\"")),
ParamDesc[Int]("checkpointInterval", "checkpoint interval (>= 1)",
isValid = "ParamValidators.gtEq(1)"),
ParamDesc[Boolean]("fitIntercept", "whether to fit an intercept term", Some("true")),

View file

@ -185,7 +185,7 @@ private[ml] trait HasInputCols extends Params {
}
/**
* (private[ml]) Trait for shared param outputCol.
* (private[ml]) Trait for shared param outputCol (default: uid + "__output").
*/
private[ml] trait HasOutputCol extends Params {
@ -195,6 +195,8 @@ private[ml] trait HasOutputCol extends Params {
*/
final val outputCol: Param[String] = new Param[String](this, "outputCol", "output column name")
setDefault(outputCol, uid + "__output")
/** @group getParam */
final def getOutputCol: String = $(outputCol)
}

View file

@ -0,0 +1,35 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.spark.ml.param.shared
import org.scalatest.FunSuite
import org.apache.spark.ml.param.Params
class SharedParamsSuite extends FunSuite {
test("outputCol") {
class Obj(override val uid: String) extends Params with HasOutputCol
val obj = new Obj("obj")
assert(obj.hasDefault(obj.outputCol))
assert(obj.getOrDefault(obj.outputCol) === "obj__output")
}
}

View file

@ -116,7 +116,7 @@ if __name__ == "__main__":
("rawPredictionCol", "raw prediction (a.k.a. confidence) column name", "'rawPrediction'"),
("inputCol", "input column name", None),
("inputCols", "input column names", None),
("outputCol", "output column name", None),
("outputCol", "output column name", "self.uid + '__output'"),
("numFeatures", "number of features", None),
("checkpointInterval", "checkpoint interval (>= 1)", None),
("seed", "random seed", "hash(type(self).__name__)"),

View file

@ -280,6 +280,7 @@ class HasOutputCol(Params):
super(HasOutputCol, self).__init__()
#: param for output column name
self.outputCol = Param(self, "outputCol", "output column name")
self._setDefault(outputCol=self.uid + '__output')
def setOutputCol(self, value):
"""
@ -459,7 +460,7 @@ class DecisionTreeParams(Params):
self.maxMemoryInMB = Param(self, "maxMemoryInMB", "Maximum memory in MB allocated to histogram aggregation.")
#: param for If false, the algorithm will pass trees to executors to match instances with nodes. If true, the algorithm will cache node IDs for each instance. Caching can speed up training of deeper trees.
self.cacheNodeIds = Param(self, "cacheNodeIds", "If false, the algorithm will pass trees to executors to match instances with nodes. If true, the algorithm will cache node IDs for each instance. Caching can speed up training of deeper trees.")
def setMaxDepth(self, value):
"""
Sets the value of :py:attr:`maxDepth`.