code2-repo / FIX_NMF_COMPATIBILITY.md
Deepu1965's picture
Upload folder using huggingface_hub
9b1c753 verified
# NMF Compatibility Fix
## Problem
The `NMFRiskDiscovery` class initialization failed with:
```
TypeError: NMF.__init__() got an unexpected keyword argument 'alpha'
```
## Root Cause
The scikit-learn `NMF` class has different parameter names across versions:
- **scikit-learn < 0.19**: No regularization parameters
- **scikit-learn 0.19-0.24**: Uses `alpha` and `l1_ratio`
- **scikit-learn >= 1.0**: Uses `alpha_W`, `alpha_H`, and `l1_ratio`
The code was using the old `alpha` parameter which doesn't exist in newer versions.
## Solution
Implemented version detection to use the correct parameters:
```python
import sklearn
sklearn_version = tuple(map(int, sklearn.__version__.split('.')[:2]))
nmf_params = {
'n_components': n_components,
'random_state': random_state,
'init': 'nndsvda',
'max_iter': 500
}
# Add regularization params if supported
if sklearn_version >= (1, 0):
# scikit-learn >= 1.0
nmf_params['alpha_W'] = 0.1
nmf_params['alpha_H'] = 0.1
nmf_params['l1_ratio'] = 0.5
elif sklearn_version >= (0, 19):
# scikit-learn 0.19 to 0.24
nmf_params['alpha'] = 0.1
nmf_params['l1_ratio'] = 0.5
# else: very old version, use basic params only
self.nmf_model = NMF(**nmf_params)
```
## Testing
Run the comparison script again:
```bash
python3 compare_risk_discovery.py --advanced
```
All 9 methods should now work correctly across different scikit-learn versions.
## Files Modified
- `risk_discovery_alternatives.py`: Fixed `NMFRiskDiscovery.__init__()` method