Training a model with the full dataset after selecting it using a test set Suppose I need to compare 3 different regression models. Suppose that my only purpose is to select the model which predicts the response variable better. Be M1, M2, M3 these three models. So I estimate each model with the training set and then I calculate for each of them the estimated prediction error through the test set. Now suppose that M1 has the lowest estimated prediction error. This makes me select M1 as the best model.
Now I'd tempted to re-estimate M1 with the entire dataset in order to reduce the standard errors of the regression parameters. This is not a correct method, is it?
 A: IMHO, this is fine, provided that it is acknowledged that you don't have an unbiased performance estimate for the final model.  Whether over-fitting is a problem depends on how many models there are too choose from, how well they are specified by the training data and the variance of the hold-out estimate used to select the best model.  In many cases, the over-fitting from the discrete choice between three models is likely to be negligible.
Consider this alternative procedure.  We use k-fold cross-validation to estimate the performance of the model.  In each fold, we use hold-out set to choose between M1, M2 and M3 in each stage.  We then build the final model, using all of the available data, with a hold-out set to choose between M1, M2 and M3.  In this case, we build the final model in the same way suggested in the question, but the performance estimate is approximately unbiased (for LOOCV at least), as the choice between M1, M2 and M3 is performed separately in each fold, so the performance estimate includes a component due to the over-fitting caused by choosing between models based on a hold-out set.  The procedure set out in the question is just the same, just without the attempt to get a performance estimate.
