DrPepper8888 / IPMN

0 stars 0 forks source link

分析k-means的结果 #11

Open DrPepper8888 opened 3 months ago

DrPepper8888 commented 3 months ago

如果您正在使用 Pandas 处理数据并希望分析 K-Means 聚类的结果,您可以使用以下方法来进行分析:

1. 分析每个聚类的特征

您可以计算每个聚类的统计数据,例如均值、标准差、最小值和最大值,来了解每个聚类的特征分布。

import pandas as pd

# 假设 df 是一个 Pandas DataFrame,其中包含 'Cluster' 列,表示每个数据点的聚类标签
# 以及 'TRAN_AMT', 'HOLDING_TIME', 'NET_WORTH' 等特征列

# 对每个聚类进行分组,并计算统计量
cluster_summary = df.groupby('Cluster').agg({
    'TRAN_AMT': ['mean', 'std', 'min', 'max'],
    'HOLDING_TIME': ['mean', 'std', 'min', 'max'],
    'NET_WORTH': ['mean', 'std', 'min', 'max']
})

# 显示聚类摘要
print(cluster_summary)

2. 检查聚类的大小

了解每个聚类的大小或样本数量可以帮助您判断聚类是否平衡。

# 计算每个聚类的大小
cluster_sizes = df['Cluster'].value_counts()

# 显示聚类大小
print(cluster_sizes)

3. 可视化聚类结果

使用散点图或其他图表可以帮助您直观地了解聚类结果。

import matplotlib.pyplot as plt
import seaborn as sns

# 假设我们只关注 'TRAN_AMT' 和 'HOLDING_TIME' 这两个特征来进行可视化
# 选择这两个特征以及 'Cluster' 列
plot_data = df[['TRAN_AMT', 'HOLDING_TIME', 'Cluster']]

# 使用 seaborn 进行可视化
sns.scatterplot(x='TRAN_AMT', y='HOLDING_TIME', hue='Cluster', data=plot_data)
plt.title('Cluster Visualization')
plt.xlabel('Transaction Amount')
plt.ylabel('Holding Time')
plt.legend(title='Cluster')
plt.show()

4. 评估聚类质量

您可以使用轮廓系数等指标来评估聚类的质量。

from sklearn.metrics import silhouette_score

# 假设 'features' 是一个包含所有特征的 Pandas Series 或 DataFrame
# 计算轮廓系数
silhouette = silhouette_score(df['features'], df['Cluster'])
print(f"Silhouette Score: {silhouette}")

5. 调整聚类参数

如果聚类结果不理想,您可以尝试调整 K-Means 算法的参数,例如 K 值、初始化方法等。

from sklearn.cluster import KMeans

# 使用不同的 K 值来训练 K-Means 模型
k_values = [2, 3, 4, 5, 6]
for k in k_values:
    kmeans = KMeans(n_clusters=k, random_state=0).fit(df.drop('Cluster', axis=1))
    df['Cluster'] = kmeans.labels_
    # 重复上述分析步骤来评估不同 K 值的聚类结果

通过上述方法,您可以对 Pandas DataFrame 中的 K-Means 聚类结果进行详细分析,并根据分析结果调整聚类策略。这些方法将帮助您更好地理解数据的结构,并为进一步的数据探索和业务决策提供支持。