Kernel machines such as support vector machines require a kernel function defined a priori. For successful learning, the kernel function should be properly designed according to prior knowledge. This paper gives an extensive review on recently proposed kernel design strategies such as convolution kernels, marginalized kernels, Fisher kernels, TOP kernels, string kernels and diffusion kernels.