Same remark about the test being a bit general. I think that self.y should be stored with the initial shape that y had in the call to fit, and array2d applied to it in the predict. That's the road of least surprise for the user who does not know about multi-output situations.