Skip to content

Commit b909f89

Browse files
authored
Merge pull request #6407 from anjamejac/manifold-learning-report
Manifold learning: change in report display
2 parents 70513bc + 1056fc3 commit b909f89

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

Orange/widgets/unsupervised/owmanifoldlearning.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def __init__(self, parent):
2323
QWidget.__init__(self, parent)
2424
gui.OWComponent.__init__(self, parent)
2525
self.parameters = {}
26+
self.parameters_name = {}
2627
self.parent_callback = parent.settings_changed
2728

2829
layout = QFormLayout()
@@ -65,6 +66,7 @@ def __combo_parameter_update(self, name):
6566
index = getattr(self, name + "_index")
6667
values = getattr(self, name + "_values")
6768
self.parameters[name] = values[index][0]
69+
self.parameters_name[name] = values[index][1]
6870

6971
def _create_radio_parameter(self, name, label):
7072
self.__radio_parameter_update(name)
@@ -85,12 +87,14 @@ def __radio_parameter_update(self, name):
8587
index = getattr(self, name + "_index")
8688
values = getattr(self, name + "_values")
8789
self.parameters[name] = values[index][0]
90+
self.parameters_name[name] = values[index][1]
8891

8992

9093
class TSNEParametersEditor(ManifoldParametersEditor):
9194
_metrics = ("euclidean", "manhattan", "chebyshev", "jaccard")
9295
metric_index = Setting(0)
93-
metric_values = [(x, x.capitalize()) for x in _metrics]
96+
metric_values = [("euclidean", "Euclidean"), ("manhattan", "Manhattan"),
97+
("chebyshev", "Chebyshev"), ("jaccard", "Jaccard")]
9498

9599
perplexity = Setting(30)
96100
early_exaggeration = Setting(12)
@@ -110,6 +114,13 @@ def __init__(self, parent):
110114
self._create_spin_parameter("n_iter", 250, 10000, "Max iterations:")
111115
self._create_radio_parameter("initialization", "Initialization:")
112116

117+
def get_report_parameters(self):
118+
return {"Metric": self.parameters_name["metric"],
119+
"Perplexity": self.parameters["perplexity"],
120+
"Early exaggeration": self.parameters["early_exaggeration"],
121+
"Learning rate": self.parameters["learning_rate"],
122+
"Max iterations": self.parameters["n_iter"],
123+
"Initialization": self.parameters_name["initialization"]}
113124

114125
class MDSParametersEditor(ManifoldParametersEditor):
115126
max_iter = Setting(300)
@@ -128,13 +139,19 @@ def get_parameters(self):
128139
par = {"n_init": 1, **par}
129140
return par
130141

142+
def get_report_parameters(self):
143+
return {"Max iterations": self.parameters["max_iter"],
144+
"Initialization": self.parameters_name["init_type"]}
145+
131146
class IsomapParametersEditor(ManifoldParametersEditor):
132147
n_neighbors = Setting(5)
133148

134149
def __init__(self, parent):
135150
super().__init__(parent)
136151
self._create_spin_parameter("n_neighbors", 1, 10 ** 2, "Neighbors:")
137152

153+
def get_report_parameters(self):
154+
return {"Neighbors": self.parameters["n_neighbors"]}
138155

139156
class LocallyLinearEmbeddingParametersEditor(ManifoldParametersEditor):
140157
n_neighbors = Setting(5)
@@ -151,6 +168,10 @@ def __init__(self, parent):
151168
self._create_spin_parameter("n_neighbors", 1, 10 ** 2, "Neighbors:")
152169
self._create_spin_parameter("max_iter", 10, 10 ** 4, "Max iterations:")
153170

171+
def get_report_parameters(self):
172+
return {"Method": self.parameters_name["method"],
173+
"Neighbors": self.parameters["n_neighbors"],
174+
"Max iterations": self.parameters["max_iter"]}
154175

155176
class SpectralEmbeddingParametersEditor(ManifoldParametersEditor):
156177
affinity_index = Setting(0)
@@ -161,6 +182,8 @@ def __init__(self, parent):
161182
super().__init__(parent)
162183
self._create_combo_parameter("affinity", "Affinity:")
163184

185+
def get_report_parameters(self):
186+
return {"Affinity": self.parameters_name["affinity"]}
164187

165188
class OWManifoldLearning(OWWidget):
166189
name = "Manifold Learning"
@@ -331,8 +354,9 @@ def get_method_parameters(self, data, method):
331354
def send_report(self):
332355
method = self.MANIFOLD_METHODS[self.manifold_method_index]
333356
self.report_items((("Method", method.name),))
334-
parameters = self.get_method_parameters(self.data, method)
335-
self.report_items("Method parameters", tuple(parameters.items()))
357+
parameters = {"Number of components": self.n_components}
358+
parameters.update(self.params_widget.get_report_parameters())
359+
self.report_items("Method parameters", parameters)
336360
if self.data:
337361
self.report_data("Data", self.data)
338362

Orange/widgets/unsupervised/tests/test_owmanifoldlearning.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,19 @@ def test_unconditional_commit_on_new_signal(self):
161161
apply.reset_mock()
162162
self.send_signal(self.widget.Inputs.data, self.iris)
163163
apply.assert_called()
164+
165+
@patch("Orange.widgets.unsupervised.owmanifoldlearning.OWManifoldLearning.report_items")
166+
def test_report(self, mocked_report: Mock):
167+
for i in range(len(self.widget.MANIFOLD_METHODS)):
168+
self.send_signal(self.widget.Inputs.data, self.iris)
169+
self.widget.manifold_methods_combo.activated.emit(i)
170+
self.wait_until_finished()
171+
self.widget.send_report()
172+
mocked_report.assert_called()
173+
self.assertEqual(mocked_report.call_count, 3)
174+
mocked_report.reset_mock()
175+
176+
self.send_signal(self.widget.Inputs.data, None)
177+
self.widget.send_report()
178+
self.assertEqual(mocked_report.call_count, 2)
179+
mocked_report.reset_mock()

0 commit comments

Comments
 (0)