Implement feature scaling (standardization) for a dataset. Transform each feature so it has zero mean and unit variance.
def feature_scaling(data: list[list[float]]) -> tuple[list[list[float]], list[float], list[float]]:
n = len(data)
num_features = len(data[0])
means = []
stds = []
for j in range(num_features):
col = [data[i][j] for i in range(n)]
mean = sum(col) / n
variance = sum((x - mean) ** 2 for x in col) / n
std = variance ** 0.5
means.append(mean)
stds.append(std)
scaled = []
for i in range(n):
row = []
for j in range(num_features):
if stds[j] != 0:
row.append((data[i][j] - means[j]) / stds[j])
else:
row.append(0.0)
scaled.append(row)
return (scaled, means, stds)