Data-driven Residual Generation for Early Fault Detection with Limited Data