nkululeko 0.89.0__tar.gz → 0.89.2__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 (167) hide show
  1. {nkululeko-0.89.0 → nkululeko-0.89.2}/CHANGELOG.md +8 -0
  2. {nkululeko-0.89.0/nkululeko.egg-info → nkululeko-0.89.2}/PKG-INFO +9 -1
  3. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/constants.py +1 -1
  4. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/ensemble.py +13 -1
  5. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/explore.py +3 -1
  6. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_analyser.py +24 -7
  7. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/modelrunner.py +2 -2
  8. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/reporting/reporter.py +4 -3
  9. {nkululeko-0.89.0 → nkululeko-0.89.2/nkululeko.egg-info}/PKG-INFO +9 -1
  10. {nkululeko-0.89.0 → nkululeko-0.89.2}/LICENSE +0 -0
  11. {nkululeko-0.89.0 → nkululeko-0.89.2}/README.md +0 -0
  12. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/aesdd/process_database.py +0 -0
  13. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/androids/process_database.py +0 -0
  14. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/ased/process_database.py +0 -0
  15. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/asvp-esd/process_database.py +0 -0
  16. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/baved/process_database.py +0 -0
  17. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/cafe/process_database.py +0 -0
  18. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/clac/process_database.py +0 -0
  19. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/cmu-mosei/process_database.py +0 -0
  20. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/demos/process_database.py +0 -0
  21. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/ekorpus/process_database.py +0 -0
  22. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/emns/process_database.py +0 -0
  23. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/emofilm/convert_to_16k.py +0 -0
  24. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/emofilm/process_database.py +0 -0
  25. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/emorynlp/process_database.py +0 -0
  26. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/emov-db/process_database.py +0 -0
  27. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/emovo/process_database.py +0 -0
  28. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/emozionalmente/create.py +0 -0
  29. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/enterface/process_database.py +0 -0
  30. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/esd/process_database.py +0 -0
  31. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/gerparas/process_database.py +0 -0
  32. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/iemocap/process_database.py +0 -0
  33. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/jl/process_database.py +0 -0
  34. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/jtes/process_database.py +0 -0
  35. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/meld/process_database.py +0 -0
  36. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/mesd/process_database.py +0 -0
  37. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/mess/process_database.py +0 -0
  38. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/mlendsnd/process_database.py +0 -0
  39. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/msp-improv/process_database2.py +0 -0
  40. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/msp-podcast/process_database.py +0 -0
  41. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/oreau2/process_database.py +0 -0
  42. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/portuguese/process_database.py +0 -0
  43. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/ravdess/process_database.py +0 -0
  44. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/ravdess/process_database_speaker.py +0 -0
  45. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/savee/process_database.py +0 -0
  46. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/shemo/process_database.py +0 -0
  47. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/subesco/process_database.py +0 -0
  48. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/tess/process_database.py +0 -0
  49. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/thorsten-emotional/process_database.py +0 -0
  50. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/urdu/process_database.py +0 -0
  51. {nkululeko-0.89.0 → nkululeko-0.89.2}/data/vivae/process_database.py +0 -0
  52. {nkululeko-0.89.0 → nkululeko-0.89.2}/docs/source/conf.py +0 -0
  53. {nkululeko-0.89.0 → nkululeko-0.89.2}/meta/demos/demo_best_model.py +0 -0
  54. {nkululeko-0.89.0 → nkululeko-0.89.2}/meta/demos/my_experiment.py +0 -0
  55. {nkululeko-0.89.0 → nkululeko-0.89.2}/meta/demos/my_experiment_local.py +0 -0
  56. {nkululeko-0.89.0 → nkululeko-0.89.2}/meta/demos/plot_faster_anim.py +0 -0
  57. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/__init__.py +0 -0
  58. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/aug_train.py +0 -0
  59. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/augment.py +0 -0
  60. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/augmenting/__init__.py +0 -0
  61. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/augmenting/augmenter.py +0 -0
  62. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/augmenting/randomsplicer.py +0 -0
  63. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/augmenting/randomsplicing.py +0 -0
  64. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/augmenting/resampler.py +0 -0
  65. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/__init__.py +0 -0
  66. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_age.py +0 -0
  67. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_arousal.py +0 -0
  68. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_dominance.py +0 -0
  69. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_gender.py +0 -0
  70. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_mos.py +0 -0
  71. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_pesq.py +0 -0
  72. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_sdr.py +0 -0
  73. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_snr.py +0 -0
  74. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_stoi.py +0 -0
  75. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/ap_valence.py +0 -0
  76. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/autopredict/estimate_snr.py +0 -0
  77. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/cacheddataset.py +0 -0
  78. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/data/__init__.py +0 -0
  79. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/data/dataset.py +0 -0
  80. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/data/dataset_csv.py +0 -0
  81. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/demo.py +0 -0
  82. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/demo_feats.py +0 -0
  83. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/demo_predictor.py +0 -0
  84. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/experiment.py +0 -0
  85. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/export.py +0 -0
  86. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/__init__.py +0 -0
  87. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_agender.py +0 -0
  88. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_agender_agender.py +0 -0
  89. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_ast.py +0 -0
  90. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_auddim.py +0 -0
  91. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_audmodel.py +0 -0
  92. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_clap.py +0 -0
  93. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_hubert.py +0 -0
  94. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_import.py +0 -0
  95. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_mld.py +0 -0
  96. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_mos.py +0 -0
  97. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_opensmile.py +0 -0
  98. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_oxbow.py +0 -0
  99. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_praat.py +0 -0
  100. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_snr.py +0 -0
  101. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_spectra.py +0 -0
  102. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_spkrec.py +0 -0
  103. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_squim.py +0 -0
  104. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_trill.py +0 -0
  105. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_wav2vec2.py +0 -0
  106. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_wavlm.py +0 -0
  107. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feats_whisper.py +0 -0
  108. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/featureset.py +0 -0
  109. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feat_extract/feinberg_praat.py +0 -0
  110. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/feature_extractor.py +0 -0
  111. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/file_checker.py +0 -0
  112. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/filter_data.py +0 -0
  113. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/glob_conf.py +0 -0
  114. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/losses/__init__.py +0 -0
  115. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/losses/loss_ccc.py +0 -0
  116. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/losses/loss_softf1loss.py +0 -0
  117. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/__init__.py +0 -0
  118. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model.py +0 -0
  119. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_bayes.py +0 -0
  120. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_cnn.py +0 -0
  121. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_gmm.py +0 -0
  122. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_knn.py +0 -0
  123. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_knn_reg.py +0 -0
  124. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_lin_reg.py +0 -0
  125. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_mlp.py +0 -0
  126. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_mlp_regression.py +0 -0
  127. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_svm.py +0 -0
  128. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_svr.py +0 -0
  129. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_tree.py +0 -0
  130. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_tree_reg.py +0 -0
  131. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_tuned.py +0 -0
  132. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_xgb.py +0 -0
  133. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/models/model_xgr.py +0 -0
  134. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/multidb.py +0 -0
  135. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/nkuluflag.py +0 -0
  136. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/nkululeko.py +0 -0
  137. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/plots.py +0 -0
  138. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/predict.py +0 -0
  139. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/reporting/__init__.py +0 -0
  140. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/reporting/defines.py +0 -0
  141. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/reporting/latex_writer.py +0 -0
  142. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/reporting/report.py +0 -0
  143. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/reporting/report_item.py +0 -0
  144. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/reporting/result.py +0 -0
  145. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/resample.py +0 -0
  146. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/runmanager.py +0 -0
  147. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/scaler.py +0 -0
  148. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/segment.py +0 -0
  149. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/segmenting/__init__.py +0 -0
  150. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/segmenting/seg_inaspeechsegmenter.py +0 -0
  151. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/segmenting/seg_silero.py +0 -0
  152. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/syllable_nuclei.py +0 -0
  153. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/test.py +0 -0
  154. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/test_predictor.py +0 -0
  155. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/test_pretrain.py +0 -0
  156. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/utils/__init__.py +0 -0
  157. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/utils/files.py +0 -0
  158. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/utils/stats.py +0 -0
  159. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko/utils/util.py +0 -0
  160. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko.egg-info/SOURCES.txt +0 -0
  161. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko.egg-info/dependency_links.txt +0 -0
  162. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko.egg-info/requires.txt +0 -0
  163. {nkululeko-0.89.0 → nkululeko-0.89.2}/nkululeko.egg-info/top_level.txt +0 -0
  164. {nkululeko-0.89.0 → nkululeko-0.89.2}/pyproject.toml +0 -0
  165. {nkululeko-0.89.0 → nkululeko-0.89.2}/setup.cfg +0 -0
  166. {nkululeko-0.89.0 → nkululeko-0.89.2}/setup.py +0 -0
  167. {nkululeko-0.89.0 → nkululeko-0.89.2}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,14 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 0.89.2
5
+ --------------
6
+ * fix shap value calculation
7
+
8
+ Version 0.89.1
9
+ --------------
10
+ * print and save result of feature importance
11
+
4
12
  Version 0.89.0
5
13
  --------------
6
14
  * added Roc plots and classification report on Debug
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nkululeko
3
- Version: 0.89.0
3
+ Version: 0.89.2
4
4
  Summary: Machine learning audio prediction experiments based on templates
5
5
  Home-page: https://github.com/felixbur/nkululeko
6
6
  Author: Felix Burkhardt
@@ -356,6 +356,14 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
356
356
  Changelog
357
357
  =========
358
358
 
359
+ Version 0.89.2
360
+ --------------
361
+ * fix shap value calculation
362
+
363
+ Version 0.89.1
364
+ --------------
365
+ * print and save result of feature importance
366
+
359
367
  Version 0.89.0
360
368
  --------------
361
369
  * added Roc plots and classification report on Debug
@@ -1,2 +1,2 @@
1
- VERSION="0.89.0"
1
+ VERSION="0.89.2"
2
2
  SAMPLING_RATE = 16000
@@ -18,6 +18,7 @@ Raises:
18
18
  #!/usr/bin/env python
19
19
  # -*- coding: utf-8 -*-
20
20
 
21
+
21
22
  from typing import List
22
23
  import configparser
23
24
  import time
@@ -26,7 +27,16 @@ from pathlib import Path
26
27
 
27
28
  import numpy as np
28
29
  import pandas as pd
29
- from sklearn.metrics import balanced_accuracy_score
30
+ import matplotlib.pyplot as plt
31
+
32
+ from sklearn.metrics import(
33
+ RocCurveDisplay,
34
+ balanced_accuracy_score,
35
+ classification_report,
36
+ auc,
37
+ roc_auc_score,
38
+ roc_curve
39
+ )
30
40
 
31
41
  from nkululeko.constants import VERSION
32
42
  from nkululeko.experiment import Experiment
@@ -284,6 +294,8 @@ def ensemble_predictions(
284
294
  predicted = ensemble_preds["predicted"]
285
295
  uar = balanced_accuracy_score(truth, predicted)
286
296
  acc = (truth == predicted).mean()
297
+ # print classification report
298
+ Util("ensemble").debug(f"\n {classification_report(truth, predicted, digits=4)}")
287
299
  Util("ensemble").debug(f"{method}: UAR: {uar:.3f}, ACC: {acc:.3f}")
288
300
 
289
301
  return ensemble_preds
@@ -91,7 +91,9 @@ def main(src_dir):
91
91
  # these investigations need features to explore
92
92
  expr.extract_feats()
93
93
  needs_feats = True
94
- # explore
94
+ # explore
95
+ expr.init_runmanager()
96
+ expr.runmgr.do_runs()
95
97
  expr.analyse_features(needs_feats)
96
98
  expr.store_report()
97
99
  print("DONE")
@@ -50,19 +50,32 @@ class FeatureAnalyser:
50
50
 
51
51
  name = "my_shap_values"
52
52
  if not self.util.exist_pickle(name):
53
-
53
+ # get model name
54
+ model_name = self.util.get_model_type()
55
+ if hasattr(model, "predict_shap"):
56
+ model_func = model.predict_shap
57
+ elif hasattr(model, "clf"):
58
+ model_func = model.clf.predict
59
+ else:
60
+ raise Exception("Model not supported for SHAP analysis")
61
+
62
+ self.util.debug(f"using SHAP explainer for {model_name} model")
63
+
54
64
  explainer = shap.Explainer(
55
- model.predict_shap,
65
+ model_func,
56
66
  self.features,
57
67
  output_names=glob_conf.labels,
58
68
  algorithm="permutation",
59
69
  npermutations=5,
60
70
  )
71
+
61
72
  self.util.debug("computing SHAP values...")
62
73
  shap_values = explainer(self.features)
63
74
  self.util.to_pickle(shap_values, name)
64
75
  else:
65
76
  shap_values = self.util.from_pickle(name)
77
+ # plt.figure()
78
+ plt.close('all')
66
79
  plt.tight_layout()
67
80
  shap.plots.bar(shap_values)
68
81
  fig_dir = self.util.get_path("fig_dir") + "../" # one up because of the runs
@@ -71,7 +84,8 @@ class FeatureAnalyser:
71
84
  filename = f"_SHAP_{model.name}"
72
85
  filename = f"{fig_dir}{exp_name}{filename}.{format}"
73
86
  plt.savefig(filename)
74
- self.util.debug(f"plotted SHAP feature importance tp {filename}")
87
+ plt.close()
88
+ self.util.debug(f"plotted SHAP feature importance to {filename}")
75
89
 
76
90
  def analyse(self):
77
91
  models = ast.literal_eval(self.util.config_val("EXPL", "model", "['log_reg']"))
@@ -139,7 +153,7 @@ class FeatureAnalyser:
139
153
  elif model_s == "svm":
140
154
  from sklearn.svm import SVC
141
155
 
142
- c = float(self.util.config_val("MODEL", "C_val", "0.001"))
156
+ c = float(self.util.config_val("MODEL", "C_val", "1.0"))
143
157
  model = SVC(kernel="linear", C=c, gamma="scale")
144
158
  result_importances[model_s] = self._get_importance(
145
159
  model, permutation
@@ -205,7 +219,7 @@ class FeatureAnalyser:
205
219
  model, permutation
206
220
  )
207
221
  elif model_s == "xgr":
208
- from xgboost import XGBClassifier
222
+ from xgboost import XGBRegressor
209
223
 
210
224
  model = XGBRegressor()
211
225
  result_importances[model_s] = self._get_importance(
@@ -270,12 +284,14 @@ class FeatureAnalyser:
270
284
  )
271
285
  )
272
286
 
287
+ # print feature importance values to file and debug and save to result
288
+ self.util.debug(f"Importance features from {model_name}: features = \n{df_imp['feats'].values.tolist()}")
273
289
  # result file
274
290
  res_dir = self.util.get_path("res_dir")
275
291
  filename = f"_EXPL_{model_name}"
276
292
  if permutation:
277
293
  filename += "_perm"
278
- filename = f"{res_dir}{self.util.get_exp_name(only_data=True)}{filename}_{model_name}.txt"
294
+ filename = f"{res_dir}{self.util.get_exp_name(only_data=True)}{filename}_{max_feat_num}_fi.txt"
279
295
  with open(filename, "w") as text_file:
280
296
  text_file.write(
281
297
  "features in order of decreasing importance according to model"
@@ -283,7 +299,8 @@ class FeatureAnalyser:
283
299
  )
284
300
 
285
301
  df_imp.to_csv(filename, mode="a")
286
-
302
+ self.util.debug(f"Saved feature importance values to {filename}")
303
+
287
304
  # check if feature distributions should be plotted
288
305
  plot_feats = self.util.config_val("EXPL", "feature_distributions", False)
289
306
  if plot_feats:
@@ -53,8 +53,8 @@ class Modelrunner:
53
53
  # epochs are handled by Huggingface API
54
54
  self.model.train()
55
55
  report = self.model.predict()
56
- # todo: findout the best epoch, no need
57
- # since oad_best_model_at_end is given in training args
56
+ # todo: findout the best epoch -> no need
57
+ # since load_best_model_at_end is given in training args
58
58
  epoch = epoch_num
59
59
  report.set_id(self.run, epoch)
60
60
  plot_name = self.util.get_plot_name() + f"_{self.run}_{epoch:03d}_cnf"
@@ -402,7 +402,7 @@ class Reporter:
402
402
  )
403
403
  # print classifcation report in console
404
404
  self.util.debug(
405
- f"\n {classification_report(self.truths, self.preds, target_names=labels)}"
405
+ f"\n {classification_report(self.truths, self.preds, target_names=labels, digits=4)}"
406
406
  )
407
407
  except ValueError as e:
408
408
  self.util.debug(
@@ -422,16 +422,17 @@ class Reporter:
422
422
  if len(np.unique(self.truths)) == 2:
423
423
  fpr, tpr, _ = roc_curve(self.truths, self.preds)
424
424
  auc_score = auc(fpr, tpr)
425
+ plot_path = f"{fig_dir}{self.util.get_exp_name()}_{epoch}{self.filenameadd}_roc.{self.format}"
426
+ plt.figure()
425
427
  display = RocCurveDisplay(
426
428
  fpr=fpr,
427
429
  tpr=tpr,
428
430
  roc_auc=auc_score,
429
431
  estimator_name=f"{self.model_type} estimator",
430
432
  )
431
- # save plot
432
- plot_path = f"{fig_dir}{self.util.get_exp_name()}_{epoch}{self.filenameadd}_roc.{self.format}"
433
433
  display.plot(ax=None)
434
434
  plt.savefig(plot_path)
435
+ plt.close()
435
436
  self.util.debug(f"Saved ROC curve to {plot_path}")
436
437
  pauc_score = roc_auc_score(self.truths, self.preds, max_fpr=0.1)
437
438
  auc_pauc = f"auc: {auc_score:.3f}, pauc: {pauc_score:.3f} from epoch: {epoch}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nkululeko
3
- Version: 0.89.0
3
+ Version: 0.89.2
4
4
  Summary: Machine learning audio prediction experiments based on templates
5
5
  Home-page: https://github.com/felixbur/nkululeko
6
6
  Author: Felix Burkhardt
@@ -356,6 +356,14 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
356
356
  Changelog
357
357
  =========
358
358
 
359
+ Version 0.89.2
360
+ --------------
361
+ * fix shap value calculation
362
+
363
+ Version 0.89.1
364
+ --------------
365
+ * print and save result of feature importance
366
+
359
367
  Version 0.89.0
360
368
  --------------
361
369
  * added Roc plots and classification report on Debug
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes