K-means聚类

实验名称:K-means聚类

实验目的:

1.学习数据预处理和标准化方法。

2.掌握K-means聚类算法的基本原理和实现。

3.学习选择合适的K值的方法。

4.使用不同的评价指标对聚类结果进行评估。

5.通过数据可视化展示聚类效果。

实验步骤与要求:

1. 数据集预处理与标准化

数据集导入:选择一个适合聚类分析的数据集(如Iris数据集或客户消费数据)。

数据预处理:处理缺失值、去除异常值等。

数据标准化:将数据进行标准化处理,如归一化或Z-score标准化。

2. K-means聚类算法实现

算法原理:简要说明K-means算法的原理,包括初始化、迭代优化过程。

实现过程:使用编程语言(如Python)实现K-means算法,可以使用现有库如scikit-learn。

3. 聚类结果分析

结果展示:展示K-means算法的聚类结果,包括每个聚类的中心点和各个数据点的分配情况。

评价指标:使用评价指标对聚类效果进行评估。

4. 数据可视化

二维/三维可视化:如果数据维度较高,进行主成分分析(PCA)或t-SNE降维,将聚类结果在二维或三维空间中可视化。

聚类效果展示:使用不同颜色或形状表示不同的聚类,直观展示聚类效果。

5. 实验总结

结果分析:总结实验结果,分析K-means聚类算法的优缺点以及适用场景。

1.实验步骤及流程

2.算法原理及实现过程

(1)数据预处理:标准化特征值,使得每个特征具有零均值和单位方差。

(2)层次聚类:应用层次聚类算法,将数据进行分组。

(3)PCA降维和可视化:通过PCA降维到二维以便于可视化展示。

(4)树状图绘制:展示层次聚类的树状结构,用于理解聚类过程。

(5)聚类质量评估:计算轮廓系数和调整后的兰德指数等指标,评估聚类效果。

(6)数据分布和关系的可视化:通过直方图和散点矩阵图,展示特征分布及特征之间的关系。

3.结果展示

 

 

   

 4. 评价

(1)轮廓系数(Silhouette Score):

轮廓系数衡量了聚类结果的紧密度和分离度,取值范围为[-1, 1],值越接近1表示聚类结果越好。实验中计算了轮廓系数,并打印了其平均值。具体数值越高表示聚类效果越好。

(2)调整后的兰德指数(Adjusted Rand Index):

调整后的兰德指数用于衡量聚类结果与真实标签之间的相似度,取值范围为[-1, 1],值越接近1表示聚类结果与真实标签越一致。实验中计算了调整后的兰德指数,并打印了其数值。具体数值越高表示聚类效果与真实标签的匹配程度越高。

  1. 数据可视化结果展示.

 

5.实验总结

本实验全面展示了对Iris数据集进行层次聚类分析的过程和结果,同时通过评价指标对聚类效果进行了客观评估,为进一步分析和应用提供了有效的参考。主要从以下几个方面进行:

(1)数据预处理:使用标准化处理对数据进行预处理,确保每个特征具有相同的重要性。

(2)层次聚类:应用层次聚类算法对预处理后的数据进行分组,将数据划分为不同的簇。

(3)PCA降维和可视化:使用PCA将数据降维到二维,并绘制原始数据和聚类结果的二维投影图,直观展示聚类效果。

(4)树状图绘制:

绘制了层次聚类的树状图,可视化展示了聚类过程和簇的组织结构。

(5)聚类质量评估:

计算了轮廓系数和调整后的兰德指数,评估了聚类结果的质量。得到的指标值可以帮助判断聚类的效果好坏。

(6)数据分布和关系的可视化:

绘制了特征的分布直方图和聚类结果的散点矩阵图,展示了数据的分布情况和特征之间的关系。

6.源代码

import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.datasets import load_iris 
from sklearn.preprocessing import StandardScaler 
from sklearn.cluster import AgglomerativeClustering 
from scipy.cluster.hierarchy import dendrogram, linkage 
from sklearn.decomposition import PCA 
from sklearn.metrics import silhouette_score, adjusted_rand_score 
# 加载数据集 
iris = load_iris() 
X = iris.data 
y = iris.target 
# 数据预处理(标准化) 
scaler = StandardScaler() 
X_scaled = scaler.fit_transform(X) 
# 聚类 
agg_clustering = AgglomerativeClustering(n_clusters=3) 
y_pred = agg_clustering.fit_predict(X_scaled) 
# 使用 PCA 降维到 2 个主成分以便可视化 
pca = PCA(n_components=2) 
X_pca = pca.fit_transform(X_scaled) 
# 绘制原始数据的二维 PCA 投影 
plt.figure(figsize=(12, 6)) 
plt.subplot(1, 2, 1) 
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='rainbow', edgecolor='k', s=50) 
plt.title('Original Iris Data (PCA)') 
plt.xlabel('Principal Component 1') 
plt.ylabel('Principal Component 2') 
# 绘制聚类结果 
plt.subplot(1, 2, 2) 
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_pred, cmap='rainbow', edgecolor='k', s=50) 
plt.title('Agglomerative Clustering Results (PCA)') 
plt.xlabel('Principal Component 1') 
plt.ylabel('Principal Component 2') 
plt.show() 
# 绘制层次聚类树状图(dendrogram) 
linked = linkage(X_scaled, 'ward')plt.figure(figsize=(10, 7)) 
dendrogram(linked, orientation='top', distance_sort='descending', show_leaf_counts=True) 
plt.title('Dendrogram (Iris Dataset)') 
plt.show() 
# 计算并打印聚类质量指标 
silhouette_avg = silhouette_score(X_scaled, y_pred) 
ari = adjusted_rand_score(y, y_pred) 
print(f'Silhouette Score: {silhouette_avg:.3f}') 
print(f'Adjusted Rand Index: {ari:.3f}') 
# 绘制每个簇的分布直方图 
plt.figure(figsize=(12, 6)) 
for i in range(4): 
plt.subplot(2, 2, i+1) 
plt.hist(X[:, i], bins=20, color='blue', edgecolor='black') 
plt.title(iris.feature_names[i]) 
plt.suptitle('Feature Distributions') 
plt.show() 
# 绘制聚类结果的散点矩阵图 
from pandas.plotting import scatter_matrix 
import pandas as pd 
df = pd.DataFrame(X, columns=iris.feature_names) 
df['Cluster'] = y_pred 
scatter_matrix(df, alpha=0.8, figsize=(12, 12), diagonal='kde', c=y_pred, cmap='rainbow', 
marker='o') 
plt.suptitle('Scatter Matrix of Clustering Results') 
plt.show()

 

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值