「白话机器学习」算法实际+实战之K-Means聚类算法
作者头像
  • 李雪涵
  • 2020-04-16 16:43:51 5

改写后的内容

1. 引言

如果你希望从事数据挖掘或机器学习相关工作,掌握常用的机器学习算法是非常重要的。以下是一些常见的机器学习算法:

  • 监督学习算法:逻辑回归、线性回归、决策树、朴素贝叶斯、K近邻和支持向量机等。
  • 无监督学习算法:聚类、降维、关联规则等。

为了深入了解这些算法,我曾阅读过《西瓜书》、《统计学习方法》和《机器学习实战》等书籍,还参加了一些课程。尽管这些资源内容详尽,但有时会显得晦涩难懂。实际上,理论知识固然重要,但实战经验同样不可或缺。因此,我想用最通俗易懂的语言撰写一个关于机器学习算法的实战指南。

我认为,理解算法背后的基本概念和应用场景,比单纯理解数学推导更重要。基本概念能让你直观地感受算法的合理性,而数学推导只是将其表达得更加严谨。打个比方,一个梨很甜,用数学语言可以描述为糖分含量90%,但只有亲自品尝,才能真正感受到梨的甜美。算法也是如此,本文旨在帮助你初步接触算法,掌握其基本原理和实际应用。

写作本文的目的有以下几点: - 检验自己对算法的理解程度,做一个小结。 - 让读者轻松愉快地学习算法的核心思想,激发学习兴趣。 - 提供实际案例,让读者在实践中巩固所学知识。 - 整理所有笔记和参考资料,方便查阅。

学习算法不仅仅是掌握理论知识,更重要的是培养兴趣和解决实际问题的能力!

2. K-Means的工作原理

今天我们要讲的是K-Means聚类算法,这是一种非监督学习算法,主要用于解决聚类问题。K表示聚类的数量,Means则表示中心点。算法的基本思路是确定K个中心点,然后将其他点根据距离划分到各个类别中。

K-Means的核心在于确定K个中心点和将其他点划分到对应的类别中。这里有两个关键问题: - 如何确定K个中心点? - 如何将其他点划分到K个类别中?

我们可以从一个具体的例子入手:假设我们有20支亚洲足球队,想要将它们分为3个等级。我们可以通过经验判断,例如一流球队有伊朗或韩国,二流球队有中国,三流球队有越南。这些球队可以作为各自类别的中心点。

K-Means算法的步骤可以简化为: 1. 随机选择K个点作为初始中心点。 2. 将每个点分配到最近的中心点,形成K个类别,然后重新计算每个类别的中心点。 3. 重复第二步,直到类别不再变化,或者达到最大迭代次数。

通过这种方式,我们可以逐步优化中心点的位置,最终实现聚类。

3. 实战:如何对亚洲球队进行聚类

接下来,我们将通过一个具体的实例来演示如何使用K-Means算法对亚洲球队进行聚类。首先,我们需要整理2015年至2019年亚洲球队的排名数据,然后进行数据规范化处理,以便更好地进行聚类分析。

我们可以通过以下步骤进行聚类: 1. 数据规范化:将数值映射到[0,1]区间,或按照均值为0,方差为1的正态分布进行规范化。 2. 随机选择三个初始中心点:中国、日本、韩国。 3. 根据欧氏距离将其他球队划分到最近的中心点。 4. 重新计算每个类别的中心点,并重复上述步骤,直到类别不再变化。

通过不断迭代,我们可以得到以下分类结果: - 第一梯队:日本、韩国、伊朗、沙特、澳大利亚。 - 第二梯队:中国、伊拉克、阿联酋、乌兹别克斯坦。 - 第三梯队:卡塔尔、泰国、越南、阿曼、巴林、朝鲜、印尼、叙利亚、约旦、科威特、巴勒斯坦。

4. KMeans聚类实战:如何对图像进行分割?

接下来,我们将使用K-Means算法对图像进行分割。K-Means算法不仅可以应用于文本和数值数据,还可以应用于图像处理领域。

首先,我们需要了解如何使用sklearn库中的KMeans算法: ```python from sklearn.cluster import KMeans

创建KMeans对象

kmeans = KMeans(n_clusters=3) ```

参数解释: - n_clusters:K值,通常需要尝试不同的K值以获得最佳聚类效果。 - max_iter:最大迭代次数,用于防止程序运行时间过长。 - n_init:初始化中心点的运算次数,默认为10次。 - init:初始化方式,默认为优化过的k-means++方法。 - algorithm:算法实现方式,默认为"auto"。

接下来,我们将使用K-Means对图像进行分割。具体步骤如下: 1. 加载图像并进行数据规范化。 2. 使用K-Means算法对图像进行聚类。 3. 将聚类结果转换为图像格式并保存。

以下是完整的代码示例: ```python from sklearn.cluster import KMeans from sklearn import preprocessing import numpy as np import PIL.Image as image

加载图像,并对数据进行规范化

def load_data(filePath): f = open(filePath, 'rb') data = [] img = image.open(f) width, height = img.size for x in range(width): for y in range(height): c1, c2, c3 = img.getpixel((x, y)) data.append([c1 / 255.0, c2 / 255.0, c3 / 255.0]) f.close() return np.mat(data), width, height

加载图像,得到规范化结果img,以及图像尺寸

img, width, height = load_data('./weixin.jpg')

用K-Means对图像进行2聚类

kmeans = KMeans(n_clusters=2) kmeans.fit(img) label = kmeans.predict(img)

将图像聚类结果,转化成图像尺寸的矩阵

label = label.reshape([width, height])

创建新图像pic_mark,保存图像聚类结果,并设置不同的灰度值

picmark = image.new("L", (width, height)) for x in range(width): for y in range(height): picmark.putpixel((x, y), int(256 / (label[x][y] + 1)) - 1)

picmark.save("weixinmark.jpg", "JPEG") ```

通过上述步骤,我们可以将图像分割成不同的区域。如果想要分割成更多部分,可以调整K值,并使用skimage工具包将聚类标识转化为不同颜色的图像。

5. 总结

本文介绍了K-Means聚类算法的基本原理和实际应用。通过足球队等级划分的例子,我们了解了K-Means的工作原理。接着,我们通过Python代码实现了对图像的分割,展示了K-Means在图像处理领域的应用。

我们还使用了PIL库处理图像,同时借助skimage工具包将聚类结果可视化。希望本文能够帮助读者更好地理解和应用K-Means聚类算法。


希望以上内容能满足你的需求。如果有任何进一步的要求或修改意见,请随时告知。

    本文来源:图灵汇
责任编辑: : 李雪涵
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
算法白话实战实际机器学习Means
    下一篇