You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于条件获取给定数据的k个聚类均值?含MSE数据实例

解决方案

我来帮你搞定这个聚类分析的需求,用Python的pandas和scikit-learn工具就能轻松实现。下面分步骤给你演示:

1. 数据加载与初步筛选

首先我们需要把CSV文件加载进来,然后筛选出MSE小于指定阈值(比如40)的数据。这里假设你的CSV文件名为mse_data.csv:

import pandas as pd
from sklearn.cluster import KMeans

# 加载CSV数据
df = pd.read_csv('mse_data.csv')

# 筛选MSE小于40的数据
threshold = 40
filtered_df = df[df['mse'] < threshold].copy()  # 用copy避免SettingWithCopyWarning

2. 两聚类分析(获取所属聚类及聚类均值)

接下来对筛选后的MSE数据做两聚类,给每条数据打上聚类标签,再计算每个聚类的均值:

# 提取用于聚类的特征(这里只有MSE列)
X = filtered_df[['mse']]

# 初始化KMeans模型,设置聚类数为2
kmeans = KMeans(n_clusters=2, random_state=42)  # random_state保证结果可复现

# 拟合模型并预测聚类标签
filtered_df['cluster_label'] = kmeans.fit_predict(X)

# 计算每个聚类的均值
cluster_means = filtered_df.groupby('cluster_label')['mse'].mean().reset_index()
cluster_means.columns = ['cluster_label', 'cluster_mean_mse']

# 输出结果
print("各数据所属聚类:")
print(filtered_df[['date', 'mse', 'cluster_label']])
print("\n各聚类对应的均值:")
print(cluster_means)

运行这段代码后,你会看到每条符合条件的数据都被标记了0或1的聚类标签,同时得到两个聚类的MSE均值。

3. 通用的基于条件获取k个聚类均值的方法

如果之后你需要调整阈值、聚类数,或者更换筛选条件,可以把逻辑封装成一个通用函数,方便复用:

def get_k_cluster_means(csv_path, condition, n_clusters):
    """
    基于指定条件筛选数据,并计算k个聚类的均值
    参数:
        csv_path: CSV文件路径
        condition: 筛选条件(比如lambda df: df['mse'] < 40)
        n_clusters: 聚类数量
    返回:
        filtered_with_cluster: 带聚类标签的筛选后数据
        cluster_means: 各聚类的均值统计
    """
    # 加载数据
    df = pd.read_csv(csv_path)
    # 应用筛选条件
    filtered_df = condition(df).copy()
    # 提取特征
    X = filtered_df[['mse']]
    # 聚类
    kmeans = KMeans(n_clusters=n_clusters, random_state=42)
    filtered_df['cluster_label'] = kmeans.fit_predict(X)
    # 计算聚类均值
    cluster_means = filtered_df.groupby('cluster_label')['mse'].mean().reset_index()
    cluster_means.columns = ['cluster_label', 'cluster_mean_mse']
    return filtered_df, cluster_means

# 调用示例:筛选MSE<40,做3聚类
filtered_data, means = get_k_cluster_means(
    'mse_data.csv',
    condition=lambda df: df['mse'] < 40,
    n_clusters=3
)

print(filtered_data[['date', 'mse', 'cluster_label']])
print(means)

这个函数可以灵活适配不同的筛选条件(比如lambda df: df['mse'].between(10, 50))和聚类数,非常实用。

注意事项

  • 因为我们只用到MSE值做聚类,所以特征矩阵是单维度的,KMeans依然可以正常工作;如果有多特征的情况,只需要调整X = filtered_df[['feature1', 'feature2']]即可。
  • 设置random_state是为了让每次运行聚类的结果一致,方便调试和对比。

内容的提问来源于stack exchange,提问作者Souvik Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:51:14