瞎聊机器学习——K-均值聚类(K-means)算法

简介: 瞎聊机器学习——K-均值聚类(K-means)算法

本文中我们将会聊到一种常用的无监督学习算法——K-means。


1、K-means算法的原理

K-means算法是一种迭代型的聚类算法,在算法中我们首先要随机确定K个初始点作为质心,然后去计算其他样本距离每一个质心的距离,将该样本归类为距离最近的一个质心所属类别中(一个簇中)。

举个例子来表述一下:

5.png

如图所示,我们进行反向思考,我设定四个固定的随机点的位置(红色点),在每一个点的附近都随机生成50个蓝色点,对所有的蓝色点进行聚类分析,如果设定簇的数量为4个(K=4),是不是最后的结果越靠近这四个红色的点越好呢?当然在寻找最优解的过程中图中的每一个蓝色的点都可以当做要选取的质心,我们进行的是一个迭代求解的过程,下面说一下K-means算法的步骤:

(1)随机选取数据中的K个对象作为聚类中心,每个对象都代表一个类(K个类的确定);

(2)计算每一个样本到每一个聚类中心的距离(欧氏距离),将该样本分到距离最近的那个类的簇中;

(3)遍历每一个簇,算出每个簇的中心,将该中心作为新的聚类中心;

(4)重复进行(2)(3),直到聚类中心不再发生变化为止。


2、K-means算法的优缺点

优点:对于聚类算法来说K-means算法原理简单;计算复杂度是O(NKt),N为数据对象的数目,K是聚类中心的数目,t是迭代的次数;对于大数据集的处理,K-means算法具有可伸缩性和高效性。


缺点:需要预先设定K值,K值得设定和真实的数据样本未必是吻合的;求解的结果是局部最优而非全局最优(当数据簇的分布差异较大时表现的不好);容易受到噪声点的影响;样本最后只能被分到单一的类别中。


3、K-means算法中K值的选择

K值得选择是K-means算法中最大的问题之一,也是该算法的主要缺点所在,然而K值的选择一般都要基于经验和多次试验的结果,我们可以将不同K值下的平均距离进行绘图:

6.png

根据图片我们可以看出当K=(1~4)时,K值下的平均距离急速下降,当K>4时,曲线趋于平稳,此时我们可以认为K=4就是最佳的K值。


4、K-means算法的代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 先在四个中心点附近产生一堆数据
real_center = [(1, 1), (1, 2), (2, 2), (2, 1)]
point_number = 50
points_x = []
points_y = []
k_x = []
k_y = []
for center in real_center:
    offset_x, offset_y = np.random.randn(point_number) * 0.3, np.random.randn(point_number) * 0.25
    x_val, y_val = center[0] + offset_x, center[1] + offset_y
    k_x.append(center[0])
    k_y.append(center[1])
    points_x.append(x_val)
    points_y.append(y_val)
points_x = np.concatenate(points_x)  # 将二维数组拼接成一个list
points_y = np.concatenate(points_y)
# plt.scatter(k_x,k_y,c='r')
# plt.scatter(points_x, points_y, c='b')
# plt.show()
def k_means(K, p_list, center):
    points_set = {key: [] for key in range(K)}
    for p in p_list:
        # np.argmin返回(距离)最小值的下标,参数axis=1
        nearest_index = np.argmin(np.sum((centeroid - p) ** 2, axis=1) ** 0.5)
        points_set[nearest_index].append(p)
    # point_set = {0:[([x1,y1]),([x2,y2]),......],1:[],......}
    for k_index, p_set in points_set.items():
        p_xs = [p[0] for p in p_set]
        p_ys = [p[1] for p in p_set]
        center[k_index, 0] = sum(p_xs) / len(p_set)
        center[k_index, 1] = sum(p_ys) / len(p_set)
    return center, points_set
K = 4
# 用np.stack将points_x和points_y拼接,变成(x,y)的坐标形式   p_list.shape(200,2)
p_list = np.stack([points_x, points_y], axis=1)
# 通过choice函数随机选出K个聚类中心
index = np.random.choice(len(p_list), size=K)
centeroid = p_list[index]
print(centeroid)
k_means(K, p_list, centeroid)
for i in range(10):
    center, point_set = k_means(K, p_list, centeroid)
print(center)             # 输出聚类中心
print(point_set)          # 输出聚类后的每个簇
# 利用Sklearn中的kmeans绘制出K值及其聚类簇中平均距离的折线图,取得最佳K值
# loss = []
# for i in range(1, 10):
#     kmeans = KMeans(n_clusters=i, max_iter=100).fit(p_list)
#     loss.append(kmeans.inertia_ / point_number / K)
#
# plt.plot(range(1, 10), loss)
# plt.show()


相关文章
|
2月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
146 7
|
3月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
146 6
|
5月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
|
5月前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
|
6月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
174 14
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
375 14
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
288 1
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)

热门文章

最新文章