Implement beta calibration

### Describe the workflow you want to enable

It would be nice to implement beta calibration as an additional option in CalibratedClassifierCV.

### Describe your proposed solution

Use the implementation provided in https://github.com/betacal/python (MIT license).

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

Beta calibration seems like a generally superior alternative to logistic / Platt calibration. See here for further details, paper references, etc.: https://betacal.github.io/ It was proposed in 2017 in two papers by Meelis Kull, Telmo de Menezes e Silva Filho and Peter Flach.

COMMENT:
As a member of the research group of the Beta calibration paper, allow me to expand on the previous discussion.

**Inclusion criteria**: As of today (22/01/2024) both papers are more than 3 years old and have more than 200 citations together [1,2]. To be more precise, the original paper [1] was invited to be extended to the Electronic Journal of Statistics [2]. This is the reason that the citations are split into two papers.

**Current alternative**: As one of the main developers of the existing library (https://github.com/betacal/python/) , we would be happy to include our code in scikit-learn. If necessary, I could help with the integration.

**Current calibration methods in scikit-learn**: The current methods in scikit-learn (https://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html#sklearn.calibration.CalibratedClassifierCV) are `sigmoid` and `isotonic`. Sigmoid should be applied only on classification models with infinite support, and isotonic being non-parametric requires more data than Beta calibration (three, two, or even one parameter). Beta calibration could be added using the current implementation of Platt's scaling (we use the scikit-learn implementation of Logistic Regresssion).

**Proposed solution**: Include an additional method `beta` indicating that it is a parametric method that can be used for probabilistic models with finite support (0,1). The method has 3 parameters to be fitted, but we proposed a 2 parameter and 1 parameter version by forcing additional constraints. Given the simplicity of scikit-learn, this could be choosen by an internal cross-validation, or could be a user option.

**Regarding the multiclass setting**: The existing methods in scikit-learn (`sigmoid` and `isotonic`) and the proposed method `beta` are all intended to be used in binary classification and are commonly extended to multiclass in a one-vs-the-rest manner with an additional step of normalisation (which is not the correct solution). As a co-author of Dirichlet calibration we would also be happy to add this method for the multiclass case. The method is more than 3 years old and has more than 200 citations [3]. However, I assume this should be discussed in another issue.


**EDIT**: Corrected explanation about [2] being published after [1].

References
----------------

[1] Beta calibration: a well-founded and easily implemented improvement on logistic calibration for binary classifiers M Kull, T Silva Filho, P Flach. Proceedings of the 20th International Conference on Artificial Intelligence and Statistics, PMLR 54:623-631, 2017. (157 citations in Google Scholar)
[2] Beyond sigmoids: How to obtain well-calibrated probabilities from binary classifiers with beta calibration M Kull, TM Silva Filho, P Flach, Electron. J. Statist. 11 (2) 5052 - 5080, 2017. https://doi.org/10.1214/17-EJS1338SI (86 citations in Google Scholar) 
[3] Beyond temperature scaling: Obtaining well-calibrated multi-class probabilities with dirichlet calibration M Kull, M Perello Nieto, M Kängsepp, T Silva Filho, H Song, P Flach Advances in neural information processing systems 32, 2019 (273 citations in Google Scholar)

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