python-机器学习-K均值聚类

1.源码

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()

2.运行结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西唯兵欧泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值