fitTransform method
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};
}