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.
Files changed (184) hide show
  1. orange3_mrsd-0.1.0/LICENSE +21 -0
  2. orange3_mrsd-0.1.0/MANIFEST.in +8 -0
  3. orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/PKG-INFO +103 -0
  4. orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/SOURCES.txt +182 -0
  5. orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/dependency_links.txt +1 -0
  6. orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/entry_points.txt +8 -0
  7. orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/not-zip-safe +1 -0
  8. orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/requires.txt +12 -0
  9. orange3_mrsd-0.1.0/Orange3_MRSD.egg-info/top_level.txt +2 -0
  10. orange3_mrsd-0.1.0/PKG-INFO +103 -0
  11. orange3_mrsd-0.1.0/README.md +65 -0
  12. orange3_mrsd-0.1.0/doc/concepts.md +74 -0
  13. orange3_mrsd-0.1.0/doc/getting-started.md +79 -0
  14. orange3_mrsd-0.1.0/doc/index.md +36 -0
  15. orange3_mrsd-0.1.0/doc/widgets/images/load-subgroups.png +0 -0
  16. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2-classifier.png +0 -0
  17. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2-measures.png +0 -0
  18. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2-prototype.png +0 -0
  19. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-c2.png +0 -0
  20. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-canonical-space.png +0 -0
  21. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-classifier.png +0 -0
  22. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-measures.png +0 -0
  23. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca-prototype.png +0 -0
  24. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-cca.png +0 -0
  25. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm-correlations.png +0 -0
  26. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm-measures.png +0 -0
  27. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm-prototype.png +0 -0
  28. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-emm.png +0 -0
  29. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble-consensus.png +0 -0
  30. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble-measures.png +0 -0
  31. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble-prototype.png +0 -0
  32. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-ensemble.png +0 -0
  33. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-classifier.png +0 -0
  34. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-dendrogram.png +0 -0
  35. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-measures.png +0 -0
  36. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc-prototype.png +0 -0
  37. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-hc.png +0 -0
  38. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi-measures.png +0 -0
  39. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi-mutual-information.png +0 -0
  40. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi-prototype.png +0 -0
  41. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mi.png +0 -0
  42. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-classifier.png +0 -0
  43. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-dendrograms.png +0 -0
  44. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-measures.png +0 -0
  45. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv-prototype.png +0 -0
  46. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-mv.png +0 -0
  47. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt-contingency-table.png +0 -0
  48. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt-measures.png +0 -0
  49. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt-prototype.png +0 -0
  50. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-pt.png +0 -0
  51. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules-measures.png +0 -0
  52. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules-prototype.png +0 -0
  53. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules-rule.png +0 -0
  54. orange3_mrsd-0.1.0/doc/widgets/images/mrsd-rules.png +0 -0
  55. orange3_mrsd-0.1.0/doc/widgets/images/save-subgroups.png +0 -0
  56. orange3_mrsd-0.1.0/doc/widgets/images/subgroup-browser.png +0 -0
  57. orange3_mrsd-0.1.0/doc/widgets/images/subgroup-classifier.png +0 -0
  58. orange3_mrsd-0.1.0/doc/widgets/images/subgroup-consolidation.png +0 -0
  59. orange3_mrsd-0.1.0/doc/widgets/images/subgroup-datasets.png +0 -0
  60. orange3_mrsd-0.1.0/doc/widgets/images/subgroup-overlap.png +0 -0
  61. orange3_mrsd-0.1.0/doc/widgets/images/subgroup-profile.png +0 -0
  62. orange3_mrsd-0.1.0/doc/widgets/images/variable-roles.png +0 -0
  63. orange3_mrsd-0.1.0/doc/widgets/load-subgroups.md +10 -0
  64. orange3_mrsd-0.1.0/doc/widgets/mrsd-c2.md +145 -0
  65. orange3_mrsd-0.1.0/doc/widgets/mrsd-cca.md +125 -0
  66. orange3_mrsd-0.1.0/doc/widgets/mrsd-emm.md +115 -0
  67. orange3_mrsd-0.1.0/doc/widgets/mrsd-ensemble.md +118 -0
  68. orange3_mrsd-0.1.0/doc/widgets/mrsd-hc.md +125 -0
  69. orange3_mrsd-0.1.0/doc/widgets/mrsd-mi.md +116 -0
  70. orange3_mrsd-0.1.0/doc/widgets/mrsd-mv.md +154 -0
  71. orange3_mrsd-0.1.0/doc/widgets/mrsd-pt.md +118 -0
  72. orange3_mrsd-0.1.0/doc/widgets/mrsd-rules.md +113 -0
  73. orange3_mrsd-0.1.0/doc/widgets/save-subgroups.md +12 -0
  74. orange3_mrsd-0.1.0/doc/widgets/subgroup-browser.md +19 -0
  75. orange3_mrsd-0.1.0/doc/widgets/subgroup-classifier.md +15 -0
  76. orange3_mrsd-0.1.0/doc/widgets/subgroup-consolidation.md +43 -0
  77. orange3_mrsd-0.1.0/doc/widgets/subgroup-datasets.md +23 -0
  78. orange3_mrsd-0.1.0/doc/widgets/subgroup-overlap.md +12 -0
  79. orange3_mrsd-0.1.0/doc/widgets/subgroup-profile.md +11 -0
  80. orange3_mrsd-0.1.0/doc/widgets/variable-roles.md +13 -0
  81. orange3_mrsd-0.1.0/orangecontrib/__init__.py +2 -0
  82. orange3_mrsd-0.1.0/orangecontrib/subgroups/__init__.py +2 -0
  83. orange3_mrsd-0.1.0/orangecontrib/subgroups/backend.py +807 -0
  84. orange3_mrsd-0.1.0/orangecontrib/subgroups/common_measures.py +117 -0
  85. orange3_mrsd-0.1.0/orangecontrib/subgroups/consensus.py +281 -0
  86. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/__init__.py +53 -0
  87. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/clinical.csv +351 -0
  88. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/clinical.tab +353 -0
  89. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/customers.csv +601 -0
  90. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/customers.tab +603 -0
  91. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_rule.csv +301 -0
  92. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_rule.tab +303 -0
  93. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_shift.csv +301 -0
  94. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/planted_shift.tab +303 -0
  95. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/pure_noise.csv +301 -0
  96. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/pure_noise.tab +303 -0
  97. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/students.csv +401 -0
  98. orange3_mrsd-0.1.0/orangecontrib/subgroups/datasets/students.tab +403 -0
  99. orange3_mrsd-0.1.0/orangecontrib/subgroups/export.py +89 -0
  100. orange3_mrsd-0.1.0/orangecontrib/subgroups/inspection.py +805 -0
  101. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/DEV_NOTES.md +38 -0
  102. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/README.md +107 -0
  103. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/__init__.py +119 -0
  104. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/classifiers.py +228 -0
  105. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/clustering.py +523 -0
  106. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/common.py +283 -0
  107. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/core.py +708 -0
  108. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/data_loader.py +320 -0
  109. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/divergence.py +677 -0
  110. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/inference.py +339 -0
  111. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_ensemble.py +822 -0
  112. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_mi.py +578 -0
  113. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_mv.py +829 -0
  114. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsd_rules.py +633 -0
  115. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdc2_ranking.py +428 -0
  116. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdc2_semisupervised.py +323 -0
  117. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdc2_swapping.py +500 -0
  118. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdcca.py +422 -0
  119. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdemm.py +649 -0
  120. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdhc.py +522 -0
  121. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/mrsdpt.py +535 -0
  122. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/rules.py +457 -0
  123. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/subgroups.py +3 -0
  124. orange3_mrsd-0.1.0/orangecontrib/subgroups/mrsd/synthetic.py +47 -0
  125. orange3_mrsd-0.1.0/orangecontrib/subgroups/params.py +622 -0
  126. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/__init__.py +27 -0
  127. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/browser.svg +4 -0
  128. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/c2.svg +7 -0
  129. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/category.svg +10 -0
  130. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/cca.svg +7 -0
  131. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/classifier.svg +4 -0
  132. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/consolidation.svg +4 -0
  133. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/datasets.svg +4 -0
  134. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/emm.svg +7 -0
  135. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/ensemble.svg +7 -0
  136. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/hc.svg +7 -0
  137. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/load.svg +4 -0
  138. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/mi.svg +7 -0
  139. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/mv.svg +7 -0
  140. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/overlap.svg +4 -0
  141. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/profile.svg +4 -0
  142. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/pt.svg +7 -0
  143. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/ranking.svg +7 -0
  144. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/roles.svg +4 -0
  145. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/rules.svg +7 -0
  146. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/save.svg +4 -0
  147. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/semisupervised.svg +7 -0
  148. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/icons/swapping.svg +7 -0
  149. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/inspectors.py +1261 -0
  150. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owbase.py +901 -0
  151. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owloadsubgroups.py +127 -0
  152. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_c2.py +45 -0
  153. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_cca.py +20 -0
  154. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_emm.py +20 -0
  155. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_ensemble.py +20 -0
  156. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_hc.py +21 -0
  157. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_mi.py +20 -0
  158. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_mv.py +20 -0
  159. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_pt.py +20 -0
  160. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_ranking.py +1 -0
  161. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_rules.py +20 -0
  162. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_semisupervised.py +1 -0
  163. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owmrsd_swapping.py +1 -0
  164. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsavesubgroups.py +127 -0
  165. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupbrowser.py +521 -0
  166. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupclassifier.py +325 -0
  167. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupconsolidation.py +348 -0
  168. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupdatasets.py +106 -0
  169. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupoverlap.py +237 -0
  170. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owsubgroupprofile.py +222 -0
  171. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/owvariableroles.py +199 -0
  172. orange3_mrsd-0.1.0/orangecontrib/subgroups/widgets/utils.py +32 -0
  173. orange3_mrsd-0.1.0/orangecontrib/subgroups/worker.py +38 -0
  174. orange3_mrsd-0.1.0/setup.cfg +4 -0
  175. orange3_mrsd-0.1.0/setup.py +78 -0
  176. orange3_mrsd-0.1.0/tests/__init__.py +0 -0
  177. orange3_mrsd-0.1.0/tests/conftest.py +7 -0
  178. orange3_mrsd-0.1.0/tests/test_backend.py +239 -0
  179. orange3_mrsd-0.1.0/tests/test_params.py +65 -0
  180. orange3_mrsd-0.1.0/tests/test_widgets.py +82 -0
  181. orange3_mrsd-0.1.0/tools/make_datasets.py +177 -0
  182. orange3_mrsd-0.1.0/tools/make_docs.py +508 -0
  183. orange3_mrsd-0.1.0/tools/make_screenshots.py +223 -0
  184. 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,8 @@
1
+ [orange.data.io.search_paths]
2
+ subgroups = orangecontrib.subgroups.datasets
3
+
4
+ [orange.widgets]
5
+ Subgroups = orangecontrib.subgroups.widgets
6
+
7
+ [orange3.addon]
8
+ subgroups = orangecontrib.subgroups
@@ -0,0 +1,12 @@
1
+ Orange3>=3.34
2
+ numpy>=1.23
3
+ pandas>=1.5
4
+ scipy>=1.9
5
+ scikit-learn>=1.2
6
+ pyqtgraph
7
+
8
+ [excel]
9
+ openpyxl
10
+
11
+ [test]
12
+ pytest
@@ -0,0 +1,2 @@
1
+ orangecontrib
2
+ tests
@@ -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.