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

Python KMeans聚类筛选损失低于阈值的簇头及ValueError报错解决

聚类筛选低损失簇头解决方案

报错原因

你构造的min_losses是嵌套列表结构,每个元素是[损失值]的单元素列表,而你传入index()方法的min_loss_temp结构与列表元素不匹配,无法找到对应下标,因此抛出ValueError。

完整实现代码

import warnings
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans

%matplotlib inline
warnings.filterwarnings('ignore')

# 原始损失数据
loss_data = np.array([1.453158736228, 4.71358454227, 2.22189044952, 1.369125723838, 1.294319868087, 3.604614257, 1.282392263412,
1.035766720771, 3.537582755088, 1.647409796714, 2.12351524829, 1.522501230239, 1.092259526252, 3.8876036, 2.12351319])
df = loss_data.reshape(-1, 1)

# KMeans聚类,设置n_clusters=3和你的簇划分对应
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(df)

# 整合为结构化数据表,三列分别对应元素索引、簇编号、损失值
result_df = pd.DataFrame({
    'element': range(len(loss_data)),
    'Clusters': clusters,
    'loss': loss_data
})

# 筛选损失低于阈值3的记录,对应你期望的输出结果
threshold = 3
filtered_res = result_df[result_df['loss'] < threshold].reset_index(drop=True)
print("损失低于阈值的所有元素:")
print(filtered_res)

# 如果需要额外提取每个簇的最小损失簇头,新增以下代码即可
cluster_heads = result_df[result_df['loss'] < threshold].groupby('Clusters', as_index=False).apply(lambda x: x[x['loss'] == x['loss'].min()]).reset_index(drop=True)
print("\n各簇最小损失簇头:")
print(cluster_heads)

功能说明

  • 用DataFrame整合索引、簇标签、损失值三类数据,避免手动维护列表对应关系出错
  • 筛选逻辑直接用布尔索引实现,比手动遍历列表更简洁不易出错
  • 若需要提取每个簇的最小损失簇头,用groupby按簇分组后取每组损失最小值对应的行即可

内容的提问来源于stack exchange,提问作者Alex AM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:08