normalize function

List<Float64List> normalize(
  1. List<Float64List> X
)

Normalize features to 0-1 range (Min-Max normalization)

Implementation

List<Float64List> normalize(List<Float64List> X) {
  if (X.isEmpty) return [];

  final numFeatures = X[0].length;
  final minVals = Float64List(numFeatures);
  final maxVals = Float64List(numFeatures);

  // Initialize min/max
  for (int j = 0; j < numFeatures; j++) {
    minVals[j] = double.infinity;
    maxVals[j] = double.negativeInfinity;
  }

  // Find min and max for each feature
  for (final row in X) {
    for (int j = 0; j < numFeatures; j++) {
      minVals[j] = min(minVals[j], row[j]);
      maxVals[j] = max(maxVals[j], row[j]);
    }
  }

  // Normalize each sample
  return X.map((row) {
    final normRow = Float64List(numFeatures);
    for (int j = 0; j < numFeatures; j++) {
      final range = maxVals[j] - minVals[j];
      normRow[j] = range == 0 ? 0.0 : (row[j] - minVals[j]) / range;
    }
    return normRow;
  }).toList();
}