# \[ANN\] SIRUS.jl v1.2: Interpretable Machine Learning via Rule Extraction

**URL:** <https://discourse.julialang.org/t/ann-sirus-jl-v1-2-interpretable-machine-learning-via-rule-extraction/100932>\
**Category:** Package Announcements\
**Created:** [June 28, 2023, 12:43pm UTC](https://discourse.julialang.org/t/ann-sirus-jl-v1-2-interpretable-machine-learning-via-rule-extraction/100932 "2023-06-28T12:43:25Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![rikh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rikh/32/204104_2.png) [@rikh](https://discourse.julialang.org/u/rikh)\
**Post date:** [December 3, 2023, 9:43am UTC](https://discourse.julialang.org/t/ann-sirus-jl-v1-2-interpretable-machine-learning-via-rule-extraction/100932/7 "2023-12-03T09:43:19Z")

</div>

> [@tecosaur](#):
>
> This seems a bit similar to signed iterative Random Forests

Yes it does look like it. I find that paper extremely hard to read because they require medical/chemical domain knowledge for their algorithm description.

> [@tecosaur](#):
>
> _See also:_ [Iterative random forests to discover predictive and stable high-order interactions (PNAS)](https://www.pnas.org/doi/10.1073/pnas.1711236115), and [iRF.py](https://github.com/Yu-Group/iterative-Random-Forest)

This one is much clearer. It looks like the SIRUS algorithm is very similar indeed. If you want to benchmark that algorithm iRF (which was removed from CRAN?) feel free to open a PR and re-use the R benchmarking logic in [https://github.com/rikhuijzer/SIRUS.jl/blob/main/test/rcall.jl](https://github.com/rikhuijzer/SIRUS.jl/blob/main/test/rcall.jl). I won’t guarantee that I’ll merge the PR, but at least we can re-use the benchmarking setup and see how well it performs.

> [@tecosaur](#):
>
> Oh, one other thing @rikh. I’d be interested in applying this to a data set that requires a custom bootstrapping approach (extremely imbalanced, groups of rows are highly correlated and can’t be split across the in-bag/OOB samples). Is there any scope to provide a custom bootstrap sampling function, or build the trees separately within a custom bootstrap loop and then feed them to [SIRUS.jl](https://juliahub.com/ui/Packages/SIRUS) to extract the rules?

Given that [`SIRUS.jl`](https://github.com/rikhuijzer/SIRUS.jl) and Julia are often used for smallish research datasets, that feature would make sense yes. However, I and many people don’t need that feature so I probably won’t implement it myself. Feel free to open a PR. If the implementation does not add too much complexity then it will likely be merged. Code for an MLJ wrapper for imbalanced datasets is at [Oversampling and undersampling · Issue #661 · alan-turing-institute/MLJ.jl · GitHub](https://github.com/alan-turing-institute/MLJ.jl/issues/661) (I’m not sure you need this, but the link may be useful if you do).

---

_[View the full topic](https://discourse.julialang.org/t/ann-sirus-jl-v1-2-interpretable-machine-learning-via-rule-extraction/100932)._
