1. A method for making recommendations to a user, the method comprising: storing data relating to usage patterns of the user, wherein the data includes information as to items which were used and the context in which they were used; clustering the data into input clusters of data points; determining if there are any input clusters that are similar to each other; merging the similar clusters if there are any input clusters similar to each other: dividing any non-merged input clusters into split clusters if the split clusters would not be similar to each other; and repeating the determining, merging, and dividing using the merged, divided, and remaining unmerged and undivided clusters as input clusters.