Tolerating noisy, irrelevant and novel attributes in instance-based learning algorithms