Python icon indicating copy to clipboard operation
Python copied to clipboard

feat: add Radial Basis Function Neural Network (Implements #12322)

Open Monasri29-hub opened this issue 3 months ago • 0 comments

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:

  1. Center Selection: Uses KMeans clustering to find optimal RBF centers
  2. Activation Computation: Calculates Gaussian RBF activations for all samples
  3. 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)

Monasri29-hub avatar Oct 20 '25 15:10 Monasri29-hub