Implementation of Robust Random Cut Forest (RRCF) Algorithm

### Describe the workflow you want to enable

Enable users to perform robust anomaly detection using the Robust Random Cut Forest (RRCF) algorithm within the scikit-learn library.

### Describe your proposed solution

## Proposed Solution

I suggest the integration of the Robust Random Cut Forest (RRCF) [[paper](http://proceedings.mlr.press/v48/guha16.pdf)] algorithm into the scikit-learn library. The RRCF algorithm is a natural extension of the Isolation Forest. It presents improved capabilities in handling noisy data, outliers, and stream data scenarios.

The core idea behind RRCF is akin to the Isolation Forest—building binary search trees using random cuts in the input data space. The key distinction lies in the _probability of selecting a cut dimension being proportionate to the dimension's length_. This unique characteristic renders RRCF particularly suitable for scenarios where the Isolation Forest may not perform optimally.

## Implementation

The underlying tree and forest structure of RRCF closely resembles that of the existing iForest, as previously mentioned. The primary difference arises in the computation of anomaly scores, specifically within the `decision_function`.

Additionally, to cater to stream data scenarios, the implementation could (and it should) incorporate methods for efficient insertion and deletion of individual points, as mentioned in the paper.

### Existing Implementations

A pre-existing Python implementation of RRCF can be found at https://github.com/kLabUM/rrcf. This implementation appears to be well-structured and accurate, making it a potential reference for scikit-learn's integration.

I would greatly appreciate your consideration of this proposal. Thank you.

On a side note, please don't hesitate to point out any mistakes/enhancements in the proposal. I'll be glad to assist.

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

This past summer, I had the opportunity to work with anomaly detection algorithms, and among them, I had the chance to closely explore the Robust Random Cut Forest (RRCF). Interestingly, I discovered that while scikit-learn already has Isolation Forest algorithm, RRCF implementation is still missing. This revelation has sparked a motivating drive within me to advocate for the integration of RRCF.

Although it is plausible that this discussion on this topic might have already been occurred, but I was not able to find anything related to RRCF in the issues section or in [scikit-learn-contrib](https://github.com/scikit-learn-contrib/scikit-learn-contrib) except in [this comment](https://github.com/scikit-learn/scikit-learn/issues/17307#issuecomment-632795440) (where the context is kind of different).

COMMENT:
@gjain-7 is this the main main technical change: instead of uniformly sampling columns at random, there is now a vector of probabilities defined by the (max - min) of each column for the likelihood of sampling a specific column to be split? 

This is constant throughout the tree, so the vector of probabilities to sample each column remain fix at each split node?

Labels: New Feature, Needs Decision, Needs Decision - Include Feature