Repository: incubator-hivemall Updated Branches: refs/heads/master bcae1534a -> 50867c178
Close #46: [HIVEMALL-72] Fix corner-case rescale UDF behavior to return range [0.0,1.0] Project: http://git-wip-us.apache.org/repos/asf/incubator-hivemall/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hivemall/commit/50867c17 Tree: http://git-wip-us.apache.org/repos/asf/incubator-hivemall/tree/50867c17 Diff: http://git-wip-us.apache.org/repos/asf/incubator-hivemall/diff/50867c17 Branch: refs/heads/master Commit: 50867c178784bee74bbb0abcc8209266e7665764 Parents: bcae153 Author: Makoto Yui <yuin...@gmail.com> Authored: Fri Feb 17 19:05:19 2017 +0900 Committer: myui <yuin...@gmail.com> Committed: Fri Feb 17 19:05:19 2017 +0900 ---------------------------------------------------------------------- .../src/main/java/hivemall/ftvec/scaling/RescaleUDF.java | 6 ++++++ .../test/java/hivemall/ftvec/scaling/RescaleUDFTest.java | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hivemall/blob/50867c17/core/src/main/java/hivemall/ftvec/scaling/RescaleUDF.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/hivemall/ftvec/scaling/RescaleUDF.java b/core/src/main/java/hivemall/ftvec/scaling/RescaleUDF.java index a3e4799..a73150c 100644 --- a/core/src/main/java/hivemall/ftvec/scaling/RescaleUDF.java +++ b/core/src/main/java/hivemall/ftvec/scaling/RescaleUDF.java @@ -106,6 +106,12 @@ public final class RescaleUDF extends UDF { if (min == max) { return 0.5f; } + if (value < min) { + return 0.f; + } + if (value > max) { + return 1.f; + } return (value - min) / (max - min); } http://git-wip-us.apache.org/repos/asf/incubator-hivemall/blob/50867c17/core/src/test/java/hivemall/ftvec/scaling/RescaleUDFTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/hivemall/ftvec/scaling/RescaleUDFTest.java b/core/src/test/java/hivemall/ftvec/scaling/RescaleUDFTest.java index 887511f..a132ede 100644 --- a/core/src/test/java/hivemall/ftvec/scaling/RescaleUDFTest.java +++ b/core/src/test/java/hivemall/ftvec/scaling/RescaleUDFTest.java @@ -87,8 +87,17 @@ public class RescaleUDFTest { udf.evaluate("1:string", 0.1d, 0.1d); } + @Test public void testMinMaxEquals() throws Exception { - udf.evaluate(0.1d, 0.1d, 0.1d); + assertEquals(WritableUtils.val(0.5f), udf.evaluate(0.1d, 0.1d, 0.1d)); + } + + @Test + public void testMinMaxCornercase() throws Exception { + assertEquals(WritableUtils.val(1.0f), udf.evaluate(1.1f, 0.0f, 1.0f)); + assertEquals(WritableUtils.val(0.0f), udf.evaluate(-0.1f, 0.0f, 1.0f)); + assertEquals(WritableUtils.val(1.0f), udf.evaluate(4.1f, 0.0f, 3.0f)); + assertEquals(WritableUtils.val(0.0f), udf.evaluate(-2.1f, -1.0f, 1.0f)); } @Test(expected = HiveException.class)