Hello
Can I ask why did you fit on train_X, train_Y and test_X ?
You should only fit on train_X and not on train_Y or test_X.
You don’t have to do mean centralization of target (Y) and also  while centralising test data you have to the use mean on train data.
Also one more change is that in __getitem__ you don’t have to do transformation on Y_data.
The code will look like this
if self.transform is not None:
   X_data = self.transform(X_data)
return X_data, Y_data