Github user dbtsai commented on a diff in the pull request:

    https://github.com/apache/spark/pull/8079#discussion_r36717291
  
    --- Diff: 
mllib/src/main/scala/org/apache/spark/ml/classification/LogisticRegression.scala
 ---
    @@ -43,36 +42,60 @@ import org.apache.spark.storage.StorageLevel
      */
     private[classification] trait LogisticRegressionParams extends 
ProbabilisticClassifierParams
       with HasRegParam with HasElasticNetParam with HasMaxIter with 
HasFitIntercept with HasTol
    -  with HasStandardization {
    +  with HasStandardization with HasThreshold {
     
       /**
    -   * Version of setThresholds() for binary classification, available for 
backwards
    -   * compatibility.
    +   * Set threshold in binary classification prediction, in range [0, 1].
    +   * If [[thresholds]] is set, then [[threshold]] is ignored.
        *
    -   * Calling this with threshold p will effectively call 
`setThresholds(Array(1-p, p))`.
    +   * If the estimated probability of class label 1 is > threshold, then 
predict 1, else 0.
    +   * A high threshold encourages the model to predict 0 more often;
    +   * a low threshold encourages the model to predict 1 more often.
        *
    -   * Default is effectively 0.5.
    +   * Note: Calling this with threshold p is equivalent to calling 
`setThresholds(Array(1-p, p))`.
    +   *
    +   * Default is 0.5.
        * @group setParam
        */
    -  def setThreshold(value: Double): this.type = set(thresholds, Array(1.0 - 
value, value))
    +  def setThreshold(value: Double): this.type
     
       /**
    -   * Version of [[getThresholds()]] for binary classification, available 
for backwards
    -   * compatibility.
    +   * Get threshold for binary classification prediction.
    +   * If [[thresholds]] is set, then [[threshold]] is ignored.
        *
    -   * Param thresholds must have length 2 (or not be specified).
    -   * This returns {{{1 / (1 + thresholds(0) / thresholds(1))}}}.
    +   * @return If [[thresholds]] is set with length 2 (i.e., binary 
classification), this returns
    +   *         the equivalent threshold: {{{1 / (1 + thresholds(0) / 
thresholds(1))}}}.
    +   *         Otherwise, returns [[threshold]] value.
        * @group getParam
    +   * @throws RuntimeException if [[thresholds]] is set to an array of 
length other than 2.
        */
    -  def getThreshold: Double = {
    -    if (isDefined(thresholds)) {
    +  override def getThreshold: Double = {
    +    if (isSet(thresholds)) {
           val thresholdValues = $(thresholds)
    -      assert(thresholdValues.length == 2, "Logistic Regression 
getThreshold only applies to" +
    -        " binary classification, but thresholds has length != 2." +
    -        s"  thresholds: ${thresholdValues.mkString(",")}")
    +      if (thresholdValues.length != 2) {
    --- End diff --
    
    Most of the code in LiR/LoR, `require` is used for checking if the 
condition meets the requirement. However, if we decide to throw exception, 
should we just throw `RuntimeException`? Maybe `IllegalArgumentException` will 
be more appropriate here.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to