Orange3-MRSD 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orange3_mrsd-0.1.0/LICENSE +21 -0
- orange3_mrsd-0.1.0/MANIFEST.in +8 -0
- orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/PKG-INFO +103 -0
- orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/SOURCES.txt +182 -0
- orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/dependency_links.txt +1 -0
- orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/entry_points.txt +8 -0
- orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/not-zip-safe +1 -0
- orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/requires.txt +12 -0
- orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/top_level.txt +2 -0
- orange3_mrsd-0.1.0/PKG-INFO +103 -0
- orange3_mrsd-0.1.0/README.md +65 -0
- orange3_mrsd-0.1.0/doc/concepts.md +74 -0
- orange3_mrsd-0.1.0/doc/getting-started.md +79 -0
- orange3_mrsd-0.1.0/doc/index.md +36 -0
- orange3_mrsd-0.1.0/doc/widgets/images/load-subgroups.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2-classifier.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-canonical-space.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-classifier.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm-correlations.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble-consensus.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-classifier.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-dendrogram.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi-mutual-information.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-classifier.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-dendrograms.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt-contingency-table.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules-measures.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules-prototype.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules-rule.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/save-subgroups.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/subgroup-browser.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/subgroup-classifier.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/subgroup-consolidation.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/subgroup-datasets.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/subgroup-overlap.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/subgroup-profile.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/images/variable-roles.png +0 -0
- orange3_mrsd-0.1.0/doc/widgets/load-subgroups.md +10 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-c2.md +145 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-cca.md +125 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-emm.md +115 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-ensemble.md +118 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-hc.md +125 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-mi.md +116 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-mv.md +154 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-pt.md +118 -0
- orange3_mrsd-0.1.0/doc/widgets/mrsd-rules.md +113 -0
- orange3_mrsd-0.1.0/doc/widgets/save-subgroups.md +12 -0
- orange3_mrsd-0.1.0/doc/widgets/subgroup-browser.md +19 -0
- orange3_mrsd-0.1.0/doc/widgets/subgroup-classifier.md +15 -0
- orange3_mrsd-0.1.0/doc/widgets/subgroup-consolidation.md +43 -0
- orange3_mrsd-0.1.0/doc/widgets/subgroup-datasets.md +23 -0
- orange3_mrsd-0.1.0/doc/widgets/subgroup-overlap.md +12 -0
- orange3_mrsd-0.1.0/doc/widgets/subgroup-profile.md +11 -0
- orange3_mrsd-0.1.0/doc/widgets/variable-roles.md +13 -0
- orange3_mrsd-0.1.0/orangecontrib/__init__.py +2 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/__init__.py +2 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/backend.py +807 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/common_measures.py +117 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/consensus.py +281 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/__init__.py +53 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/clinical.csv +351 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/clinical.tab +353 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/customers.csv +601 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/customers.tab +603 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_rule.csv +301 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_rule.tab +303 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_shift.csv +301 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_shift.tab +303 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/pure_noise.csv +301 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/pure_noise.tab +303 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/students.csv +401 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/students.tab +403 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/export.py +89 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/inspection.py +805 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/DEV_NOTES.md +38 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/README.md +107 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/__init__.py +119 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/classifiers.py +228 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/clustering.py +523 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/common.py +283 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/core.py +708 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/data_loader.py +320 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/divergence.py +677 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/inference.py +339 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_ensemble.py +822 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_mi.py +578 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_mv.py +829 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_rules.py +633 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdc2_ranking.py +428 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdc2_semisupervised.py +323 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdc2_swapping.py +500 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdcca.py +422 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdemm.py +649 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdhc.py +522 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdpt.py +535 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/rules.py +457 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/subgroups.py +3 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/synthetic.py +47 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/params.py +622 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/__init__.py +27 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/browser.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/c2.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/category.svg +10 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/cca.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/classifier.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/consolidation.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/datasets.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/emm.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/ensemble.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/hc.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/load.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/mi.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/mv.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/overlap.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/profile.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/pt.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/ranking.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/roles.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/rules.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/save.svg +4 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/semisupervised.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/swapping.svg +7 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/inspectors.py +1261 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owbase.py +901 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owloadsubgroups.py +127 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_c2.py +45 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_cca.py +20 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_emm.py +20 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_ensemble.py +20 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_hc.py +21 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_mi.py +20 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_mv.py +20 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_pt.py +20 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_ranking.py +1 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_rules.py +20 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_semisupervised.py +1 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_swapping.py +1 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsavesubgroups.py +127 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupbrowser.py +521 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupclassifier.py +325 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupconsolidation.py +348 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupdatasets.py +106 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupoverlap.py +237 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupprofile.py +222 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owvariableroles.py +199 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/utils.py +32 -0
- orange3_mrsd-0.1.0/orangecontrib/subgroups/worker.py +38 -0
- orange3_mrsd-0.1.0/setup.cfg +4 -0
- orange3_mrsd-0.1.0/setup.py +78 -0
- orange3_mrsd-0.1.0/tests/__init__.py +0 -0
- orange3_mrsd-0.1.0/tests/conftest.py +7 -0
- orange3_mrsd-0.1.0/tests/test_backend.py +239 -0
- orange3_mrsd-0.1.0/tests/test_params.py +65 -0
- orange3_mrsd-0.1.0/tests/test_widgets.py +82 -0
- orange3_mrsd-0.1.0/tools/make_datasets.py +177 -0
- orange3_mrsd-0.1.0/tools/make_docs.py +508 -0
- orange3_mrsd-0.1.0/tools/make_screenshots.py +223 -0
- orange3_mrsd-0.1.0/tools/sync_mrsd.py +41 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lan Umek
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include LICENSE
|
|
3
|
+
recursive-include orangecontrib/subgroups/widgets/icons *.svg
|
|
4
|
+
recursive-include orangecontrib/subgroups/datasets *.tab *.csv
|
|
5
|
+
recursive-include orangecontrib/subgroups/mrsd *.py *.md
|
|
6
|
+
recursive-include tools *.py
|
|
7
|
+
recursive-include doc *.md
|
|
8
|
+
recursive-include doc/widgets/images *.png
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Orange3-MRSD
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Orange add-on for discovering subgroups in data with several dependent variables (MRSD).
|
|
5
|
+
Home-page: https://github.com/lan-umek/orange3-mrsd
|
|
6
|
+
Author: Lan Umek
|
|
7
|
+
License: MIT
|
|
8
|
+
Keywords: orange3 add-on,subgroup discovery,multiple responses,MRSD,exceptional model mining
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
13
|
+
Requires-Python: >=3.9
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Requires-Dist: Orange3>=3.34
|
|
17
|
+
Requires-Dist: numpy>=1.23
|
|
18
|
+
Requires-Dist: pandas>=1.5
|
|
19
|
+
Requires-Dist: scipy>=1.9
|
|
20
|
+
Requires-Dist: scikit-learn>=1.2
|
|
21
|
+
Requires-Dist: pyqtgraph
|
|
22
|
+
Provides-Extra: excel
|
|
23
|
+
Requires-Dist: openpyxl; extra == "excel"
|
|
24
|
+
Provides-Extra: test
|
|
25
|
+
Requires-Dist: pytest; extra == "test"
|
|
26
|
+
Dynamic: author
|
|
27
|
+
Dynamic: classifier
|
|
28
|
+
Dynamic: description
|
|
29
|
+
Dynamic: description-content-type
|
|
30
|
+
Dynamic: home-page
|
|
31
|
+
Dynamic: keywords
|
|
32
|
+
Dynamic: license
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
Dynamic: provides-extra
|
|
35
|
+
Dynamic: requires-dist
|
|
36
|
+
Dynamic: requires-python
|
|
37
|
+
Dynamic: summary
|
|
38
|
+
|
|
39
|
+
# Orange3-MRSD
|
|
40
|
+
|
|
41
|
+
An [Orange](https://orangedatamining.com) add-on for **Multiple Responses
|
|
42
|
+
Subgroup Discovery (MRSD)**: finding groups of instances, described by the
|
|
43
|
+
independent variables **X**, in which several dependent variables **Y** – or
|
|
44
|
+
their relation to X – behave differently from the rest of the data.
|
|
45
|
+
|
|
46
|
+
The add-on wraps the MRSD Python package (vendored in
|
|
47
|
+
`orangecontrib/subgroups/mrsd`) and adds widgets for setting variable roles,
|
|
48
|
+
running the algorithms, inspecting, combining, visualising and saving the
|
|
49
|
+
subgroups.
|
|
50
|
+
|
|
51
|
+
## Widgets (category *Subgroups*)
|
|
52
|
+
|
|
53
|
+
| | |
|
|
54
|
+
|---|---|
|
|
55
|
+
| **Data** | Subgroup Datasets, Variable Roles |
|
|
56
|
+
| **Algorithms** | MRSD-PT (partitioning and tables), MRSD-HC (hierarchical clustering and classification), MRSD-C2 (classification in both spaces: swapping, semi-supervised, ranking), MRSD-CCA, MRSD-EMM, MRSD-MV (multi-view), MRSD-MI, MRSD-Rules, MRSD-Ensemble |
|
|
57
|
+
| **Results** | Subgroup Browser, Subgroup Consolidation, Subgroup Classifier, Subgroup Profile, Subgroup Overlap, Save Subgroups, Load Subgroups |
|
|
58
|
+
|
|
59
|
+
Every algorithm widget shows the subgroups with their rule in X and prototype
|
|
60
|
+
in Y, has algorithm-specific views of the selected subgroup (contingency
|
|
61
|
+
table, dendrograms, classifiers, correlations …), accepts Orange learners and
|
|
62
|
+
sends the selected subgroup's rows, membership data and membership model on
|
|
63
|
+
to other Orange widgets.
|
|
64
|
+
|
|
65
|
+
Documentation: [doc/index.md](doc/index.md) – start with
|
|
66
|
+
[Getting started](doc/getting-started.md).
|
|
67
|
+
|
|
68
|
+
## Installation
|
|
69
|
+
|
|
70
|
+
Orange 3.34 or newer is required.
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
pip install Orange3-MRSD # into the environment that runs Orange
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
or from a clone: `pip install -e .`. Excel export additionally needs
|
|
77
|
+
`openpyxl`.
|
|
78
|
+
|
|
79
|
+
## Development
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
python -m pytest tests -q # backend tests run without Orange; widget tests need Orange and QT_QPA_PLATFORM=offscreen
|
|
83
|
+
python tools/make_docs.py # regenerate doc/ (parameter tables come from params.py)
|
|
84
|
+
python tools/make_datasets.py # regenerate the bundled datasets
|
|
85
|
+
python tools/sync_mrsd.py # copy the MRSD package from ../subgroups into orangecontrib/subgroups/mrsd
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
* The widgets build their parameter GUI from `orangecontrib/subgroups/params.py`;
|
|
89
|
+
`tests/test_params.py` fails if a field of an algorithm's `Config` dataclass is
|
|
90
|
+
not covered or a parameter name clashes with a widget attribute.
|
|
91
|
+
* Orange caches the widget descriptions of an add-on and refreshes them only
|
|
92
|
+
when `orangecontrib/subgroups/widgets/__init__.py` changes: after changing a
|
|
93
|
+
widget's inputs, outputs or metadata bump `WIDGET_REGISTRY_STAMP` there.
|
|
94
|
+
|
|
95
|
+
## Status
|
|
96
|
+
|
|
97
|
+
The algorithms and the non-GUI part of the add-on are covered by tests. Most widgets have been tried interactively on Orange 3.40 (Windows); some of
|
|
98
|
+
the newer views (e.g. the dendrograms of MRSD-MV, cell selection in Subgroup
|
|
99
|
+
Overlap) and other Orange versions and platforms have not been checked yet.
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
MIT – see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
3
|
+
README.md
|
|
4
|
+
setup.py
|
|
5
|
+
Orange3_MRSD.egg-info/PKG-INFO
|
|
6
|
+
Orange3_MRSD.egg-info/SOURCES.txt
|
|
7
|
+
Orange3_MRSD.egg-info/dependency_links.txt
|
|
8
|
+
Orange3_MRSD.egg-info/entry_points.txt
|
|
9
|
+
Orange3_MRSD.egg-info/not-zip-safe
|
|
10
|
+
Orange3_MRSD.egg-info/requires.txt
|
|
11
|
+
Orange3_MRSD.egg-info/top_level.txt
|
|
12
|
+
doc/concepts.md
|
|
13
|
+
doc/getting-started.md
|
|
14
|
+
doc/index.md
|
|
15
|
+
doc/widgets/load-subgroups.md
|
|
16
|
+
doc/widgets/mrsd-c2.md
|
|
17
|
+
doc/widgets/mrsd-cca.md
|
|
18
|
+
doc/widgets/mrsd-emm.md
|
|
19
|
+
doc/widgets/mrsd-ensemble.md
|
|
20
|
+
doc/widgets/mrsd-hc.md
|
|
21
|
+
doc/widgets/mrsd-mi.md
|
|
22
|
+
doc/widgets/mrsd-mv.md
|
|
23
|
+
doc/widgets/mrsd-pt.md
|
|
24
|
+
doc/widgets/mrsd-rules.md
|
|
25
|
+
doc/widgets/save-subgroups.md
|
|
26
|
+
doc/widgets/subgroup-browser.md
|
|
27
|
+
doc/widgets/subgroup-classifier.md
|
|
28
|
+
doc/widgets/subgroup-consolidation.md
|
|
29
|
+
doc/widgets/subgroup-datasets.md
|
|
30
|
+
doc/widgets/subgroup-overlap.md
|
|
31
|
+
doc/widgets/subgroup-profile.md
|
|
32
|
+
doc/widgets/variable-roles.md
|
|
33
|
+
doc/widgets/images/load-subgroups.png
|
|
34
|
+
doc/widgets/images/mrsd-c2-classifier.png
|
|
35
|
+
doc/widgets/images/mrsd-c2-measures.png
|
|
36
|
+
doc/widgets/images/mrsd-c2-prototype.png
|
|
37
|
+
doc/widgets/images/mrsd-c2.png
|
|
38
|
+
doc/widgets/images/mrsd-cca-canonical-space.png
|
|
39
|
+
doc/widgets/images/mrsd-cca-classifier.png
|
|
40
|
+
doc/widgets/images/mrsd-cca-measures.png
|
|
41
|
+
doc/widgets/images/mrsd-cca-prototype.png
|
|
42
|
+
doc/widgets/images/mrsd-cca.png
|
|
43
|
+
doc/widgets/images/mrsd-emm-correlations.png
|
|
44
|
+
doc/widgets/images/mrsd-emm-measures.png
|
|
45
|
+
doc/widgets/images/mrsd-emm-prototype.png
|
|
46
|
+
doc/widgets/images/mrsd-emm.png
|
|
47
|
+
doc/widgets/images/mrsd-ensemble-consensus.png
|
|
48
|
+
doc/widgets/images/mrsd-ensemble-measures.png
|
|
49
|
+
doc/widgets/images/mrsd-ensemble-prototype.png
|
|
50
|
+
doc/widgets/images/mrsd-ensemble.png
|
|
51
|
+
doc/widgets/images/mrsd-hc-classifier.png
|
|
52
|
+
doc/widgets/images/mrsd-hc-dendrogram.png
|
|
53
|
+
doc/widgets/images/mrsd-hc-measures.png
|
|
54
|
+
doc/widgets/images/mrsd-hc-prototype.png
|
|
55
|
+
doc/widgets/images/mrsd-hc.png
|
|
56
|
+
doc/widgets/images/mrsd-mi-measures.png
|
|
57
|
+
doc/widgets/images/mrsd-mi-mutual-information.png
|
|
58
|
+
doc/widgets/images/mrsd-mi-prototype.png
|
|
59
|
+
doc/widgets/images/mrsd-mi.png
|
|
60
|
+
doc/widgets/images/mrsd-mv-classifier.png
|
|
61
|
+
doc/widgets/images/mrsd-mv-dendrograms.png
|
|
62
|
+
doc/widgets/images/mrsd-mv-measures.png
|
|
63
|
+
doc/widgets/images/mrsd-mv-prototype.png
|
|
64
|
+
doc/widgets/images/mrsd-mv.png
|
|
65
|
+
doc/widgets/images/mrsd-pt-contingency-table.png
|
|
66
|
+
doc/widgets/images/mrsd-pt-measures.png
|
|
67
|
+
doc/widgets/images/mrsd-pt-prototype.png
|
|
68
|
+
doc/widgets/images/mrsd-pt.png
|
|
69
|
+
doc/widgets/images/mrsd-rules-measures.png
|
|
70
|
+
doc/widgets/images/mrsd-rules-prototype.png
|
|
71
|
+
doc/widgets/images/mrsd-rules-rule.png
|
|
72
|
+
doc/widgets/images/mrsd-rules.png
|
|
73
|
+
doc/widgets/images/save-subgroups.png
|
|
74
|
+
doc/widgets/images/subgroup-browser.png
|
|
75
|
+
doc/widgets/images/subgroup-classifier.png
|
|
76
|
+
doc/widgets/images/subgroup-consolidation.png
|
|
77
|
+
doc/widgets/images/subgroup-datasets.png
|
|
78
|
+
doc/widgets/images/subgroup-overlap.png
|
|
79
|
+
doc/widgets/images/subgroup-profile.png
|
|
80
|
+
doc/widgets/images/variable-roles.png
|
|
81
|
+
orangecontrib/__init__.py
|
|
82
|
+
orangecontrib/subgroups/__init__.py
|
|
83
|
+
orangecontrib/subgroups/backend.py
|
|
84
|
+
orangecontrib/subgroups/common_measures.py
|
|
85
|
+
orangecontrib/subgroups/consensus.py
|
|
86
|
+
orangecontrib/subgroups/export.py
|
|
87
|
+
orangecontrib/subgroups/inspection.py
|
|
88
|
+
orangecontrib/subgroups/params.py
|
|
89
|
+
orangecontrib/subgroups/worker.py
|
|
90
|
+
orangecontrib/subgroups/datasets/__init__.py
|
|
91
|
+
orangecontrib/subgroups/datasets/clinical.csv
|
|
92
|
+
orangecontrib/subgroups/datasets/clinical.tab
|
|
93
|
+
orangecontrib/subgroups/datasets/customers.csv
|
|
94
|
+
orangecontrib/subgroups/datasets/customers.tab
|
|
95
|
+
orangecontrib/subgroups/datasets/planted_rule.csv
|
|
96
|
+
orangecontrib/subgroups/datasets/planted_rule.tab
|
|
97
|
+
orangecontrib/subgroups/datasets/planted_shift.csv
|
|
98
|
+
orangecontrib/subgroups/datasets/planted_shift.tab
|
|
99
|
+
orangecontrib/subgroups/datasets/pure_noise.csv
|
|
100
|
+
orangecontrib/subgroups/datasets/pure_noise.tab
|
|
101
|
+
orangecontrib/subgroups/datasets/students.csv
|
|
102
|
+
orangecontrib/subgroups/datasets/students.tab
|
|
103
|
+
orangecontrib/subgroups/mrsd/DEV_NOTES.md
|
|
104
|
+
orangecontrib/subgroups/mrsd/README.md
|
|
105
|
+
orangecontrib/subgroups/mrsd/__init__.py
|
|
106
|
+
orangecontrib/subgroups/mrsd/classifiers.py
|
|
107
|
+
orangecontrib/subgroups/mrsd/clustering.py
|
|
108
|
+
orangecontrib/subgroups/mrsd/common.py
|
|
109
|
+
orangecontrib/subgroups/mrsd/core.py
|
|
110
|
+
orangecontrib/subgroups/mrsd/data_loader.py
|
|
111
|
+
orangecontrib/subgroups/mrsd/divergence.py
|
|
112
|
+
orangecontrib/subgroups/mrsd/inference.py
|
|
113
|
+
orangecontrib/subgroups/mrsd/mrsd_ensemble.py
|
|
114
|
+
orangecontrib/subgroups/mrsd/mrsd_mi.py
|
|
115
|
+
orangecontrib/subgroups/mrsd/mrsd_mv.py
|
|
116
|
+
orangecontrib/subgroups/mrsd/mrsd_rules.py
|
|
117
|
+
orangecontrib/subgroups/mrsd/mrsdc2_ranking.py
|
|
118
|
+
orangecontrib/subgroups/mrsd/mrsdc2_semisupervised.py
|
|
119
|
+
orangecontrib/subgroups/mrsd/mrsdc2_swapping.py
|
|
120
|
+
orangecontrib/subgroups/mrsd/mrsdcca.py
|
|
121
|
+
orangecontrib/subgroups/mrsd/mrsdemm.py
|
|
122
|
+
orangecontrib/subgroups/mrsd/mrsdhc.py
|
|
123
|
+
orangecontrib/subgroups/mrsd/mrsdpt.py
|
|
124
|
+
orangecontrib/subgroups/mrsd/rules.py
|
|
125
|
+
orangecontrib/subgroups/mrsd/subgroups.py
|
|
126
|
+
orangecontrib/subgroups/mrsd/synthetic.py
|
|
127
|
+
orangecontrib/subgroups/widgets/__init__.py
|
|
128
|
+
orangecontrib/subgroups/widgets/inspectors.py
|
|
129
|
+
orangecontrib/subgroups/widgets/owbase.py
|
|
130
|
+
orangecontrib/subgroups/widgets/owloadsubgroups.py
|
|
131
|
+
orangecontrib/subgroups/widgets/owmrsd_c2.py
|
|
132
|
+
orangecontrib/subgroups/widgets/owmrsd_cca.py
|
|
133
|
+
orangecontrib/subgroups/widgets/owmrsd_emm.py
|
|
134
|
+
orangecontrib/subgroups/widgets/owmrsd_ensemble.py
|
|
135
|
+
orangecontrib/subgroups/widgets/owmrsd_hc.py
|
|
136
|
+
orangecontrib/subgroups/widgets/owmrsd_mi.py
|
|
137
|
+
orangecontrib/subgroups/widgets/owmrsd_mv.py
|
|
138
|
+
orangecontrib/subgroups/widgets/owmrsd_pt.py
|
|
139
|
+
orangecontrib/subgroups/widgets/owmrsd_ranking.py
|
|
140
|
+
orangecontrib/subgroups/widgets/owmrsd_rules.py
|
|
141
|
+
orangecontrib/subgroups/widgets/owmrsd_semisupervised.py
|
|
142
|
+
orangecontrib/subgroups/widgets/owmrsd_swapping.py
|
|
143
|
+
orangecontrib/subgroups/widgets/owsavesubgroups.py
|
|
144
|
+
orangecontrib/subgroups/widgets/owsubgroupbrowser.py
|
|
145
|
+
orangecontrib/subgroups/widgets/owsubgroupclassifier.py
|
|
146
|
+
orangecontrib/subgroups/widgets/owsubgroupconsolidation.py
|
|
147
|
+
orangecontrib/subgroups/widgets/owsubgroupdatasets.py
|
|
148
|
+
orangecontrib/subgroups/widgets/owsubgroupoverlap.py
|
|
149
|
+
orangecontrib/subgroups/widgets/owsubgroupprofile.py
|
|
150
|
+
orangecontrib/subgroups/widgets/owvariableroles.py
|
|
151
|
+
orangecontrib/subgroups/widgets/utils.py
|
|
152
|
+
orangecontrib/subgroups/widgets/icons/browser.svg
|
|
153
|
+
orangecontrib/subgroups/widgets/icons/c2.svg
|
|
154
|
+
orangecontrib/subgroups/widgets/icons/category.svg
|
|
155
|
+
orangecontrib/subgroups/widgets/icons/cca.svg
|
|
156
|
+
orangecontrib/subgroups/widgets/icons/classifier.svg
|
|
157
|
+
orangecontrib/subgroups/widgets/icons/consolidation.svg
|
|
158
|
+
orangecontrib/subgroups/widgets/icons/datasets.svg
|
|
159
|
+
orangecontrib/subgroups/widgets/icons/emm.svg
|
|
160
|
+
orangecontrib/subgroups/widgets/icons/ensemble.svg
|
|
161
|
+
orangecontrib/subgroups/widgets/icons/hc.svg
|
|
162
|
+
orangecontrib/subgroups/widgets/icons/load.svg
|
|
163
|
+
orangecontrib/subgroups/widgets/icons/mi.svg
|
|
164
|
+
orangecontrib/subgroups/widgets/icons/mv.svg
|
|
165
|
+
orangecontrib/subgroups/widgets/icons/overlap.svg
|
|
166
|
+
orangecontrib/subgroups/widgets/icons/profile.svg
|
|
167
|
+
orangecontrib/subgroups/widgets/icons/pt.svg
|
|
168
|
+
orangecontrib/subgroups/widgets/icons/ranking.svg
|
|
169
|
+
orangecontrib/subgroups/widgets/icons/roles.svg
|
|
170
|
+
orangecontrib/subgroups/widgets/icons/rules.svg
|
|
171
|
+
orangecontrib/subgroups/widgets/icons/save.svg
|
|
172
|
+
orangecontrib/subgroups/widgets/icons/semisupervised.svg
|
|
173
|
+
orangecontrib/subgroups/widgets/icons/swapping.svg
|
|
174
|
+
tests/__init__.py
|
|
175
|
+
tests/conftest.py
|
|
176
|
+
tests/test_backend.py
|
|
177
|
+
tests/test_params.py
|
|
178
|
+
tests/test_widgets.py
|
|
179
|
+
tools/make_datasets.py
|
|
180
|
+
tools/make_docs.py
|
|
181
|
+
tools/make_screenshots.py
|
|
182
|
+
tools/sync_mrsd.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Orange3-MRSD
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Orange add-on for discovering subgroups in data with several dependent variables (MRSD).
|
|
5
|
+
Home-page: https://github.com/lan-umek/orange3-mrsd
|
|
6
|
+
Author: Lan Umek
|
|
7
|
+
License: MIT
|
|
8
|
+
Keywords: orange3 add-on,subgroup discovery,multiple responses,MRSD,exceptional model mining
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
13
|
+
Requires-Python: >=3.9
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Requires-Dist: Orange3>=3.34
|
|
17
|
+
Requires-Dist: numpy>=1.23
|
|
18
|
+
Requires-Dist: pandas>=1.5
|
|
19
|
+
Requires-Dist: scipy>=1.9
|
|
20
|
+
Requires-Dist: scikit-learn>=1.2
|
|
21
|
+
Requires-Dist: pyqtgraph
|
|
22
|
+
Provides-Extra: excel
|
|
23
|
+
Requires-Dist: openpyxl; extra == "excel"
|
|
24
|
+
Provides-Extra: test
|
|
25
|
+
Requires-Dist: pytest; extra == "test"
|
|
26
|
+
Dynamic: author
|
|
27
|
+
Dynamic: classifier
|
|
28
|
+
Dynamic: description
|
|
29
|
+
Dynamic: description-content-type
|
|
30
|
+
Dynamic: home-page
|
|
31
|
+
Dynamic: keywords
|
|
32
|
+
Dynamic: license
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
Dynamic: provides-extra
|
|
35
|
+
Dynamic: requires-dist
|
|
36
|
+
Dynamic: requires-python
|
|
37
|
+
Dynamic: summary
|
|
38
|
+
|
|
39
|
+
# Orange3-MRSD
|
|
40
|
+
|
|
41
|
+
An [Orange](https://orangedatamining.com) add-on for **Multiple Responses
|
|
42
|
+
Subgroup Discovery (MRSD)**: finding groups of instances, described by the
|
|
43
|
+
independent variables **X**, in which several dependent variables **Y** – or
|
|
44
|
+
their relation to X – behave differently from the rest of the data.
|
|
45
|
+
|
|
46
|
+
The add-on wraps the MRSD Python package (vendored in
|
|
47
|
+
`orangecontrib/subgroups/mrsd`) and adds widgets for setting variable roles,
|
|
48
|
+
running the algorithms, inspecting, combining, visualising and saving the
|
|
49
|
+
subgroups.
|
|
50
|
+
|
|
51
|
+
## Widgets (category *Subgroups*)
|
|
52
|
+
|
|
53
|
+
| | |
|
|
54
|
+
|---|---|
|
|
55
|
+
| **Data** | Subgroup Datasets, Variable Roles |
|
|
56
|
+
| **Algorithms** | MRSD-PT (partitioning and tables), MRSD-HC (hierarchical clustering and classification), MRSD-C2 (classification in both spaces: swapping, semi-supervised, ranking), MRSD-CCA, MRSD-EMM, MRSD-MV (multi-view), MRSD-MI, MRSD-Rules, MRSD-Ensemble |
|
|
57
|
+
| **Results** | Subgroup Browser, Subgroup Consolidation, Subgroup Classifier, Subgroup Profile, Subgroup Overlap, Save Subgroups, Load Subgroups |
|
|
58
|
+
|
|
59
|
+
Every algorithm widget shows the subgroups with their rule in X and prototype
|
|
60
|
+
in Y, has algorithm-specific views of the selected subgroup (contingency
|
|
61
|
+
table, dendrograms, classifiers, correlations …), accepts Orange learners and
|
|
62
|
+
sends the selected subgroup's rows, membership data and membership model on
|
|
63
|
+
to other Orange widgets.
|
|
64
|
+
|
|
65
|
+
Documentation: [doc/index.md](doc/index.md) – start with
|
|
66
|
+
[Getting started](doc/getting-started.md).
|
|
67
|
+
|
|
68
|
+
## Installation
|
|
69
|
+
|
|
70
|
+
Orange 3.34 or newer is required.
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
pip install Orange3-MRSD # into the environment that runs Orange
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
or from a clone: `pip install -e .`. Excel export additionally needs
|
|
77
|
+
`openpyxl`.
|
|
78
|
+
|
|
79
|
+
## Development
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
python -m pytest tests -q # backend tests run without Orange; widget tests need Orange and QT_QPA_PLATFORM=offscreen
|
|
83
|
+
python tools/make_docs.py # regenerate doc/ (parameter tables come from params.py)
|
|
84
|
+
python tools/make_datasets.py # regenerate the bundled datasets
|
|
85
|
+
python tools/sync_mrsd.py # copy the MRSD package from ../subgroups into orangecontrib/subgroups/mrsd
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
* The widgets build their parameter GUI from `orangecontrib/subgroups/params.py`;
|
|
89
|
+
`tests/test_params.py` fails if a field of an algorithm's `Config` dataclass is
|
|
90
|
+
not covered or a parameter name clashes with a widget attribute.
|
|
91
|
+
* Orange caches the widget descriptions of an add-on and refreshes them only
|
|
92
|
+
when `orangecontrib/subgroups/widgets/__init__.py` changes: after changing a
|
|
93
|
+
widget's inputs, outputs or metadata bump `WIDGET_REGISTRY_STAMP` there.
|
|
94
|
+
|
|
95
|
+
## Status
|
|
96
|
+
|
|
97
|
+
The algorithms and the non-GUI part of the add-on are covered by tests. Most widgets have been tried interactively on Orange 3.40 (Windows); some of
|
|
98
|
+
the newer views (e.g. the dendrograms of MRSD-MV, cell selection in Subgroup
|
|
99
|
+
Overlap) and other Orange versions and platforms have not been checked yet.
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
MIT – see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Orange3-MRSD
|
|
2
|
+
|
|
3
|
+
An [Orange](https://orangedatamining.com) add-on for **Multiple Responses
|
|
4
|
+
Subgroup Discovery (MRSD)**: finding groups of instances, described by the
|
|
5
|
+
independent variables **X**, in which several dependent variables **Y** – or
|
|
6
|
+
their relation to X – behave differently from the rest of the data.
|
|
7
|
+
|
|
8
|
+
The add-on wraps the MRSD Python package (vendored in
|
|
9
|
+
`orangecontrib/subgroups/mrsd`) and adds widgets for setting variable roles,
|
|
10
|
+
running the algorithms, inspecting, combining, visualising and saving the
|
|
11
|
+
subgroups.
|
|
12
|
+
|
|
13
|
+
## Widgets (category *Subgroups*)
|
|
14
|
+
|
|
15
|
+
| | |
|
|
16
|
+
|---|---|
|
|
17
|
+
| **Data** | Subgroup Datasets, Variable Roles |
|
|
18
|
+
| **Algorithms** | MRSD-PT (partitioning and tables), MRSD-HC (hierarchical clustering and classification), MRSD-C2 (classification in both spaces: swapping, semi-supervised, ranking), MRSD-CCA, MRSD-EMM, MRSD-MV (multi-view), MRSD-MI, MRSD-Rules, MRSD-Ensemble |
|
|
19
|
+
| **Results** | Subgroup Browser, Subgroup Consolidation, Subgroup Classifier, Subgroup Profile, Subgroup Overlap, Save Subgroups, Load Subgroups |
|
|
20
|
+
|
|
21
|
+
Every algorithm widget shows the subgroups with their rule in X and prototype
|
|
22
|
+
in Y, has algorithm-specific views of the selected subgroup (contingency
|
|
23
|
+
table, dendrograms, classifiers, correlations …), accepts Orange learners and
|
|
24
|
+
sends the selected subgroup's rows, membership data and membership model on
|
|
25
|
+
to other Orange widgets.
|
|
26
|
+
|
|
27
|
+
Documentation: [doc/index.md](doc/index.md) – start with
|
|
28
|
+
[Getting started](doc/getting-started.md).
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
Orange 3.34 or newer is required.
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
pip install Orange3-MRSD # into the environment that runs Orange
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
or from a clone: `pip install -e .`. Excel export additionally needs
|
|
39
|
+
`openpyxl`.
|
|
40
|
+
|
|
41
|
+
## Development
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
python -m pytest tests -q # backend tests run without Orange; widget tests need Orange and QT_QPA_PLATFORM=offscreen
|
|
45
|
+
python tools/make_docs.py # regenerate doc/ (parameter tables come from params.py)
|
|
46
|
+
python tools/make_datasets.py # regenerate the bundled datasets
|
|
47
|
+
python tools/sync_mrsd.py # copy the MRSD package from ../subgroups into orangecontrib/subgroups/mrsd
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
* The widgets build their parameter GUI from `orangecontrib/subgroups/params.py`;
|
|
51
|
+
`tests/test_params.py` fails if a field of an algorithm's `Config` dataclass is
|
|
52
|
+
not covered or a parameter name clashes with a widget attribute.
|
|
53
|
+
* Orange caches the widget descriptions of an add-on and refreshes them only
|
|
54
|
+
when `orangecontrib/subgroups/widgets/__init__.py` changes: after changing a
|
|
55
|
+
widget's inputs, outputs or metadata bump `WIDGET_REGISTRY_STAMP` there.
|
|
56
|
+
|
|
57
|
+
## Status
|
|
58
|
+
|
|
59
|
+
The algorithms and the non-GUI part of the add-on are covered by tests. Most widgets have been tried interactively on Orange 3.40 (Windows); some of
|
|
60
|
+
the newer views (e.g. the dendrograms of MRSD-MV, cell selection in Subgroup
|
|
61
|
+
Overlap) and other Orange versions and platforms have not been checked yet.
|
|
62
|
+
|
|
63
|
+
## License
|
|
64
|
+
|
|
65
|
+
MIT – see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Concepts, measures and inference
|
|
2
|
+
|
|
3
|
+
## The task
|
|
4
|
+
|
|
5
|
+
The data has independent (descriptive) variables **X** and several dependent
|
|
6
|
+
variables (responses) **Y**, numeric or categorical. A **subgroup** is a set
|
|
7
|
+
of instances that is (a) describable in X and (b) interesting in Y: the
|
|
8
|
+
dependent variables, or their relation to X, behave differently inside the
|
|
9
|
+
subgroup than in the rest of the data. This is **Multiple Responses Subgroup
|
|
10
|
+
Discovery (MRSD)**.
|
|
11
|
+
|
|
12
|
+
## What the algorithms look for
|
|
13
|
+
|
|
14
|
+
| algorithm | name | a subgroup is … |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| MRSD-PT | partitioning and tables | a cell of a contingency table of a partition of X against a partition of Y that holds more instances than expected |
|
|
17
|
+
| MRSD-HC | hierarchical clustering and classification | a cluster of Y that a classifier recognises from X |
|
|
18
|
+
| MRSD-C2 | classification in both spaces | a set whose membership is predictable from X and from Y |
|
|
19
|
+
| MRSD-Rules | rules (CN2-SD) | a rule in X with a shifted distribution of Y |
|
|
20
|
+
| MRSD-MV | multi-view | a group coherent in both views X and Y |
|
|
21
|
+
| MRSD-EMM | exceptional model mining | a rule in X under which the X–Y model differs |
|
|
22
|
+
| MRSD-CCA | canonical correlation | a cluster with a different canonical correlation |
|
|
23
|
+
| MRSD-MI | mutual information | a rule in X under which X and Y are more dependent |
|
|
24
|
+
| MRSD-Ensemble | consensus | a group supported by several of the above |
|
|
25
|
+
|
|
26
|
+
The first five look for a different *distribution* of Y; EMM, CCA and MI look
|
|
27
|
+
for a different *relation* between X and Y. A subgroup of the second kind
|
|
28
|
+
need not differ in the means of Y at all.
|
|
29
|
+
|
|
30
|
+
## Description of a subgroup
|
|
31
|
+
|
|
32
|
+
* **Rule / description (X)** – for rule-based algorithms the rule that defines
|
|
33
|
+
the subgroup; for the others a decision-tree approximation, with its
|
|
34
|
+
precision and recall with respect to the subgroup in the *Measures* tab.
|
|
35
|
+
* **Prototype (Y)** – the means of the numeric and the modal levels (with
|
|
36
|
+
their shares) of the categorical dependent variables in the subgroup.
|
|
37
|
+
* **Classifier** – any Orange learner can describe the membership instead of
|
|
38
|
+
a rule (*Learner* input, *Model* outputs).
|
|
39
|
+
|
|
40
|
+
## Quality
|
|
41
|
+
|
|
42
|
+
Each algorithm has its own quality score, comparable only within that
|
|
43
|
+
algorithm: an AUC for HC and C2, test-statistic-like scores for PT, Rules,
|
|
44
|
+
EMM, CCA, MI, bounded mixtures for MV. To compare subgroups of different
|
|
45
|
+
algorithms use the **common measures** of *Subgroup Consolidation* (Y
|
|
46
|
+
distinctness, X describability, relation exceptionality), which are computed
|
|
47
|
+
from the rows of a subgroup in the same way for all algorithms.
|
|
48
|
+
|
|
49
|
+
## Inference
|
|
50
|
+
|
|
51
|
+
The null hypothesis is that X and Y are independent. Rows of the view that
|
|
52
|
+
was not used to define the candidates are permuted. When candidates are
|
|
53
|
+
defined from both views, a test of a fixed row set is anti-conservative, so
|
|
54
|
+
the whole search is re-run on permuted data. Reported are the raw p-value,
|
|
55
|
+
the family-wise adjusted p-value (covering every candidate the search
|
|
56
|
+
examined) and the Benjamini–Hochberg value.
|
|
57
|
+
|
|
58
|
+
Permutation inference is optional and off by default except in MRSD-PT.
|
|
59
|
+
|
|
60
|
+
## What the numbers do not tell
|
|
61
|
+
|
|
62
|
+
All measures, including cross-validated AUCs and the tests in the *Prototype*
|
|
63
|
+
tab, are computed on the data in which the subgroup was found. They compare
|
|
64
|
+
subgroups and guard against some chance findings, but they do not estimate
|
|
65
|
+
how well a subgroup would replicate in new data. For that, set data aside
|
|
66
|
+
before the analysis and examine the found rules or membership models on it.
|
|
67
|
+
|
|
68
|
+
## Redundancy
|
|
69
|
+
|
|
70
|
+
Algorithms return many overlapping subgroups. Within an algorithm they are
|
|
71
|
+
pruned by Jaccard similarity (*Redundancy threshold*). Across algorithms
|
|
72
|
+
*Subgroup Consolidation* applies the cleaning procedure: take the best
|
|
73
|
+
subgroup by a quality q, remove all subgroups at least s_min similar to it,
|
|
74
|
+
repeat.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Getting started
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
The add-on needs Orange 3.34 or newer. Install it into the Python
|
|
6
|
+
environment that runs Orange:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
pip install Orange3-MRSD
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
or, from a clone of the repository, `pip install -e .`. With the standalone
|
|
13
|
+
Orange installer on Windows use Orange's own Python, e.g.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
"%LOCALAPPDATA%\Programs\Orange\python.exe" -m pip install Orange3-MRSD
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Restart Orange; the widgets are in the category **Subgroups**. Excel export
|
|
20
|
+
needs `openpyxl`.
|
|
21
|
+
|
|
22
|
+
## A first workflow
|
|
23
|
+
|
|
24
|
+
1. **Subgroup Datasets** → choose *Planted rule*. The data has three
|
|
25
|
+
independent variables (age, edu, inc) and two dependent variables (y1, y2);
|
|
26
|
+
in the subgroup `edu = high AND age ≥ 50` both dependent variables are
|
|
27
|
+
shifted.
|
|
28
|
+
2. Connect it to **MRSD-Rules** and press *Run*. The first rule in the table
|
|
29
|
+
should be close to the planted one. Select a row and look at the tabs
|
|
30
|
+
*Rule*, *Prototype* and *Measures*.
|
|
31
|
+
3. Connect the *Subgroups* output to **Subgroup Browser** to filter, rename
|
|
32
|
+
and select subgroups, and its *Annotated Data* output to Orange's *Scatter
|
|
33
|
+
Plot*; colour the points by a subgroup column and compare with the meta
|
|
34
|
+
column `planted`.
|
|
35
|
+
|
|
36
|
+
## Your own data
|
|
37
|
+
|
|
38
|
+
The algorithm widgets take the **independent variables X from the attributes**
|
|
39
|
+
and the **dependent variables Y from the class variables** of the data;
|
|
40
|
+
meta attributes are ignored. Set the roles with **Variable Roles** (or
|
|
41
|
+
Orange's *Select Columns*). In a `.tab` file several columns can be flagged
|
|
42
|
+
`class`, and then *File* sets the roles by itself.
|
|
43
|
+
|
|
44
|
+
## Combining algorithms
|
|
45
|
+
|
|
46
|
+
Connect several algorithm widgets to **Subgroup Consolidation**. It computes
|
|
47
|
+
measures that are comparable across algorithms and removes near-duplicates;
|
|
48
|
+
its output goes to the Browser, Profile, Overlap and Save widgets.
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
Data ─► MRSD-Rules ─┐
|
|
52
|
+
├► MRSD-HC ──┼─► Subgroup Consolidation ─► Subgroup Browser ─► Subgroup Profile / Overlap / Save
|
|
53
|
+
└► MRSD-PT ──┘
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Describing a subgroup with a model
|
|
57
|
+
|
|
58
|
+
Connect an Orange learner (Tree, Naive Bayes, Logistic Regression) to the
|
|
59
|
+
*Learner* input of an algorithm widget. For the selected subgroup the widget
|
|
60
|
+
then sends the fitted membership model: connect *Model (X)* to *Tree Viewer*
|
|
61
|
+
or to *Nomogram* (Nomogram shows Naive Bayes and logistic regression models;
|
|
62
|
+
add *Membership Data (X)* → *Data* to see individual instances).
|
|
63
|
+
|
|
64
|
+
## Speed
|
|
65
|
+
|
|
66
|
+
* Permutation tests are off by default except in MRSD-PT. Search-level
|
|
67
|
+
permutations repeat the whole search; start with a small number.
|
|
68
|
+
* Classification-based methods (HC, C2, MV, CCA) are fast with a decision
|
|
69
|
+
tree and slow with a random forest or SVM.
|
|
70
|
+
* A widget placed before an update keeps its saved settings; new defaults
|
|
71
|
+
apply to newly placed widgets.
|
|
72
|
+
|
|
73
|
+
## Troubleshooting
|
|
74
|
+
|
|
75
|
+
Start Orange from a terminal (`python -m Orange.canvas`); the add-on writes
|
|
76
|
+
its progress and any error there in lines beginning with `[MRSD`. If a widget
|
|
77
|
+
lacks inputs or outputs described here, Orange is using a cached description
|
|
78
|
+
of the add-on: close Orange, delete the files `*.pck` in Orange's cache folder
|
|
79
|
+
(`%LOCALAPPDATA%\Orange\cache\<version>` on Windows) and start it again.
|