You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by we...@apache.org on 2020/12/09 03:27:14 UTC
[spark] branch branch-3.1 updated: [MINOR][ML] Increase Bounded
MLOR (without regularization) test error tolerance
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 <we...@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 <we...@databricks.com>
Signed-off-by: Weichen Xu <we...@databricks.com>
(cherry picked from commit f021f6d3c72e1c84637798b4ddcb7e208fdfbf46)
Signed-off-by: Weichen Xu <we...@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-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org