Python做KMeans聚类时触发float64相关ValueError该如何修改
报错解决方案
你遇到的报错是因为输入KMeans模型的数据集不符合要求,存在缺失值、无穷值,或非数值类型数据,无法转换为float64格式参与计算,可按以下步骤修改代码:
- 首先确认你用于聚类的列是数值类型,不要将fuelType这类字符串分类列传入模型,优先按列名选取数据避免索引选取出错
- 对选中的数值列做缺失值、异常值清洗,删除或填充无效数据
- 修正绘图逻辑中不存在的列引用问题,避免二次触发报错
修改后的完整代码如下:
import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.cluster import KMeans # 读取数据集 dataset = pd.read_csv('autos1.csv', encoding= 'unicode_escape') # 按列名选取用于聚类的数值列,避免索引起始位置选错 x = dataset[['price', 'yearOfRegistration']] # 清洗数据:替换无穷值为NaN,删除所有包含空值的行 x = x.replace([np.inf, -np.inf], np.nan).dropna() # 初始化KMeans并训练 km = KMeans(n_clusters = 2, random_state = 21) km.fit(x) centers = km.cluster_centers_ print(centers) # 生成聚类结果,不需要重复fit,直接调用predict即可 clusters = x.copy() clusters['cluster_id'] = km.predict(x) # 第一张图修正x轴标签与输入数据匹配 plt.xlabel('fuelType') plt.ylabel('yearOfRegistration') plt.scatter(dataset['fuelType'], dataset['yearOfRegistration'], c='black') plt.show() # 第二张聚类结果图 plt.scatter(centers[:,0], centers[:,1], c = 'black', s = 100 , alpha = 0.9) plt.scatter(clusters['price'], clusters['yearOfRegistration'], c=clusters['cluster_id'], cmap='rainbow') plt.xlabel('price') plt.ylabel('yearOfRegistration') plt.show()
内容的提问来源于stack exchange,提问作者Maryna Azeez
相关产品推荐
相关产品推荐

