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

Python实现K-Means四聚类绘图报IndexError问题求助

K-Means绘图触发IndexError修复方案

代码里共有4处问题,按顺序修改即可解决报错:

  • 核心报错原因:特征矩阵维度和绘图索引不匹配。X=data.values.reshape(-1,1)会把所有数据强行压缩为只有1列的二维数组,列索引范围只有0,但绘图时你调用了X[..., 1]访问第二列,直接触发索引越界。如果要绘制二维聚类散点图,输入特征X至少需要保留2个数值维度,不要做单列reshape;如果是单特征聚类,无法绘制二维散点,需要调整可视化方式。
  • 语法错误:定义y变量时reshape前误写为逗号,正确写法是点调用,且当前代码全程未使用y变量,这行可以直接删除。
  • 拼写笔误:最后一个聚类散点的筛选条件误写为albel==3,正确变量名是label。
  • 冗余操作:你先调用了kmeans.fit(X)完成训练,后面又调用fit_predict(X)重复拟合模型,保留一次拟合即可。

修正后的参考代码:

# 数据清洗步骤保持不变
data = Bel_sort_cleaned.drop(['cprptp','JURISDICTION','STREET','ADDRESS','ddes1',                      
'DESCRIPTION','COM_BLDG_VALUE','OCCUPANCY','segments','OBJECTID'], axis=1)
data = data.dropna()

# 若要绘制二维散点图,至少选取2个数值特征作为输入,不要reshape为单列
# 示例:选取门牌号和另一个你需要参与聚类的数值字段
# X = data[['HOUSENUM', '替换为你的第二个数值列名']].values
X = data.values

# 模型训练,去掉重复拟合步骤
kmeans = KMeans(n_clusters=4, random_state=0)
label = kmeans.fit_predict(X)

# 修正拼写错误,确保列索引和X的维度匹配
plt.scatter(X[label==0, 0], X[label==0, 1], s=100, c='red', label='Cluster 1')
plt.scatter(X[label==1, 0], X[label==1, 1], s=100, c='blue', label='Cluster 2')
plt.scatter(X[label==2, 0], X[label==2, 1], s=100, c='green', label='Cluster 3')
plt.scatter(X[label==3, 0], X[label==3, 1], s=100, c='cyan', label='Cluster 4')
plt.legend()
plt.show()

补充说明:如果你剔除无关列后,数据集里只剩HOUSENUM一个数值字段,X将始终只有1列,无法用当前的二维散点代码可视化,需要补充第二个参与聚类的数值特征,或改用直方图、箱线图展示单特征的聚类分布。

内容的提问来源于stack exchange,提问作者Sierra Walker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:42:16