This is an automated email from the ASF dual-hosted git repository. weichenxu123 pushed a commit to branch branch-3.1 in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/branch-3.1 by this push: new b0a70ab [MINOR][ML] Increase Bounded MLOR (without regularization) test error tolerance b0a70ab is described below commit b0a70abed383cedd59f28cec75aa898df0c0b4bd Author: Weichen Xu <weichen...@databricks.com> AuthorDate: Wed Dec 9 11:18:09 2020 +0800 [MINOR][ML] Increase Bounded MLOR (without regularization) test error tolerance ### What changes were proposed in this pull request? Improve LogisticRegression test error tolerance ### Why are the changes needed? When we switch BLAS version, some of the tests will fail due to too strict error tolerance in test. ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? N/A Closes #30587 from WeichenXu123/fix_lor_test. Authored-by: Weichen Xu <weichen...@databricks.com> Signed-off-by: Weichen Xu <weichen...@databricks.com> (cherry picked from commit f021f6d3c72e1c84637798b4ddcb7e208fdfbf46) Signed-off-by: Weichen Xu <weichen...@databricks.com> --- .../ml/classification/LogisticRegressionSuite.scala | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/mllib/src/test/scala/org/apache/spark/ml/classification/LogisticRegressionSuite.scala b/mllib/src/test/scala/org/apache/spark/ml/classification/LogisticRegressionSuite.scala index d0b282d..d2814b4 100644 --- a/mllib/src/test/scala/org/apache/spark/ml/classification/LogisticRegressionSuite.scala +++ b/mllib/src/test/scala/org/apache/spark/ml/classification/LogisticRegressionSuite.scala @@ -1548,9 +1548,9 @@ class LogisticRegressionSuite extends MLTest with DefaultReadWriteTest { val interceptsExpected1 = Vectors.dense( 1.0000152482448372, 3.591773288423673, 5.079685953744937) - checkCoefficientsEquivalent(model1.coefficientMatrix, coefficientsExpected1) + checkBoundedMLORCoefficientsEquivalent(model1.coefficientMatrix, coefficientsExpected1) assert(model1.interceptVector ~== interceptsExpected1 relTol 0.01) - checkCoefficientsEquivalent(model2.coefficientMatrix, coefficientsExpected1) + checkBoundedMLORCoefficientsEquivalent(model2.coefficientMatrix, coefficientsExpected1) assert(model2.interceptVector ~== interceptsExpected1 relTol 0.01) // Bound constrained optimization with bound on both side. @@ -1585,9 +1585,9 @@ class LogisticRegressionSuite extends MLTest with DefaultReadWriteTest { isTransposed = true) val interceptsExpected3 = Vectors.dense(1.0, 2.0, 2.0) - checkCoefficientsEquivalent(model3.coefficientMatrix, coefficientsExpected3) + checkBoundedMLORCoefficientsEquivalent(model3.coefficientMatrix, coefficientsExpected3) assert(model3.interceptVector ~== interceptsExpected3 relTol 0.01) - checkCoefficientsEquivalent(model4.coefficientMatrix, coefficientsExpected3) + checkBoundedMLORCoefficientsEquivalent(model4.coefficientMatrix, coefficientsExpected3) assert(model4.interceptVector ~== interceptsExpected3 relTol 0.01) // Bound constrained optimization with infinite bound on both side. @@ -1621,9 +1621,9 @@ class LogisticRegressionSuite extends MLTest with DefaultReadWriteTest { val interceptsExpected5 = Vectors.dense( -2.2231282183460723, 0.3669496747012527, 1.856178543644802) - checkCoefficientsEquivalent(model5.coefficientMatrix, coefficientsExpected5) + checkBoundedMLORCoefficientsEquivalent(model5.coefficientMatrix, coefficientsExpected5) assert(model5.interceptVector ~== interceptsExpected5 relTol 0.01) - checkCoefficientsEquivalent(model6.coefficientMatrix, coefficientsExpected5) + checkBoundedMLORCoefficientsEquivalent(model6.coefficientMatrix, coefficientsExpected5) assert(model6.interceptVector ~== interceptsExpected5 relTol 0.01) } @@ -1719,9 +1719,9 @@ class LogisticRegressionSuite extends MLTest with DefaultReadWriteTest { 1.7524631428961193, 1.2292565990448736, 1.3433784431904323, 1.5846063017678864), isTransposed = true) - checkCoefficientsEquivalent(model1.coefficientMatrix, coefficientsExpected) + checkBoundedMLORCoefficientsEquivalent(model1.coefficientMatrix, coefficientsExpected) assert(model1.interceptVector.toArray === Array.fill(3)(0.0)) - checkCoefficientsEquivalent(model2.coefficientMatrix, coefficientsExpected) + checkBoundedMLORCoefficientsEquivalent(model2.coefficientMatrix, coefficientsExpected) assert(model2.interceptVector.toArray === Array.fill(3)(0.0)) } @@ -2953,16 +2953,17 @@ object LogisticRegressionSuite { } /** + * Note: This method is only used in Bounded MLOR (without regularization) test * When no regularization is applied, the multinomial coefficients lack identifiability * because we do not use a pivot class. We can add any constant value to the coefficients * and get the same likelihood. If fitting under bound constrained optimization, we don't * choose the mean centered coefficients like what we do for unbound problems, since they * may out of the bounds. We use this function to check whether two coefficients are equivalent. */ - def checkCoefficientsEquivalent(coefficients1: Matrix, coefficients2: Matrix): Unit = { + def checkBoundedMLORCoefficientsEquivalent(coefficients1: Matrix, coefficients2: Matrix): Unit = { coefficients1.colIter.zip(coefficients2.colIter).foreach { case (col1: Vector, col2: Vector) => (col1.asBreeze - col2.asBreeze).toArray.toSeq.sliding(2).foreach { - case Seq(v1, v2) => assert(v1 ~= v2 absTol 1E-3) + case Seq(v1, v2) => assert(v1 ~= v2 absTol 1E-2) } } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org