1- All datasets in scikit-learn are preprocessed. I should have mentioned this.
2- I said "not good" because the difference between prediction and true value was very large.
3- Loss functions are used to find how far model's predictions are from the true values. I used it to test model's accuracy. Actually, we should to test it on test data but for simplicity I used train data. In regression tasks, we use mean squared error as the values are 'real values'. In case of classification, most of the time we use cross-entropy. However, note that I used it just for the demonstration. It's fine if you avoid it.
4- This is expected as our model is not complex enough. You can use other models (i.e Decision Tree, Boosting Methods) to achieve better results.