feat: add Radial Basis Function Neural Network (Implements #12322)
Description
Implements #12322
This PR adds a complete implementation of Radial Basis Function Neural Network (RBFNN) to the machine learning algorithms collection.
Implementation Details
Architecture:
- Input layer accepts n-dimensional vectors
- Hidden layer uses Gaussian RBF activation functions
- Output layer performs linear combination of hidden activations
Features:
-
__init__(num_centers, gamma): Initialize network parameters -
train(X, y): Train using KMeans clustering and least-squares -
predict(X): Make predictions on new data - Comprehensive error handling and input validation
- Detailed doctests for all methods
Training Process:
- Center Selection: Uses KMeans clustering to find optimal RBF centers
- Activation Computation: Calculates Gaussian RBF activations for all samples
- Weight Optimization: Solves for output weights using least-squares regression
Mathematical Foundation
The Gaussian RBF is defined as: φ(x) = exp(-γ * ||x - c||²)
Where:
- x: input vector
- c: RBF center
- γ: spread parameter
Output is computed as weighted sum: y = Σ(w_i * φ_i(x))
Testing
All doctests pass successfully: python -m doctest machine_learning/rbf_network.py -v
Test coverage:
- Initialization with valid parameters
- Training with various data shapes
- Prediction after training
- Error handling for invalid inputs
Requirements Met
✅ RBFNN class with num_centers and gamma initialization
✅ train(X, y) method with KMeans and least-squares
✅ predict(X) method for making predictions
✅ Gaussian RBF activation functions
✅ Comprehensive documentation and doctests
Example Usage
import numpy as np from machine_learning.rbf_network import RadialBasisFunctionNetwork
Generate training data X_train = np.random.randn(100, 2) y_train = np.sum(X_train ** 2, axis=1)
Create and train RBFNN rbfnn = RadialBasisFunctionNetwork(num_centers=10, gamma=1.0) rbfnn.train(X_train, y_train)
Make predictions X_test = np.random.randn(20, 2) predictions = rbfnn.predict(X_test)
References
- Wikipedia: https://en.wikipedia.org/wiki/Radial_basis_function_network
- Original paper: Broomhead & Lowe (1988)