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
相关产品推荐
相关产品推荐

