数据挖掘 K-Means聚类

未格式化之前的代码:

python 复制代码
import pandas as pd#数据处理
from matplotlib import pyplot as plt#绘图
from sklearn.preprocessing import MinMaxScaler#归一化
from sklearn.cluster import KMeans#聚类
import os#处理文件

os.environ["OMP_NUM_THREADS"] = '4'

df = pd.read_excel("consumption_data.xls", usecols=["R", "F", "M"])#选取了"R"、"F"和"M"三列数据
df.dropna(inplace=True)#将缺失值删除
df_scale = MinMaxScaler().fit_transform(df)#归一化,使得数据在0到1的范围内
model = KMeans(n_clusters=3, random_state=0)#n_clusters参数设置为3,表示要将数据分成3个簇。random_state参数设置为0,以确保每次运行时都得到相同的结果
model.fit(df_scale)#训练模型
core = model.cluster_centers_#通过cluster_centers_属性获取聚类模型中心点的坐标,即每个簇的中心点
df["class"] = model.labels_#将每个数据点的簇标签保存在原始数据集的"class"列中,使用labels_属性获取每个数据点所属的簇的标签

fig = plt.figure(figsize=(9, 9))#创建一个大小为9x9的图形窗口
ax = plt.axes(projection='3d')#创建一个3D坐标轴
center_x = []#创建空列表用于存储各个簇的中心点坐标。
center_y = []
center_z = []
for i, j in df.groupby(by="class"):#对数据集按簇标签进行分组
    ax.scatter3D(j["F"], j["R"], j["M"], label=i)#将每个簇的数据点在3D空间中绘制为散点图
    center_x.append(j["F"].mean())#计算每个簇的中心点坐标,并将其添加到相应的列表中。
    center_y.append(j["R"].mean())
    center_z.append(j["M"].mean())
    # ax.scatter3D(j["F"].mean(),j["R"].mean(),j["M"].mean(),marker="X") 使用scatter3D()函数将每个簇的中心点坐标(j["F"].mean(), j["R"].mean(), j["M"].mean())以"X"形状的标记绘制在图中。
ax.scatter3D(center_x, center_y, center_z, label='center', marker="X", alpha=1)#以"X"形状的标记绘制簇的中心点。alpha参数设置为1,表示散点图的透明度为完全不透明
plt.legend()#显示图例
plt.show()#显示图形

for i, j in df.groupby(by="class"):#对数据集按簇标签进行分组。
    j[["R", "F", "M"]].plot(kind="kde", subplots=True, sharex=False)#对每个簇的三个特征绘制核密度图。kind="kde"指定绘制核密度图,subplots=True表示将三个子图绘制在同一画布上,sharex=False表示不共享x轴。
    plt.subplots_adjust(hspace=0.3)  # 调整子图的纵向间隙,hspace=0.3将纵向间隔设置为子图高度的30%。这将使得每个子图之间有一定的空白间隔
    plt.show()#显示图形

格式化之后的代码:

python 复制代码
import pandas as pd  # 数据处理
from matplotlib import pyplot as plt  # 绘图
from sklearn.preprocessing import MinMaxScaler  # 归一化
from sklearn.cluster import KMeans  # 聚类
import os  # 处理文件

os.environ["OMP_NUM_THREADS"] = '4'

df = pd.read_excel("consumption_data.xls", usecols=["R", "F", "M"])  # 选取了"R"、"F"和"M"三列数据
df.dropna(inplace=True)  # 将缺失值删除
df_scale = MinMaxScaler().fit_transform(df)  # 归一化,使得数据在0到1的范围内
model = KMeans(n_clusters=3, random_state=0)  # n_clusters参数设置为3,表示要将数据分成3个簇。random_state参数设置为0,以确保每次运行时都得到相同的结果
model.fit(df_scale)  # 训练模型
core = model.cluster_centers_  # 通过cluster_centers_属性获取聚类模型中心点的坐标,即每个簇的中心点
df["class"] = model.labels_  # 将每个数据点的簇标签保存在原始数据集的"class"列中,使用labels_属性获取每个数据点所属的簇的标签

fig = plt.figure(figsize=(9, 9))  # 创建一个大小为9x9的图形窗口
ax = plt.axes(projection='3d')  # 创建一个3D坐标轴
center_x = []  # 创建空列表用于存储各个簇的中心点坐标。
center_y = []
center_z = []
for i, j in df.groupby(by="class"):  # 对数据集按簇标签进行分组
    ax.scatter3D(j["F"], j["R"], j["M"], label=i)  # 将每个簇的数据点在3D空间中绘制为散点图
    center_x.append(j["F"].mean())  # 计算每个簇的中心点坐标,并将其添加到相应的列表中。
    center_y.append(j["R"].mean())
    center_z.append(j["M"].mean())
    # ax.scatter3D(j["F"].mean(),j["R"].mean(),j["M"].mean(),marker="X") 使用scatter3D()函数将每个簇的中心点坐标(j["F"].mean(), j["R"].mean(), j["M"].mean())以"X"形状的标记绘制在图中。
ax.scatter3D(center_x, center_y, center_z, label='center', marker="X",
             alpha=1)  # 以"X"形状的标记绘制簇的中心点。alpha参数设置为1,表示散点图的透明度为完全不透明
plt.legend()  # 显示图例
plt.show()  # 显示图形

for i, j in df.groupby(by="class"):  # 对数据集按簇标签进行分组。
    j[["R", "F", "M"]].plot(kind="kde", subplots=True,
                            sharex=False)  # 对每个簇的三个特征绘制核密度图。kind="kde"指定绘制核密度图,subplots=True表示将三个子图绘制在同一画布上,sharex=False表示不共享x轴。
    plt.subplots_adjust(hspace=0.3)  # 调整子图的纵向间隙,hspace=0.3将纵向间隔设置为子图高度的30%。这将使得每个子图之间有一定的空白间隔
    plt.show()  # 显示图形
相关推荐
2501_941837262 小时前
CV医疗应用:基于YOLOv8-RepHGNetV2的疟疾寄生虫细胞形态检测与分类系统
yolo·分类·数据挖掘
绝不原创的飞龙7 小时前
K 最近邻回归器,解释:带代码示例的视觉指南
人工智能·数据挖掘·回归
高洁0111 小时前
产品数字孪生体与数字样机及数字化交付的应用
人工智能·深度学习·算法·数据挖掘·transformer
2501_9415079411 小时前
通信基站天线设备检测与分类YOLO11-LSCD-LQE算法实现与优化
算法·分类·数据挖掘
飞Link13 小时前
指令调整阶段中的通用模型蒸馏、模型自我提升和数据扩充
python·算法·数据挖掘
2501_9415079413 小时前
使用_ssd300_训练蘑菇分类数据集经验总结_毒菇与食用菇自动识别研究
人工智能·分类·数据挖掘
永远都不秃头的程序员(互关)13 小时前
【K-Means深度探索(十)】进阶思考:K-Medoids与Fuzzy C-Means,K-Means的“亲戚”们!
算法·机器学习·kmeans
AAD5558889914 小时前
伊蚊种类识别与分类——基于VFNet的蚊虫识别模型训练与实现
人工智能·数据挖掘
2501_9421917714 小时前
微生物图像识别与分类:基于YOLO11-C3k2-SFHF的六类微生物自动检测方法详解
人工智能·分类·数据挖掘
2501_9415079414 小时前
YOLO11-C3k2-ODConv玻璃缺陷检测与分类任务详解
人工智能·分类·数据挖掘