机器学习学习笔记(十一)—— 无监督学习(Unsupervised Learning)/K均值算法(K-means)
什么是无监督学习:
无监督学习只给出未标记的数据集,通过学习来找出数据的结构关系。
K均值算法(K-means):
K均值算法是现在最为广泛使用的聚类算法。
K均值算法是如何运作的:
先从K=2的例子来看
1.设置2个聚类中心点:
2.对每个绿色点,谁更接近红色叉还是蓝色叉进行染色:
3.移动聚类中心点,红色叉移动到所有红色点均值中心处,蓝色叉移动到所有蓝色点均值中心处:
4.如此迭代,直到红色点蓝色点的数量不再变化,就认为达到收敛了:
K均值算法步骤:
input: K(number of clusters), Training set {x(1), x(2), x(3)..., x(m)}
注:
, 没有
.
1.随机初始化K个聚类中心,
注:有时候会是局部最小值,那么可以多次(50~1000)随机化聚类中心点,多次求解寻找最优解。
当K在2~10左右时,多次随机化会有较大的影响,而如果K很大,则效果不会太明显。
2.for i = 1 to m { := index (from 1 to K) of cluster centroid closest to
},即:
3.for k = 1 to K { := average (mean) of points assigned to cluster k }
注:如果发现没有x属于
,那么就删除这个聚类中心点,那么结果就变成K-1个中心点,如果非要有K个聚类中心,那就随机找一个点。
4.重复2、3步直到收敛。
K均值算法的优化目标函数/代价函数:
我们定义=cluster centroid of cluster to witch example
has been assigned.
那么优化目标函数(Optimization objective)如下:
注:在K-means中,这个函数也叫做失真代价函数(distortion cost function).
注:在J关于迭代次数的图像中,应该是单调递减的。
如何确定K值:
目前来说大多数时候,我们还是通过绘制特征图像,人工寻找一个合适的K值。下面也给出几种常见的方法:
1.ELbow method(肘部法则):
多次测试K值,找到肘部点。左图是个很好的尝试,但如果出现右图这样的,就不能给出明确的答案了。
2.根据具体的问题,主观判断K值(e.g. T-shirt的尺寸问题)