A Probabilistic Framework for Adapting to Changing and Recurring Concepts in Data Streams