#Unsupervised learning(无监督学习)
- supervised learning(监督学习):有一系列标签,然后用假设函数去拟合它;
- unsupervised learning(无监督学习):将这系列无标签的数据输入到算法中,然后让算法找到一些隐含在数据中的结构;
#clustering algorithm(聚类算法)
能够找出图中所圈出的cluster(簇)的算法【无监督学习】:
#K-means algorithm(K均值算法)
最热门最为广泛运用的聚类算法,:
1、随机生成两点,这两点叫做cluster centroids(聚类中心);选两点是因为想把数据聚成两类。
2、K均值算法是一个迭代算法,会做两件事情,第一个是cluster assignment step(簇分配),第二个是move centroid step(移动聚类中心);
- K均值算法中每次内循环的第一步是要进行簇分配,即遍历数据集,然后根据每个点是与红色聚类中心更近还是与蓝色聚类中心更近,来将每个数据点分配给两个聚类中心之一,即将每个点染成红色或蓝色:
- 内循环的第二步是移动聚类中心,将两个聚类中心移动到同色的点的均值处:
- 然后再进入下一个簇分配步骤,即再次检查所有的无标签样本,然后根据这些点是与红色还是蓝色聚类中心更近将其涂成红色或是蓝色,然后再移动聚类中心...
3、如果迭代时中心和点的颜色不再变,则k均值已经聚合了。
更规范的格式:
- K均值算法接收两个输入,参数k表示你想从数据中聚类出的簇的个数,第二个是一系列无标签的只用x来表示的数据集;
- 约定X^(i)是一个n维实数向量,即训练样本是n维向量
1、随机初始化K个聚类中心,对应之前图中叉的位置;
2、循环做:对于每个训练样本,用变量c^(i)表示第1到第K个最接近x^(i)的聚类中心,所以c^(i)取值为1到K;μk等于这个簇中所有点的均值;如果存在一个没有点的聚类中心,常见的做法就是直接移除那个聚类中心,或者如果还是想有k个聚类中心,则随机初始化这个聚类中心。
K均值算法另一个常见的应用,解决non well seperated cluster(分离不佳的簇)问题:
#Optimization objective(优化目标)
K均值算法也有一个优化目标函数或者一个用于最小化的代价函数,这个函数有时也叫distortion cost function(失真代价函数)或是K均值算法的失真:
- K均值算法要做的就是找到参数c^(i)和μ_i,也就是能找到代价函数J的c和μ。
- 簇分配实际上就是在最小化代价函数J关于变量c,移动聚类中心最小化代价函数J关于变量μ:
*wrt是with respect to(关于)的缩写
为什么要了解K均值的优化目标函数?
1、能帮助我们对学习算法进行调试,确保K均值算法运行正确;
2、运用它可以帮助K均值算法找到更好的簇并且避免局部最优解。
#Random initialization(随机初始化)
如何随机初始化cluster centroid(聚类中心):
- 随机挑选K个训练样本;
- 这个方法最为推荐;
- K均值算法最终可能会收敛得到不同的结果,这取决于聚类的初始化状态
- K均值算法可能会落在local optima(局部最优):
- 右下角的两个代表不同的局部最优化;
- 尝试多次随机初始化并且运行K均值算法很多次可以得到一个足够好的结果:
- 在所有这100种分类数据的方法中,选取代价最小的一个,也就是distortion(畸变值)最小的;
- 如果K很大,则多次随机初始化不会有太大改善。
#Choosing the number of clusters(选择聚类数量)
即如何选择参数K的值:
1、最常用的仍然是通过观察可视化的图或者通过观察聚类算法的输出等等。
- 选择聚类数量并不容易很多程度上是因为通常在数据集中,不清楚有多少个聚类。
2、Elbow method(肘部法则):
- 是一个值得尝试的方法,但是不能期望它能够解决任何问题。
3、如果后续目的如市场分割能给你一个评估标准,那么决定聚类的数量更好的方法是看哪个聚类数量能更好地应用于后续目的:
PS.内容为学习吴恩达老师机器学习的笔记【https://study.163.com/course/introduction/1004570029.htm】