In kernel-based learning, the covariance/kernel matrix defines the properties of the function being modeled from the data (smoothness, boundedness, etc.). How can I design a covariance function that models specific assumptions about the data? How can I guarantee this function's positive definiteness?