人工不智能之sklearn聚类

线性回归是一种有监督算法,提供了输入数据x和参考目标值y,参考目标提供了一种纠错机制,是对预测结果y_的监督,如果y和y_相差过大,说明拟合的模型可能存在问题。线性回归有明确的损失函数,用来衡量参考目标值和预测值的差异,模型的目标就是最小化损失函数的值。

聚类是无监督算法,只提供了输入数据x,而没有参考目标y。聚类的目标就是将输入数据进行分类,距离接近的放到一个分类,距离远的就分开。那如何用数学语言来衡量聚类的目标呢?

聚类算法中最简单也是最常见的算法就是Kmeans算法。Kmeans算法将聚类的目标定义为寻找最佳的K个中心点。就好比你要在K个城市开肯德基,你应该选择每个城市中心地点来开设,这样距离人群的平均距离最近。一旦有了K个中心点,那么对于任意输入数据,我们计算它和所有中心点之间的距离,取最近的中心点作为其类别即可。也就是说客户总是要要选择最近的肯地基点去用餐。

Kmeans算法必须由人工指定聚类的数量K,然后算法会自动去寻找最佳的K个中心点,并将输入数据点归类。至于如何确定K,真实的数据往往是不能像上图那样肉眼就可以观察出有几个分类。真实的数据往往是多维数据结构,难以使用图形来直接呈现的。

Kmeans算法必须由人工指定初始中心,然后算法使用迭代的方式来移动这K个中心点,最终收敛到最佳中心点位置。这个最佳中心点是和初始点的位置相关的,也就是说初始的选择会影响到最终的中心点的结果。

确定初始中心也有相应的算法,不过不在本文的讨论范围。

那K到底该如何确定呢?这个也不在本文的讨论范围,小编后续再讲。这里就假设我们已经知道了K是多少,然后使用Kmeans算法来把输入数据点划分为最佳的K个堆。

接下来,我们使用sklearn提供的KMeans模块来实践一下。KMeans模块默认提供了确定初始中心点的算法,用户可以不必关心中心点初始化的问题,但是用户必须指定K值。

我们先随机构造出K个数据堆,并用图形呈现出来。

先随机出K个中心点

对每个中心点周围再随机出N个点

这个程序并不总是能随机出边界比较清晰的5个数据堆,多试几次,甚至要试很多次。

然后我们用KMeans模块来聚类这个数据堆。

我们看到网格之间形成了很明显的分界线。同颜色的网格点属于同一个类别。这些网格点所属的类别就是模型对世界的预测。

因为plt.scatter方法每调用一次都会随机出不同的颜色,所以网格呈现出了鲜明的颜色块。

每个蓝色的数据堆中心有一个绿色的点很一个不明显的橙色的加号分别代表原始随机的中心点和模型聚类出来的中心点,它们非常接近,说明算法计算出的中心点还是比较准确的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180315G0739B00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券