当前位置:首页 > AI > 正文内容

K-Means聚类分析以及差错平方和SSE(Python完成)

邻居的猫1个月前 (12-09)AI1376

K-means聚类的原理。
K-Means算法的方针是将原始数据分为K簇,每一簇都有一个中心点,这也是簇中点的均值点,簇中所有的点到所属的簇的中心点的间隔都比到其他簇的中心点更近。

K-means聚类的算法流程。
1、随机确认K个点作为质心。
2、找到离每个点最近的质心,将这个点分配到这个质心代表的簇里。
3、再对每个簇进行核算,以点簇的均值点作为新的质心。
4、假如新的质心和上一轮的不一样,则迭代进行2-3过程,直到质心方位安稳。

代码介绍
运用 make_blobs 函数生成一个二维的随机数据集,包括120个样本和3个中心。生成的数据将用于后续的聚类剖析。
数据生成后,经过散点图可视化这些点,展现不同的聚类中心。

界说了一个函数 calculate_sse,用于核算给定聚类数 k 时的差错平方和(SSE)。该函数运用K-Means算法进行聚类,并回来聚类后的SSE值。

# 导入必要的库
import numpy as np  # 用于数值核算
import matplotlib.pyplot as plt  # 用于数据可视化
from sklearn.datasets import make_blobs  # 用于生成聚类数据
from sklearn.cluster import KMeans  # 用于K-Means聚类算法

# 1. 生成数据
X, y_true = make_blobs(n_samples=120, n_features=2, centers=3, random_state=42)  # 生成120个样本,2个特征,3个聚类中心

# 可视化生成的数据
# 设置matplotlib的字体为中文和负号的显现
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 使绘图时中文正确显现
plt.rcParams["axes.unicode_minus"] = False  # 使绘图时负号正确显现
plt.scatter(X[:, 0], X[:, 1], s=30)  # 制作散点图
plt.title("初始数据")  # 图表标题
plt.xlabel("特征 1")  # x轴标签
plt.ylabel("特征 2")  # y轴标签
plt.show()  # 显现图形

# 2. 界说核算SSE的函数
def calculate_sse(X, k):
    kmeans = KMeans(n_clusters=k, random_state=42)  # 初始化K-Means算法,指定聚类数量k
    kmeans.fit(X)  # 进行聚类
    sse = kmeans.inertia_  # 获取聚类的差错平方和(SSE)
    return sse  # 回来SSE值

# 3. 履行聚类并记载SSE
sse_list = []  # 初始化一个列表用于存储不同K值的SSE
k_values = range(1, 11)  # 界说K的规模,从1到10
n_trials = 5  # 每个K值进行5次试验以下降随机性影响

for k in k_values:  # 遍历每一个K值
    sse_trials = []  # 记载每个K值的SSE试验成果
    for _ in range(n_trials):  # 进行n_trials次试验
        sse = calculate_sse(X, k)  # 核算当时K值下的SSE
        sse_trials.append(sse)  # 将成果保存到列表
    avg_sse = np.mean(sse_trials)  # 核算当时K值的均匀SSE
    sse_list.append(avg_sse)  # 将均匀SSE保存到sse_list中

# 4. 输出K值与均匀SSE联系数据
print("K值与均匀SSE联系:")  # 打印阐明
for k, sse in zip(k_values, sse_list):  # 遍历K值及其对应的均匀SSE
    print(f"K = {k}, 均匀 SSE = {sse:.2f}")  # 格式化输出K值及其对应的均匀SSE

# 将输出保存到文件
with open("sse_results.txt", "w") as file:  # 翻开文件以写入
    file.write("K值与均匀SSE联系:\n")  # 写入文件标题
    for k, sse in zip(k_values, sse_list):  # 遍历K值及其对应的均匀SSE
        file.write(f"K = {k}, 均匀 SSE = {sse:.2f}\n")  # 保存K值和均匀SSE到文件中

print("SSE数据已保存到 sse_results.txt 文件中")  # 输出保存成功的提示信息

# 5. 制作K值与均匀SSE联系图
plt.plot(k_values, sse_list, marker='o')  # 制作K值与均匀SSE的折线图,并运用圆点符号
plt.title("均匀SSE vs 簇数量(K)")  # 图表标题
plt.xlabel("簇个数(K)")  # x轴标签
plt.ylabel("均匀 SSE")  # y轴标签
plt.xticks(k_values)  # 设置x轴刻度
plt.grid()  # 添加网格
plt.show()  # 显现图形

# 6. 运用最佳K值从头进行聚类并可视化成果
best_k = 3  # 假定最优的K值为3
kmeans = KMeans(n_clusters=best_k, random_state=42)  # 初始化K-Means算法
y_kmeans = kmeans.fit_predict(X)  # 进行聚类并回来每个样本的聚类标签

# 可视化聚类成果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=30, cmap='viridis')  # 制作聚类成果的散点图,色彩代表不同聚类
centers = kmeans.cluster_centers_  # 获取聚类中心
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')  # 制作聚类中心
plt.title(f"K={best_k}的K- means聚类")  # 图表标题
plt.xlabel("特征 1")  # x轴标签
plt.ylabel("特征 2")  # y轴标签
plt.show()  # 显现聚类成果图

运转成果:

为了确认最佳的聚类数量K,代码核算从1到10的不同K值对应的均匀SSE。每个K值重复进行5次试验,以削减随机性对成果的影响。
核算好的均匀SSE值被存储在一个列表中,并终究输出至控制台以显现K值与SSE的联系。

将K值与均匀SSE的联系写入到一个文本文件中,便利后续检查和剖析。
运用折线图将K值与对应的均匀SSE可视化,直观展现聚类数量对聚类作用的影响。

由左至右k=1,2,3,4,5,6,7,SSE会跟着K的变大而减小。能够看出在k= 3之后,跟着k的增大,SSE的下降减缓了,再添加K得到的聚合报答变小,也便是k=3应该为最佳聚类数。

结合其他k值的图画,当K=2时,数据点的分类其实是不充分的。而当K=4时,数据点上方非常密布的数据点却常常由于右上角噪音点的影响被从中心分红两簇,这是不符合实际情况的,当k>3时,聚类成果就会显得更加凌乱。结合图画,K=3仍然是最好的挑选。

由图得出最佳的K值为3,从头运用K-Means算法进行聚类,并可视化聚类成果。每个聚类用不同的色彩符号,而且制作出聚类中心,以便明晰了解聚类的作用。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=375

标签: 人工智能
分享给朋友:

“K-Means聚类分析以及差错平方和SSE(Python完成)” 的相关文章

论文泛读《T-Miner: A Generative Approach to Defend Against Trojan Attacks on DNN-based Text Classification》

论文泛读《T-Miner: A Generative Approach to Defend Against Trojan Attacks on DNN-based Text Classification》

宣布时刻:2021 期刊会议:30th USENIX Security Symposium 论文单位:Virginia Tech 论文作者:Ahmadreza Azizi,Ibrahim Asadullah Tahmid,Asim Waheed,Neal Mangaokar,Jiameng Pu,M...

机器学习 回归,理解与应用

机器学习 回归,理解与应用

机器学习回归:理解与应用在机器学习领域,回归分析是一种重要的预测方法,它用于预测一个或多个连续变量的值。本文将深入探讨回归分析的基本概念、常见类型、应用场景以及如何在实际项目中应用回归模型。一、回归分析的基本概念回归分析是一种统计方法,用于研究变量之间的关系。在回归分析中,我们通常将一个变量视为因变...

菜菜机器学习,深入浅出,轻松入门

菜菜机器学习,深入浅出,轻松入门

1. 课程介绍: 菜菜的机器学习sklearn课堂是一个十一周的课程,旨在深入浅出地介绍sklearn库中的主流算法,帮助学生处理数据、调整参数、完善算法,并调用结果。2. 课程内容: 课程内容涵盖了sklearn中的各种算法,包括决策树、随机森林、朴素贝叶斯等,通过实际案例演示如何使用...

机器学习课本,深入浅出机器学习——探索人工智能的基石

机器学习课本,深入浅出机器学习——探索人工智能的基石

1. 《机器学习》 周志华 这本书由计算机科学家周志华教授撰写,涵盖了机器学习的基本概念、范式、应用领域和发展历史,以及各种机器学习模型和方法。提供了百度网盘的下载链接和提取码。2. 《动手学深度学习》 这本书是面向中文读者的深度学习教科书,包含 PyTorch、 NumPy /MXN...

博弈机器学习,探索对抗与协作的智能边界

博弈机器学习,探索对抗与协作的智能边界

博弈机器学习(Game Theory in Machine Learning)是机器学习领域的一个新兴分支,它将博弈论的理论和方法应用到机器学习算法的设计和分析中。博弈论是研究多个智能体在相互作用中如何做出决策以最大化自身利益的数学理论。在机器学习中,博弈论可以帮助我们理解不同智能体(如学习算法、决...

ai软件有哪些,2024年必备的智能助手

ai软件有哪些,2024年必备的智能助手

1. 机器学习平台和框架: TensorFlow PyTorch scikitlearn Keras MXNet Caffe Theano2. 自然语言处理(NLP)工具: spaCy NLTK Stanford NLP Gensi...