Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
335 commits
Select commit Hold shift + click to select a range
d5a5957
Tweaked plot_distance_weight_map to add smallest_distance and largest…
kia-kn Oct 16, 2025
64bc90b
Changed tbd2linear and tbd2exponential weight functions to utilize SD
kia-kn Oct 17, 2025
8a27d97
Ensure float data type consistency with weights
kia-kn Oct 17, 2025
bdbfb07
Fixed tbd2linear and tbd2exponential weight function denominator
kia-kn Oct 17, 2025
5d6ba23
Update job_process_heatmap_unified to accomodate XOR and other datase…
kia-kn Oct 18, 2025
ea412a8
Fixed transAxes for XOR
kia-kn Oct 22, 2025
63a5c51
Made sure index stays in bounds when drawing horizontal divider lines…
kia-kn Oct 22, 2025
ac871e9
Temporary tweak to only include TBD2's in unified heatmap
kia-kn Oct 24, 2025
902b016
Restoring old RBA order
kia-kn Oct 24, 2025
8a698fe
Continuation of previous commit
kia-kn Oct 24, 2025
7c672b9
Further tbd2 test troublehshooting
kia-kn Oct 24, 2025
e94f76c
Limiting percentage calculations to just included RBA's
kia-kn Oct 24, 2025
758bab6
Revert compute_percentages to previous state. Add random_shuffle and …
kia-kn Oct 24, 2025
e6c0bc9
Added TBD2 variants - 3 SD versions
kia-kn Oct 29, 2025
89f0ab2
Created run_process_rba_rankings.py, job_process_rba_rankings.py, and…
kia-kn Oct 31, 2025
b8a97a0
Removing random shuffle from stats test consideration
kia-kn Oct 31, 2025
5460529
Making --include parameter in global_rba_rankings.py case insensitive
kia-kn Oct 31, 2025
fc1dd82
Converting global_rba_rankings.py to run/job structure for compatibil…
kia-kn Oct 31, 2025
5981391
Small tweak to subdirectory mapping
kia-kn Oct 31, 2025
5f935f3
Fixed default script to use in run_global_rba_rankings.py
kia-kn Oct 31, 2025
5c3892d
Creating summary tables per dataset subgroup (ex. mainEff, her=0.2, E…
kia-kn Nov 1, 2025
9f7d264
Created run/job scripts for wilcoxon rank-sum test (and permutation t…
kia-kn Nov 7, 2025
4cc9608
Changed multiple comparisons correction method to Benjamini-Hochberg
kia-kn Nov 8, 2025
62fddce
Created Normalized_Feature_Importance column within rankings_list.csv…
kia-kn Nov 12, 2025
8f56c02
Changing from ranksums to mannwhitneyu in scipy
kia-kn Nov 14, 2025
b2d2f70
Created Mu-Relief
kia-kn Dec 8, 2025
3c77646
Testing dist_weight plot for MuRelief
kia-kn Dec 8, 2025
d0b7711
Tweaking distance-weight plot logs for Mu-Relief
kia-kn Dec 8, 2025
840d4fc
Testing std_weight_log
kia-kn Dec 8, 2025
b1d3f57
fixing last commit
kia-kn Dec 8, 2025
ec997a2
Fixing repitition of std
kia-kn Dec 8, 2025
379b0c4
Added print statements to debug
kia-kn Dec 8, 2025
7467013
Fixed the large mean problem
kia-kn Dec 8, 2025
f7b85c3
Removed debugging prints
kia-kn Dec 8, 2025
33e1161
Re-added functionality for calculating mean per outcome group
kia-kn Dec 8, 2025
3863b97
Replaced TBD1 and TBD2 with MultiSWRF and MultiSWRFDB everywhere exce…
kia-kn Dec 10, 2025
3ea9d0e
Added MuRelief10 and MuRelief100 to unified heatmap viz
kia-kn Dec 12, 2025
f47a17c
Changed file name for unified heatmap to include MuRelief
kia-kn Dec 12, 2025
b1243ca
Editing default algorithms within run_rebate_analysis.py
kia-kn Dec 17, 2025
8692309
Updated job_process_heatmap_unified to be able to handle additional d…
kia-kn Dec 17, 2025
7a6a79c
Debugging job_process_heatmap_unified
kia-kn Dec 18, 2025
73628c9
Made regex search more robust
kia-kn Dec 18, 2025
68bc6eb
Updated SURF's init for it to be able to handle continuous endpoints;…
kia-kn Dec 24, 2025
3a4cf10
Ensuring run_rebate_analysis works for 9Class and 3Class datasets
kia-kn Dec 24, 2025
a54a0a9
Fixed job names so that sanity check datasets with the same filenames…
kia-kn Dec 29, 2025
8d4c7ce
Removing MutualInfo from 'Missing Data' (NA) heatmaps
kia-kn Dec 30, 2025
e6d782b
Readding mutual info
kia-kn Dec 30, 2025
d7d9745
Updating heatmaps to include MultiSWRFDB variants
kia-kn Dec 31, 2025
5cfd272
Removing mutual info for NA datasets heatmaps
kia-kn Dec 31, 2025
3b54ade
Readding mutual info
kia-kn Dec 31, 2025
6211e5d
Within job_rebate_analysis, creating a CSV to track runtime of algori…
kia-kn Dec 31, 2025
2772c9b
Adding print statements to analyze FI scores for non-deadband algs (e…
kia-kn Jan 2, 2026
df2b4e5
Print statements for MultiSURF, MultiSURF*, MultiSWRFDB
kia-kn Jan 2, 2026
ad70360
Commenting out debugging print statements to speed up other runs
kia-kn Jan 3, 2026
24cc3a7
Commenting out left over debugging print statements to speed up other…
kia-kn Jan 3, 2026
ba24df5
Updating RBAs included in heatmap for 100 feature dataset
kia-kn Jan 3, 2026
2f1e94f
Increasing allocated max job runtime in SLURM script for MultiSWRF* a…
kia-kn Jan 5, 2026
c948d2e
MultiSWRFDB variants heatmap for 1000 features
kia-kn Jan 5, 2026
090bb3a
Increased CPU cores to 8 per job for parallelization of RBA score com…
kia-kn Jan 6, 2026
ad079f9
Switching heatmap to main version for 10k feature dataset
kia-kn Jan 9, 2026
3e2d319
Increased CPU cores to 16 per job to see performance benefits
kia-kn Jan 9, 2026
83de309
Changing heatmap to MultiSWRFDB variants version
kia-kn Jan 12, 2026
97794f4
Print statements to confirm which part of RBA takes up the most runtime
kia-kn Jan 13, 2026
59647e6
Increased memory for each job now with 100k features
kia-kn Jan 13, 2026
bdc563a
Print statements to see why multiswrf/swrf are taking so much longer …
kia-kn Jan 15, 2026
39af4de
More print statements to detect long-running MultiSWRF cause
kia-kn Jan 16, 2026
0cf33ba
Print statements to see if MultiSWRFDB is just not getting that many …
kia-kn Jan 16, 2026
e0c74d5
Removing logging to track pure runtime for SURF/MultiSURF and star eq…
kia-kn Jan 17, 2026
9cd7666
Changed heatmap for 2018-algorithms-only version
kia-kn Jan 22, 2026
39f79d5
Reducing n_jobs to 1 in order to diagnose where in the algorithm is t…
kia-kn Jan 23, 2026
922d8c6
Tracking time taken by each line compute_score(), the function where …
kia-kn Jan 23, 2026
db5092d
Prepping runtime benchmark run for MultiSURF, 16 cores 10k feature da…
kia-kn Jan 26, 2026
1e4df98
Tweaked compute_score; replaced NN[i] & y[inst] and took 'if near' & …
kia-kn Jan 27, 2026
6fbb738
Tweaked compute_score() to take in all features at once, so it is onl…
kia-kn Jan 27, 2026
53dba21
compute_score() speedup attempt using numpy masking and vectorized co…
kia-kn Jan 27, 2026
280009c
For numpy/boolean masking solution, added far scoring functionality f…
kia-kn Jan 28, 2026
a1e2019
Changing analysis script to 1 core per job for MultiSURF* trial run
kia-kn Jan 28, 2026
149ffc7
Refactored compute_score for multiclass endpoint
kia-kn Jan 29, 2026
4d6e72a
Optimized compute_score code for multiclass endpoint
kia-kn Jan 29, 2026
dd87c2c
Bringing back full algorithm main heatmap
kia-kn Jan 29, 2026
c9ebc4e
Reduce multisurf n_jobs to 1
kia-kn Jan 29, 2026
eba8ec3
Extended refactored compute_score to deal with a continuous endpoint/…
kia-kn Jan 29, 2026
35504e1
Removed mutual_info for NA heatmaps
kia-kn Jan 30, 2026
a1f426e
Bringing back mutual_info for other heatmaps
kia-kn Jan 30, 2026
215f209
Adding pyinstrument to baseswrf to confirm slow running function(s)
kia-kn Jan 30, 2026
8c7a6bd
Reducing multiswrf n_jobs to 1 within job_rebate_analysis.py to be co…
kia-kn Jan 30, 2026
2bc2a54
Refactored baseswrf.py to be more time-efficient; more similar to oth…
kia-kn Feb 3, 2026
ade9b49
Fixed unpacking of elements issue with _find_neighbors
kia-kn Feb 3, 2026
f7f8ef8
Ensuring deadband calculation is only done for MultiSWRFDB and not ot…
kia-kn Feb 3, 2026
e2f04f3
Setting up baseswrf algorithms for 10k feature dataset re-run
kia-kn Feb 3, 2026
e8d08a2
Changed run_process_heatmap to MultiSWRFDB variants version
kia-kn Feb 4, 2026
376c385
Prepping runs to test whether ReBATE is correctly assigning discrete/…
kia-kn Feb 4, 2026
950135f
Removing print statements testing feature and endpoint types ReBATE w…
kia-kn Feb 5, 2026
f7bdfb5
Prepped run/job_rebate_analysis for re-running post-refactoring
kia-kn Feb 5, 2026
e26ecac
Reordering algorithms in heatmap within job_process_heatmap_unified
kia-kn Feb 5, 2026
f39b633
Created cleaner names for RBAs in mean/median rank tables
kia-kn Feb 6, 2026
1332198
Setting random_state for mutual_info
kia-kn Feb 9, 2026
6ea5766
Increasing number of random shufffles to 1200 per configuration; ensu…
kia-kn Feb 9, 2026
1157e57
Fixing random shufflereproducibility/exactness
kia-kn Feb 9, 2026
dcb9b97
Testing unified heatmap log output without random shuffle to see if I…
kia-kn Feb 10, 2026
0dcaf83
Removal of unified heatmap log output test
kia-kn Feb 10, 2026
843cdaf
Trying to see why heatmap looks different for mainEff now vs. before
kia-kn Feb 10, 2026
da075db
Reverting to old random shuffle for debugging heatmap
kia-kn Feb 10, 2026
9334a17
Added print statements for debugging heatmap
kia-kn Feb 10, 2026
64e9114
Switching back to new random shuffle method for debugging
kia-kn Feb 10, 2026
cca8357
Printing just swrfstar2 from percentages_df
kia-kn Feb 10, 2026
204181b
Printing full swrfstar2 column
kia-kn Feb 10, 2026
ac20436
Seeing if the heatmap discrepancy disappears after replacing tight_la…
kia-kn Feb 10, 2026
67df4f0
Going back to tight_layout
kia-kn Feb 10, 2026
c852151
Debugging heatmap colorbar, setting blue threshold to 79% to see if i…
kia-kn Feb 10, 2026
a9f01d0
More extreme version of blue threshold decrease
kia-kn Feb 10, 2026
ebfe847
Printing MultiSURF* from percentages_df
kia-kn Feb 10, 2026
f5e1f0f
Printing RandomShuffle percentages_df values now
kia-kn Feb 10, 2026
026792e
Switching back to old random shuffle method for testing
kia-kn Feb 11, 2026
8b5b690
Going back to traditional heatmap structure, plus setting vmin and vm…
kia-kn Feb 11, 2026
9c3b021
Including Random Shuffle in mean/median rank tables
kia-kn Feb 11, 2026
e07fc24
Adding '-' in the name for Mu-Relief
kia-kn Feb 11, 2026
10f8c8d
Adding RandomShuffle to mean/median rank tables - fixed
kia-kn Feb 11, 2026
b17634d
Changing unified heatmap color scheme
kia-kn Feb 11, 2026
546538f
Reverted heatmap color scheme to old version
kia-kn Feb 11, 2026
5b762a9
Increasing overall figure size for unified heatmap to try to make the…
kia-kn Feb 11, 2026
2bea490
Restoring original figure size; decreasing size of height/width ratio…
kia-kn Feb 11, 2026
b5ecde1
Decreasing size of height/width ratios (gap rows/columns) even furthe…
kia-kn Feb 11, 2026
93a00ce
Now, decreasing padding between rows/columns (hspace/wspace)
kia-kn Feb 11, 2026
1c558e3
Increasing padding slightly so that spacing isn't too minimal
kia-kn Feb 12, 2026
be5378d
Increasing size of gap rows/columns to 0.05
kia-kn Feb 12, 2026
8bfc4f7
Changing gap row/column sizes and padding for mainEff unified heatmap
kia-kn Feb 12, 2026
54142d6
Switching back to core2wayEpistasis settings; adding black lines with…
kia-kn Feb 12, 2026
2e23371
Making divider lines that span the figure a little thicker to visuall…
kia-kn Feb 12, 2026
42c319a
Removing divider lines between different dataset configurations
kia-kn Feb 12, 2026
e5ea688
Re-adding divider lines but making them more transparent/faint
kia-kn Feb 12, 2026
f681903
Once again changing gap row/column sizes and padding for mainEff unif…
kia-kn Feb 12, 2026
f9f70d3
Going back to core2wayEpistasis configs; increasing alpha to make div…
kia-kn Feb 12, 2026
59139e5
Decreasing alpha to 0.3
kia-kn Feb 12, 2026
7437b98
Once again changing gap row/column sizes and padding for mainEff unif…
kia-kn Feb 12, 2026
a0b18c2
Changing gap row/column sizes and padding for XOR unified heatmap
kia-kn Feb 12, 2026
e44909f
Bringing separators variable outside of if statement so that it also …
kia-kn Feb 12, 2026
7cba072
Removing divider lines for XOR unified heatmap visualization
kia-kn Feb 12, 2026
1c1825a
Fixing last commit
kia-kn Feb 12, 2026
b5120f8
Adding comment to clarify that U_perm is now the actual U score
kia-kn Feb 13, 2026
44cb9c6
Tracking runtime again for larger feature datasets
kia-kn Feb 14, 2026
2fe6cb1
Increasing number of cores per job to 16 for 10k and 100k feature dat…
kia-kn Feb 14, 2026
d857d8a
Editing job_process_heatmap to have new RBA order
kia-kn Feb 16, 2026
57ce6e7
Adding hyphen to Mu-Relief name in visualization
kia-kn Feb 16, 2026
0505096
Switching job_process_heatmap to display the MultiSWRFDB variants
kia-kn Feb 16, 2026
e0d5d4a
Speeding up SURF/SURF* using numpy for global mean calculation
kia-kn Feb 17, 2026
86d348b
Reverting to 1 core per job for 100 feature/1k feature SURF/SURF* rerun
kia-kn Feb 17, 2026
d7bf5c8
Switching back to 16 cores per job for 10k feature/100k feature SURF/…
kia-kn Feb 17, 2026
be4afa4
Testing mainEff/core2wayEpistasis/XOR after changing SURF/SURF* globa…
kia-kn Feb 17, 2026
f873114
Main heatmap for 2wayEpiFeatures to double check new SURF/SURF* worki…
kia-kn Feb 17, 2026
c53cac7
Editing job_process_rba_rankings.py to handle 2wayEpiFeatures datasets
kia-kn Feb 17, 2026
6132af7
Reverting to 1 core per job for additional 100 feature dataset runs
kia-kn Feb 19, 2026
64a8685
Changing job_process_heatmap to MultiSWRFDB variants version
kia-kn Feb 19, 2026
90dc210
Changing job_process_heatmap to main version
kia-kn Feb 23, 2026
425bd43
Removing mutual info for NA dataset heatmap
kia-kn Feb 23, 2026
0546c47
Reintegrating mutual info into heatmap
kia-kn Feb 23, 2026
b96cef1
Making neighbor identification robust when nan values are present in …
kia-kn Feb 24, 2026
59492a0
Changing heatmap to MultiSWRFDB variants version
kia-kn Feb 24, 2026
c299d97
Getting heatmap scripts ready to produce absolute value result heatmaps
kia-kn Feb 24, 2026
e02e440
Seeing how much runtimes differ when incorporating nanmean/nanstd ins…
kia-kn Feb 25, 2026
0aa6ce5
Preparing for 10k and 100k feature dataset runs with 16 cores per job
kia-kn Feb 25, 2026
1792630
Editing nan handling in distance array; dist array scan for nans only…
kia-kn Feb 26, 2026
cca330a
Getting main heatmap ready
kia-kn Feb 26, 2026
01307f5
Getting MultiSWRFDB variants heatmap ready
kia-kn Feb 26, 2026
120d3a3
Tracking runtimes for larger feature datasets after new nan handling …
kia-kn Feb 26, 2026
4a754d9
Increased number of cores per job to 16 to prepare for runs on 10k an…
kia-kn Feb 27, 2026
63ed028
Making font size bigger for unified heatmap and individual heatmap
kia-kn Mar 10, 2026
fe32239
Fixing heatmap for XOR; also fixing fontsize issue for core2wayEpi
kia-kn Mar 10, 2026
9269803
Moving down y-axis labels for core2wayEpi so that it is placed more b…
kia-kn Mar 11, 2026
f6ee764
Changing black line separators back to proper ones
kia-kn Mar 11, 2026
31662aa
Fixing height/width ratios and hspace/wspace for core2wayEpi unified …
kia-kn Mar 11, 2026
9fd4503
Fixed core2wayEpi y axis unified heatmap
kia-kn Mar 11, 2026
c92e1e0
Y axis core2wayepi unified heatmap fix
kia-kn Mar 11, 2026
8b32cb4
Restructuring unified heatmap code
kia-kn Mar 11, 2026
8df783e
Individual heatmaps for XOR/larger feature datasets which will be com…
kia-kn Mar 11, 2026
c96c61b
Removing x-ticks for XOR individual heatmaps
kia-kn Mar 11, 2026
544ea7b
Increasing fontsize for RBA names in individual heatmaps
kia-kn Mar 11, 2026
a9dea55
Tweaking job_global_rba_rankings.py to include larger feature dataset…
kia-kn Mar 13, 2026
42a6a2e
Excluding xor-4 and xor-5 from global rba rankings
kia-kn Mar 16, 2026
c482758
Added relative order global ranking option to run/job_global_rba_rank…
kia-kn Mar 17, 2026
1502cd8
Refactoring job_process_heatmap_unified for newly structured mainEff …
kia-kn Mar 17, 2026
cb1ecbd
Readding global labels for the unified heatmap figure
kia-kn Mar 17, 2026
2c5cae2
Print statements to debug and see why job_process_heatmap_unified tak…
kia-kn Mar 18, 2026
fb96aaf
Removed debugging print statements; removed super labels from unified…
kia-kn Mar 18, 2026
ece37ea
Moving y axis labels lower for mainEff unified heatmap
kia-kn Mar 18, 2026
844d614
Adjusting spacing in mainEff unified heatmap
kia-kn Mar 18, 2026
ef3bf5c
Adjusting label positioning for mainEff unified heatmap
kia-kn Mar 18, 2026
e82ad93
Getting run/job_rebate_analysis.py ready for 1000 feature main effect…
kia-kn Mar 19, 2026
2c447c4
16 cores for 10,000 and 100,000 feature mainEff datasets
kia-kn Mar 19, 2026
1386d9b
Prepping job_process_heatmap for larger feature mainEff datasets
kia-kn Mar 23, 2026
e6c478b
Changing to MultiSWRFDB variants heatmap version
kia-kn Mar 23, 2026
df5a9da
Extending job_process_rba_rankings to handle mainEff_largerfeatures_data
kia-kn Mar 23, 2026
1bc28a3
Changing heatmap version to main version
kia-kn Mar 23, 2026
1e53825
MultiSWRFDB heatmap version
kia-kn Mar 25, 2026
51ea497
Adding x-axis label and legend back to individual heatmaps
kia-kn Mar 25, 2026
3a71876
Main heatmap version
kia-kn Mar 25, 2026
88f2b31
Making job_process_rba_rankings work with a_50000
kia-kn Mar 25, 2026
8916d13
MultiSWRFDB variants heatmap version
kia-kn Mar 26, 2026
d2184b7
Making sure job_process_rba_rankings can handle a_20000 directory
kia-kn Mar 26, 2026
453ec28
Main heatmap version, removing x-axis label for larger feature datase…
kia-kn Mar 26, 2026
3e7358d
Removing color bar legend for larger feature dataset heatmaps
kia-kn Mar 26, 2026
7e82e7b
Preparing job_process_heatmap to regenerate some individual heatmaps …
kia-kn Mar 26, 2026
a1c1c1e
Adding larger feature mainEff directories to global_rba_rankings comp…
kia-kn Mar 26, 2026
8a18f7f
Temp changes to run Phil 100k dataset
kia-kn Apr 2, 2026
3ac7d1c
Reverting to normal script
kia-kn Apr 2, 2026
1969718
Updated readme.md to include new algorithms in text summary
kia-kn Apr 17, 2026
fc900cf
Further updates to README.md file
kia-kn Apr 20, 2026
0b3375f
Small changes to README.md
kia-kn Apr 20, 2026
6abbb6f
Another small change to README.md
kia-kn Apr 20, 2026
75cb7e5
Again, another small change to README.md
kia-kn Apr 20, 2026
024d735
Once again, another small change to README.md
kia-kn Apr 20, 2026
51e1086
Once again, another small change to README.md
kia-kn Apr 20, 2026
b7a8e7f
Changing discrete_threshold variable name to categorical_threshold
kia-kn Apr 20, 2026
19e1c2e
Adding comments to clarify discrete/categorical relationship
kia-kn Apr 20, 2026
01f5181
Updated documentation files; renamed SWRFstar2 to SWRFstar and delete…
kia-kn Apr 21, 2026
22eefd9
Changing Mu-Relief name to include the real Greek letter in docmentation
kia-kn Apr 21, 2026
ee8c40d
Small tweak to using.md, Mu-Relief description section
kia-kn Apr 21, 2026
79db657
Updated the html
kia-kn Apr 21, 2026
7b0de0e
Ran mkdocs gh-deploy to update documentation site
kia-kn Apr 22, 2026
f937f7f
Updated using.md: included usage of categorical_features with cat_fea…
kia-kn Apr 23, 2026
3de38da
Ran mkdocs build --clean after new changes
kia-kn Apr 23, 2026
7230fbd
Ran mkdocs gh-deploy to deploy new changes on GitHub documentation page
kia-kn Apr 23, 2026
6fb1be5
Changed documentation page to include citations for the core algorith…
kia-kn Apr 25, 2026
cafb34e
Ran mkdocs build --clean
kia-kn Apr 25, 2026
78d2575
Ran mkdocs gh-deploy
kia-kn Apr 25, 2026
8ff7489
Updated documentation site: included link to the original algorithm p…
kia-kn Apr 27, 2026
ef8f205
Ran mkdocs build --clean
kia-kn Apr 27, 2026
af63b02
Ran mkdocs gh-deploy
kia-kn Apr 27, 2026
b8d69d6
Small change to citing.md (doesnt affect output just cleaner format)
kia-kn Apr 27, 2026
0cd39f0
Changing run_rebate_analysis to run 20 feature datasets as sanity che…
kia-kn Apr 27, 2026
27d3604
Replacing analysis scripts with up-to-date versions: new heatmaps wit…
kia-kn Jun 18, 2026
dbed753
Progress on cleaning up comments/code in files; small tweak to MuReli…
kia-kn Jun 23, 2026
8d8e0c7
Mu-Relief set to n_jobs=1 for test runs with small feature datasets
kia-kn Jun 23, 2026
b2f234e
Almost finished cleaning/updating files in dev-kia. Still to do: run_…
kia-kn Jun 23, 2026
d3b894c
Fixed import issue
kia-kn Jun 23, 2026
c1b0a5a
Updated job_process_rba_rankings to only compute on algorithms in rba…
kia-kn Jun 23, 2026
8773a54
Edited run_commands.txt to reflect commands used for 2026 core RBA an…
kia-kn Jun 25, 2026
805fb89
Created pyproject.toml file for skrebate
kia-kn Jun 25, 2026
063521a
Created tests.yml for continuous integration (CI) testing/workflow
kia-kn Jun 25, 2026
9d95520
Created tests folder with test_skrebate.py inside. tests.yml will use…
kia-kn Jun 25, 2026
8aac2aa
Created publish_package.yml. Edited pyproject.toml to read version fr…
kia-kn Jun 26, 2026
493e386
Updating test_skrebate.py so that datasets only use 200 instances ins…
kia-kn Jun 26, 2026
7e4caf6
Deleted old unnecessary files: setup.py, tests.py, test.yml
kia-kn Jun 26, 2026
3d5e280
Testing CI workflow in dev-kia-pypi before PR into master branch
kia-kn Jun 26, 2026
2466d3d
Adding pandas to test dependencies for CI workflow
kia-kn Jun 26, 2026
a809c86
Commenting out unneeded imports
kia-kn Jun 26, 2026
db87bb1
Editing CI test, simplifying to just ensure algorithms are working wi…
kia-kn Jun 26, 2026
46ceffe
Edited documentation site to include release 0.7, and this upcoming r…
kia-kn Jun 27, 2026
25683e0
Ran mkdocs build --clean
kia-kn Jun 27, 2026
b56bb77
Changed version to 0.8. Preparing for PR into master branch
kia-kn Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .coveragerc

This file was deleted.

38 changes: 38 additions & 0 deletions .github/workflows/publish_package.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Publish Python Package

on:
release:
types: [published]
tags:
- 'v*'
workflow_dispatch:

jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10" # Python version for building/uploading

- name: Install build tools
run: |
python -m pip install --upgrade pip
pip install build twine

# Optional: Generate version file from GitHub tag
# - name: Generate version file
# run: echo "__version__ = '${GITHUB_REF##refs/tags/}'" > your_package/_version.py

- name: Build package
run: python -m build

- name: Publish to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: twine upload dist/*
38 changes: 38 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Python Package CI

on:
#push:
# branches: [master]
# push:
# branches: [dev-kia-pypi]
pull_request:
branches: [master]

jobs:
test:
runs-on: ubuntu-latest

strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Upgrade pip, install build tools
run: |
python -m pip install --upgrade pip setuptools wheel build

- name: Install your package with test dependencies
run: |
pip install .[test] # assumes you've defined [project.optional-dependencies] in pyproject.toml

- name: Run pytest
run: |
pytest --disable-warnings --maxfail=1 --tb=short
31 changes: 21 additions & 10 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ run_test.py
__pycache__/
*.py[cod]
*$py.class
.pytest_cache

# C extensions
*.so
Expand Down Expand Up @@ -61,17 +62,27 @@ docs/_build/
# PyBuilder
target/

#Ipython Notebook
# Others
.ipynb_checkpoints

testing.ipynb

*.lprof

*.prof
/demo_scikitrebate.ipynb

*.DS_Store
.idea/

analysis_pipeline/skrebatewip
.idea/

# Files
demo/data
BenchmarkData.zip
analysis_pipeline/
BenchmarkData/
BenchmarkData2/
BenchmarkData3/
BenchmarkData4/
skrebate_old
analysis/BasicXOR/
analysis/BasicXOR2/
analysis/BasicXOR2_2/
analysis/BasicXOR3/
analysis/jobs/
analysis/logs/
analysis/core2wayEpistasis
*.zip
5 changes: 0 additions & 5 deletions .landscape.yaml

This file was deleted.

18 changes: 0 additions & 18 deletions .travis.yml

This file was deleted.

142 changes: 108 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,33 @@ Package information: ![Python 2.7](https://img.shields.io/badge/python-2.7-blue.
[![PyPI version](https://badge.fury.io/py/skrebate.svg)](https://badge.fury.io/py/skrebate)

# scikit-rebate
This package includes a scikit-learn-compatible Python implementation of ReBATE, a suite of [Relief-based feature selection algorithms](https://en.wikipedia.org/wiki/Relief_(feature_selection)) for Machine Learning. These Relief-Based algorithms (RBAs) are designed for feature weighting/selection as part of a machine learning pipeline (supervised learning). Presently this includes the following core RBAs: ReliefF, SURF, SURF\*, MultiSURF\*, and MultiSURF. Additionally, an implementation of the iterative TuRF mechanism and VLSRelief is included. **It is still under active development** and we encourage you to check back on this repository regularly for updates.

These algorithms offer a computationally efficient way to perform feature selection that is sensitive to feature interactions as well as simple univariate associations, unlike most currently available filter-based feature selection methods. The main benefit of Relief algorithms is that they identify feature interactions without having to exhaustively check every pairwise interaction, thus taking significantly less time than exhaustive pairwise search.
This package includes a scikit-learn-compatible Python implementation of ReBATE, a suite of [Relief-based feature selection algorithms](<https://en.wikipedia.org/wiki/Relief_(feature_selection)>) for Machine Learning. These Relief-based algorithms (RBAs) are designed for feature weighting/selection as part of a machine learning pipeline (supervised learning). Presently this includes the following core RBAs: ReliefF, SURF, SURF\*, MultiSURF\*, MultiSURF, SWRF\*, SWRF, MultiSWRF\*, MultiSWRF, MultiSWRFDB\*, MultiSWRFDB, and μ-Relief. Additionally, an implementation of the iterative TuRF mechanism and VLSRelief is included. **It is still under active development** and we encourage you to check back on this repository regularly for updates.

Certain algorithms require user specified run parameters (e.g. ReliefF requires the user to specify some 'k' number of nearest neighbors).
These algorithms offer a computationally efficient way to perform feature selection that is sensitive to feature interactions as well as simple univariate associations, unlike most currently available filter-based feature selection methods. The main benefit of Relief-based algorithms is that they identify feature interactions without having to exhaustively check every pairwise interaction, thus taking significantly less time than exhaustive pairwise search.

Relief algorithms are commonly applied to genetic analyses, where epistasis (i.e., feature interactions) is common. However, the algorithms implemented in this package can be applied to almost any supervised classification data set and supports:
<!-- Certain algorithms require user specified run parameters (e.g. ReliefF requires the user to specify some 'k' number of nearest neighbors). -->

* Feature sets that are discrete/categorical, continuous-valued or a mix of both
Certain algorithms have run parameters that the user can specify, or if not specified, default to preset values (e.g. ReliefF’s parameter for ‘k’ number of nearest neighbors).

* Data with missing values
Relief-based algorithms are commonly applied to genetic analyses, where epistasis (i.e., feature interactions) is common. However, the algorithms implemented in this package can be applied to almost any supervised, structured data set and support:

* Binary endpoints (i.e., classification)
- Feature sets that are discrete/categorical, continuous-valued or a mix of both

* Multi-class endpoints (i.e., classification)
- Data with missing values

* Continuous endpoints (i.e., regression)
- Binary endpoints (i.e., classification)

Built into this code, is a strategy to 'automatically' detect from the loaded data, these relevant characteristics.
- Multi-class endpoints (i.e., classification)

Of our two initial ReBATE software releases, this scikit-learn compatible version primarily focuses on ease of incorporation into a scikit learn analysis pipeline.
- Continuous endpoints (i.e., regression)

Built into this code is a strategy to 'automatically' detect these relevant characteristics from the loaded data.

Of our two initial ReBATE software releases, this scikit-learn compatible version primarily focuses on ease of incorporation into a scikit-learn analysis pipeline.
This code is most appropriate for scikit-learn users, Windows operating system users, beginners, or those looking for the most recent ReBATE developments.

An alternative 'stand-alone' version of [ReBATE](https://github.com/EpistasisLab/ReBATE) is also available that focuses on improving run-time with the use of Cython for optimization. This implementation also outputs feature names and associated feature scores as a text file by default.
An alternative 'stand-alone' version of [ReBATE](https://github.com/EpistasisLab/ReBATE) is also available that focuses on improving run-time with the use of Cython for optimization. This implementation also outputs feature names and associated feature scores as a text file by default.

## License

Expand All @@ -47,11 +50,11 @@ Generally, we have licensed scikit-rebate to make it as widely usable as possibl

scikit-rebate is built on top of the following existing Python packages:

* NumPy
- NumPy

* SciPy
- SciPy

* scikit-learn
- scikit-learn

All of the necessary Python packages can be installed via the [Anaconda Python distribution](https://www.continuum.io/downloads), which we strongly recommend that you use. We also strongly recommend that you use Python 3 over Python 2 if you're given the choice.

Expand All @@ -71,30 +74,97 @@ Please [file a new issue](https://github.com/EpistasisLab/scikit-rebate/issues/n

## Usage

We have designed the Relief algorithms to be integrated directly into scikit-learn machine learning workflows. For example, the ReliefF algorithm can be used as a feature selection step in a scikit-learn pipeline as follows.
### Basic Usage

To use an algorithm from ReBATE as a feature selection method:

```python
```Python
# Import necessary packages
import pandas as pd
from skrebate import ReliefF

# Load the example dataset
genetic_data = pd.read_csv(
'./data/GAMETES_Epistasis_2-Way_20atts_0.4H_EDM-1_1.csv')

# Separate the features and labels from the dataset
features, labels = genetic_data.drop('class', axis=1).values, genetic_data['class'].values

# Apply the ReliefF algorithm for feature selection
fs = ReliefF()
fs.fit(features, labels)

# Print out the results
feature_name = genetic_data.drop('class', axis=1).columns
fs.summary(feature_name=feature_name)

>>> Feature name Feature importances Feature rank
>>> P2 0.12330000 1
>>> P1 0.11892500 2
>>> N0 -0.00018125 3
>>> N10 -0.00075625 4
>>> N13 -0.00320625 5
>>> N14 -0.00402500 6
>>> N4 -0.00582500 7
>>> N1 -0.00595000 8
>>> N8 -0.00653750 9
>>> N12 -0.00696250 10
>>> N16 -0.00705000 11
>>> N17 -0.00740625 12
>>> N5 -0.00788750 13
>>> N11 -0.00822500 14
>>> N9 -0.00826250 15
>>> N2 -0.00871875 16
>>> N3 -0.00872500 17
>>> N7 -0.00991875 18
>>> N6 -0.01038750 19
>>> N15 -0.01044375 20
```

### Using as End-to-end Pipeline

We have designed the Relief-based algorithms to be integrated directly into scikit-learn machine learning workflows. For example, the ReliefF algorithm can be used as a feature selection step in a scikit-learn pipeline as follows:

```Python
# Import necessary packages
import pandas as pd
import numpy as np
from sklearn.pipeline import make_pipeline
from skrebate import ReliefF
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

genetic_data = pd.read_csv('https://github.com/EpistasisLab/scikit-rebate/raw/master/data/'
'GAMETES_Epistasis_2-Way_20atts_0.4H_EDM-1_1.tsv.gz',
sep='\t', compression='gzip')
# Load the example dataset
genetic_data = pd.read_csv(
'./data/GAMETES_Epistasis_2-Way_20atts_0.4H_EDM-1_1.csv')

# Separate the features and labels from the dataset
features, labels = genetic_data.drop('class', axis=1).values, genetic_data['class'].values

clf = make_pipeline(ReliefF(n_features_to_select=2, n_neighbors=100),
RandomForestClassifier(n_estimators=100))
# Split the data to training and testing
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.3, random_state=42)

print(np.mean(cross_val_score(clf, features, labels)))
>>> 0.795
# Make pipeline
clf = make_pipeline(
ReliefF(n_features_to_select=2),
RandomForestClassifier(n_estimators=100)
)

# Train the model
clf.fit(X_train, y_train)

# Evaluate the model on testing set
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.3f}")
>>> Accuracy: 0.781
```

For more information on the Relief algorithms available in this package and how to use them, please refer to our [usage documentation](https://EpistasisLab.github.io/scikit-rebate/using/).
<!-- For more information on the Relief-based algorithms available in this package and how to use them, please refer to our [usage documentation](https://EpistasisLab.github.io/scikit-rebate/using/).

For updated documentation in this forked repository, please refer to this [updated usage documentation](https://urbslab.github.io/scikit-rebate/using/) -->

For more information on the Relief-based algorithms available in this package and how to use them, please refer to our [usage documentation](https://urbslab.github.io/scikit-rebate/using/).

## Contributing to scikit-rebate

Expand All @@ -106,15 +176,19 @@ Please refer to our [contribution guidelines](https://EpistasisLab.github.io/sci

If you use scikit-rebate in a scientific publication, please consider citing the following paper:

Ryan J. Urbanowicz, Randal S. Olson, Peter Schmitt, Melissa Meeker, Jason H. Moore (2017). [Benchmarking Relief-Based Feature Selection Methods](https://arxiv.org/abs/1711.08477). *arXiv preprint*, under review.
Ryan J. Urbanowicz, Randal S. Olson, Peter Schmitt, Melissa Meeker, Jason H. Moore (2018). Benchmarking Relief-Based Feature Selection Methods for Bioinformatics Data Mining. _Journal of Biomedical Informatics_, 85, 168-188. DOI: [10.1016/j.jbi.2018.07.015](https://doi.org/10.1016/j.jbi.2018.07.015)

BibTeX entry:
### BibTeX entry:

```bibtex
@misc{Urbanowicz2017Benchmarking,
author = {Urbanowicz, Ryan J. and Olson, Randal S. and Schmitt, Peter and Meeker, Melissa and Moore, Jason H.},
title = {Benchmarking Relief-Based Feature Selection Methods},
year = {2017},
howpublished = {arXiv e-print. https://arxiv.org/abs/1711.08477},
@article{Urbanowicz2018Benchmarking,
author = {Urbanowicz, Ryan J. and Olson, Randal S. and Schmitt, Peter and Meeker, Melissa and Moore, Jason H.},
title = {Benchmarking Relief-Based Feature Selection Methods for Bioinformatics Data Mining},
journal = {Journal of Biomedical Informatics},
volume = {85},
pages = {168--188},
year = {2018},
doi = {10.1016/j.jbi.2018.07.015},
url = {https://doi.org/10.1016/j.jbi.2018.07.015}
}
```
30 changes: 30 additions & 0 deletions analysis/check_run_validity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import os

def find_error_runs(log_dir, error_keywords=None):
if error_keywords is None:
# Add more as needed
error_keywords = ["error", "failed", "segmentation fault", "traceback", "exception", "abort", "core dumped"]

error_runs = []

for root, _, files in os.walk(log_dir):
for file in files:
if file.endswith((".err", ".log", ".out")):
filepath = os.path.join(root, file)
try:
with open(filepath, "r", encoding="utf-8", errors="ignore") as f:
content = f.read().lower()
if any(keyword in content for keyword in error_keywords):
error_runs.append(filepath)
except Exception as e:
print(f"Error reading {filepath}: {e}")

return error_runs

# Example usage:
log_directory = "./logs" # Change this to your logs directory
errors = find_error_runs(log_directory)

print("Jobs with errors:")
for err_file in errors:
print(err_file)
Loading
Loading