当前位置: 首页 > news >正文

KMeans 聚类算法实战:从数据生成到可视化全过程详解

Complete KMeans Clustering Practice (with Evaluation)

一、生成模拟数据

1. Generate Synthetic Data

from sklearn.datasets import make_blobs X, y = make_blobs( n_samples=300, n_features=2, centers=3, random_state=42 )

我们使用make_blobs生成三团二维数据。
We usemake_blobsto generate three clusters in 2D space.

参数说明 / Parameter explanation:

  • n_samples=300:生成300个样本
    Generate 300 samples

  • n_features=2:二维特征,便于可视化
    2 features for visualization

  • centers=3:数据分为3个中心
    3 underlying centers

  • random_state=42:保证结果可复现
    Ensure reproducibility

虽然返回了y(真实标签),但聚类属于无监督学习,不参与训练。

Althoughy(true labels) is returned, clustering is unsupervised and does not use it for training.

二、可视化原始数据

2. Visualize Raw Data

import matplotlib.pyplot as plt fig, ax = plt.subplots(2, figsize=(10,10)) ax[0].scatter(X[:,0], X[:,1], c="gray", label="原始数据") ax[0].set_title("原始数据(无监督)") ax[0].legend()

所有数据点均为灰色,因为我们假设不知道类别。
All points are shown in gray since no labels are assumed.

可以肉眼观察到三团数据,但模型此时并不知道它们属于不同类别。
We can visually see three groups, but the model does not know that yet.

三、KMeans 聚类

3. Apply KMeans Clustering

from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3) kmeans.fit(X)

这里使用的是K-means clustering

We applyK-means clustering, a partition-based clustering algorithm.

核心思想 / Core idea:

  1. 随机初始化 K 个中心
    Randomly initialize K centers

  2. 将样本分配到最近的中心
    Assign samples to nearest center

  3. 更新中心为簇内均值
    Update centers as cluster means

  4. 重复迭代直到收敛
    Iterate until convergence

四、获取簇中心与预测结果

4. Get Cluster Centers and Predictions

centers = kmeans.cluster_centers_ print(centers) y_pred = kmeans.predict(X)

cluster_centers_表示最终的簇中心坐标。
cluster_centers_contains the final cluster centroids.

y_pred表示每个样本的簇编号。
y_predrepresents predicted cluster labels.

五、可视化聚类结果

5. Visualize Clustering Result

ax[1].scatter(X[:,0], X[:,1], c="gray", label="聚类数据") ax[1].scatter(centers[:,0], centers[:,1], s=200, c="red", label="簇中心") ax[1].set_title("KMeans 结果 K=3") ax[1].legend() plt.show()

红色点表示聚类中心。
Red points indicate cluster centroids.

六、数值方式评估聚类效果

6. Evaluate Clustering Performance

由于聚类没有准确率指标,我们通常使用内部评价指标。
Since clustering has no accuracy metric, we use internal evaluation metrics.

类内平方和(SSE)

print(kmeans.inertia_)

inertia_表示类内平方误差和。
inertia_represents the Sum of Squared Errors (SSE).

特点 / Characteristics:

  • 越小表示簇内越紧凑
    Smaller means more compact clusters

  • K 增大时一定下降
    Always decreases as K increases

轮廓系数(Silhouette Score)

from sklearn.metrics import silhouette_score print(silhouette_score(X, y_pred))

衡量样本在本簇内的紧密程度与邻近簇之间的分离程度。
Measures cohesion within cluster and separation from other clusters.

取值范围 / Range:

  • 接近 1 → 聚类效果好
    Close to 1 → Good clustering

  • 接近 0 → 在边界
    Close to 0 → On boundary

  • 小于 0 → 可能分错
    Negative → Possibly misclustered

Calinski-Harabasz 指数

from sklearn.metrics import calinski_harabasz_score print(calinski_harabasz_score(X, y_pred))

表示类间方差与类内方差的比值。
Ratio of between-cluster dispersion to within-cluster dispersion.

  • 越大越好
    Larger is better

  • 常用于选择最佳 K
    Often used to select optimal K

import os os.environ['OMP_NUM_THREADS']='1' import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import make_blobs import os os.environ['OMP_NUM_THREADS']='1' #1生成数据 X,y=make_blobs(n_samples=300,n_features=2,centers=3,random_state=42) plt.rcParams["axes.unicode_minus"] = False #2散点图 plt.rcParams["font.sans-serif"] = ["KaiTi"] fig,ax=plt.subplots(2,figsize=(10,10)) ax[0].scatter(X[:,0],X[:,1],c="gray",label="原始数据") ax[0].set_title("原始数据(无监督)") ax[0].legend() #3Kmeans kmeans=KMeans(n_clusters=3) kmeans.fit(X) #4得到聚簇中心点 centers=kmeans.cluster_centers_ print(centers) #预测每个点的分簇标签 y_pred=kmeans.predict(X) #print(y_pred) #按聚簇结果不同颜色 ax[1].scatter(X[:,0],X[:,1],c="gray",label="聚簇结果数据") ax[1].scatter(centers[:,0],centers[:,1],s=200,c="red",label="簇中心") ax[1].set_title("Kmeans结果K=3") ax[1].legend() plt.show() #评估 print(kmeans.inertia_) from sklearn.metrics import silhouette_score,calinski_harabasz_score print(silhouette_score(X,y_pred)) print(calinski_harabasz_score(X,y_pred))
http://www.jsqmd.com/news/420816/

相关文章:

  • 2026年资产管理系统平台推荐,5家优质公司及核心产品介绍 - 品牌2025
  • 摆脱论文困扰!AI论文平台 千笔AI VS 笔捷Ai,自考必备神器!
  • 2026年实测:攻克 ChatGPT Plus 国内订阅难题(含支付风控底层逻辑与代充方案评测)
  • 2026年靠谱的柴油发电机组生产厂,售后好的有哪些 - 工业品牌热点
  • 2026最新直播电商/电商/化妆品/办公/物流写字楼租赁推荐:产业聚合赋能,这家实力突出 - 十大品牌榜
  • 手把手教你学Simulink--基于多能互补微电网系统的建模与优化场景实例:光储氢一体化微电网能量管理与调度仿真
  • 2026年主数据管理服务商推荐,优质主数据厂商厂家汇总 - 品牌2025
  • 数据处理专业的蔡司代理商价格多少?蔡司代理商推荐 - 工业推荐榜
  • 2026年数据资产管理与资源管理平台公司推荐 - 品牌2025
  • 2026年主数据管理哪个公司好?怎么选? 5家优质企业推荐 - 品牌2025
  • 2026 聚焦!建筑保温结构一体化生产厂家哪家好?看保温结构一体板优质之选,保温结构一体板,保温结构一体板企业有哪些 - 品牌推荐师
  • 华润万家购物卡回收牢记核心知识点,新回收攻略 - 京回收小程序
  • 2026最新电商写字楼租赁推荐!广州优质楼宇权威榜单发布 - 十大品牌榜
  • 2026最新化妆品写字楼租赁推荐!广州优质办公空间权威榜单发布 - 十大品牌榜
  • 易基因:Kidney Int/IF12.6:安徽医科大学孟晓明团队MeRIP-seq等揭示METTL1介导的RNA m7G甲基化在急性肾脏炎症中的致病机制及治疗潜力
  • 2026最新办公写字楼租赁推荐!广州优质写字楼权威榜单发布 - 十大品牌榜
  • 2026年银川靠谱家装设计师推荐,杨丰肇设计工作室实力上榜 - myqiye
  • 本科留学机构大揭秘:谁才是申请路上的“关键先生”? - 博客湾
  • 2025年碳酸镁企业十强榜:行业领军者深度解析,正规的碳酸镁推荐排行榜优质企业盘点及核心优势详细解读 - 品牌推荐师
  • 硅酸钠提纯迎新突破:从脱钠装置专利到离子交换工艺的协同创新
  • 深聊信誉好的拉脱维亚移民服务公司,广州靠谱之选有哪些 - 工业品网
  • 2026最新直播电商写字楼租赁推荐!广州优质办公空间权威榜单发布 - 十大品牌榜
  • 探讨长春大宅设计机构排名,哪个品牌靠谱且价格合理? - 工业设备
  • 2026西安高顶商务车定制销售公司五大推荐,高端定制改装全攻略 - 深度智识库
  • 细聊FEP胶带制造厂自动化程度,排名前十的厂家有哪些 - mypinpai
  • 2026年香港岛健身品牌口碑排名,岱宇国际靠不靠谱 - 工业推荐榜
  • 2026年大型集团资产管理系统有哪些?哪家平台更靠谱 - 品牌2025
  • 2026年红外热像仪推荐,合作案例丰富售后佳的口碑品牌有哪些 - myqiye
  • 【JWT】真的好吗?
  • 本科留学机构深度测评:选对服务,文书助力名校梦! - 博客湾