fitTransform method

Map<String, dynamic> fitTransform(
  1. List<List<double>> X
)

Implementation

Map<String, dynamic> fitTransform(List<List<double>> X) {
  // Center data
  final n = X.length;
  final m = X[0].length;
  final means = List<double>.filled(m, 0.0);
  for (var i = 0; i < n; i++) {
    for (var j = 0; j < m; j++) {
      means[j] += X[i][j];
    }
  }
  for (var j = 0; j < m; j++) {
    means[j] /= n;
  }
  final centered = List.generate(
    n,
    (i) => List.generate(m, (j) => X[i][j] - means[j]),
  );
  // For simplicity, just take first 'components' columns
  final projected = List.generate(
    n,
    (i) => List.generate(components, (j) => centered[i][j]),
  );
  return {'projected': projected};
}