https://knightnemo.github.io/blog/posts/ml3/
Machine Learning Series: 3.Unsupervised Learning(II)