From 5c987c3dec6ac78d400fd8ca716cac22ce03c898 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Sun, 24 Sep 2023 14:48:01 +0900 Subject: [PATCH 1/3] Implement log scale of parcoodes --- .../ts/components/GraphParallelCoordinate.tsx | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx index 6726ba2f..02b3b1f6 100644 --- a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx +++ b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx @@ -169,6 +169,20 @@ const plotCoordinate = ( .join("") } + const calculateLogScale = (values: number[]) => { + const logValues = values.map((v) => { + return Math.log10(v) + }) + const minValue = Math.min(...logValues) + const maxValue = Math.max(...logValues) + const tickvals = Array.from( + { length: Math.ceil(maxValue) - Math.floor(minValue) + 1 }, + (_, i) => i + Math.floor(minValue) + ) + const ticktext = tickvals.map((x) => `${Math.pow(10, x).toPrecision(3)}`) + return { logValues, tickvals, ticktext } + } + const dimensions = targets.map((target) => { if (target.kind === "objective" || target.kind === "user_attr") { const values: number[] = trials.map( @@ -187,13 +201,7 @@ const plotCoordinate = ( const values: number[] = trials.map( (t) => target.getTargetValue(t) as number ) - if (s.distribution.type !== "CategoricalDistribution") { - return { - label: breakLabelIfTooLong(s.name), - values: values, - range: [s.distribution.low, s.distribution.high], - } - } else { + if (s.distribution.type === "CategoricalDistribution") { // categorical const vocabArr: string[] = s.distribution.choices.map((c) => c.value) const tickvals: number[] = vocabArr.map((v, i) => i) @@ -205,6 +213,25 @@ const plotCoordinate = ( tickvals: tickvals, ticktext: vocabArr, } + } else if (s.distribution.log) { + // numerical and log + const values = trials.map((t) => { + return target.getTargetValue(t) as number + }) + const { logValues, tickvals, ticktext } = calculateLogScale(values) + return { + label: breakLabelIfTooLong(s.name), + values: logValues, + tickvals: tickvals, + ticktext: ticktext, + } + } else { + // numerical and non-log + return { + label: breakLabelIfTooLong(s.name), + values: values, + range: [s.distribution.low, s.distribution.high], + } } } }) From da7aa6acf2f99164bcdaf2f5c27221ad45d447df Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Sun, 24 Sep 2023 14:56:39 +0900 Subject: [PATCH 2/3] Add range of plot --- .../ts/components/GraphParallelCoordinate.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx index 02b3b1f6..5d5b1222 100644 --- a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx +++ b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx @@ -175,12 +175,13 @@ const plotCoordinate = ( }) const minValue = Math.min(...logValues) const maxValue = Math.max(...logValues) + const range = [minValue, maxValue] const tickvals = Array.from( { length: Math.ceil(maxValue) - Math.floor(minValue) + 1 }, (_, i) => i + Math.floor(minValue) ) const ticktext = tickvals.map((x) => `${Math.pow(10, x).toPrecision(3)}`) - return { logValues, tickvals, ticktext } + return { logValues, range, tickvals, ticktext } } const dimensions = targets.map((target) => { @@ -215,15 +216,14 @@ const plotCoordinate = ( } } else if (s.distribution.log) { // numerical and log - const values = trials.map((t) => { - return target.getTargetValue(t) as number - }) - const { logValues, tickvals, ticktext } = calculateLogScale(values) + const { logValues, range, tickvals, ticktext } = + calculateLogScale(values) return { label: breakLabelIfTooLong(s.name), values: logValues, - tickvals: tickvals, - ticktext: ticktext, + range, + tickvals, + ticktext, } } else { // numerical and non-log From 4250c59203359d31c8d3691b8677cf6494a5f109 Mon Sep 17 00:00:00 2001 From: keisuke-umezawa Date: Sat, 30 Sep 2023 14:00:45 +0900 Subject: [PATCH 3/3] Follow review comments --- optuna_dashboard/ts/components/GraphParallelCoordinate.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx index 5d5b1222..71f2b32d 100644 --- a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx +++ b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx @@ -175,7 +175,7 @@ const plotCoordinate = ( }) const minValue = Math.min(...logValues) const maxValue = Math.max(...logValues) - const range = [minValue, maxValue] + const range = [Math.floor(minValue), Math.ceil(maxValue)] const tickvals = Array.from( { length: Math.ceil(maxValue) - Math.floor(minValue) + 1 }, (_, i) => i + Math.floor(minValue) @@ -226,7 +226,7 @@ const plotCoordinate = ( ticktext, } } else { - // numerical and non-log + // numerical and linear return { label: breakLabelIfTooLong(s.name), values: values,