Scikit-learn KMeans聚类报错怎么办?教你一招避坑 博客主页瑕疵的CSDN主页 Gitee主页瑕疵的gitee主页⏩ 文章专栏《热点资讯》被KMeans的NaN坑到凌晨三点终于摸清了根儿目录昨晚改代码改到眼冒金星就为这个KMeans报错ValueError: Input contains NaN, infinity or a value too large for dtype(float64)直接卡在kmeans.fit(X)这行试了三遍数据集每次都是这鬼报错。气得我摔了咖啡杯——数据明明是干净的啊根源就一个字NaNScikit-learn的KMeans对缺失值零容忍。我本地跑的CSV有几行空值但肉眼没看出来毕竟用Pandas看表时默认隐藏了NaN。更坑的是报错信息里连哪列有NaN都不说纯纯的“黑箱报错”。错误示范我刚入行时写的fromsklearn.clusterimportKMeans# 直接用原始数据含NaNXpd.read_csv(data.csv)# 有3列含NaNkmeansKMeans(n_clusters4)kmeans.fit(X)# 一跑就崩注释天真以为数据是干净的结果KMeans在底层检查时发现NaN直接抛异常。别问问就是血泪史。正确姿势现在秒级解决fromsklearn.imputeimportSimpleImputerfromsklearn.clusterimportKMeans# 先处理缺失值关键步骤imputerSimpleImputer(strategymean)# 用均值填充X_cleanimputer.fit_transform(X)# 返回numpy数组# 再聚类kmeansKMeans(n_clusters4,random_state42)kmeans.fit(X_clean)注释SimpleImputer是Scikit-learn自带的填充工具strategymean自动算列均值补缺fit_transform直接返回处理后的数据避免Pandas和numpy混用坑加random_state防随机性聚类结果可复现避坑总结血的教训数据进KMeans前必做检查print(X.isnull().sum().sum())# 直接看总缺失数别靠眼睛print(X.dtypes)# 确认列类型避免object类型被误当数值别信“数据是干净的”我上次用df.dropna()删了整行结果聚类结果歪了——缺失值不是垃圾而是信息用均值/中位数填充比删行更合理。报错时盯住具体行如果报错在fit大概率是输入数据问题在transform可能是测试集有新缺失。别乱改算法先查数据。图左边原始数据有空值右边填充后数值完整KMeans才能跑最后说句大实话KMeans报错90%是数据问题不是算法问题。我踩过这坑三次现在一看到ValueError就先跑isnull().sum()。别等凌晨三点才改数据干净了聚类才香。字数688
💡
读完这篇文章,你可以带走什么

本文来自编程新知一线开发与建站实战沉淀:讲清原理、给出可复现步骤、标注避坑要点。看完后可以直接在你的项目或网站中落地验证。

编程新知内容团队
一线开发 · 建站实施 · 持续更新
由资深前端工程师、后端架构师与建站实施人员共同维护,坚持"真实案例 + 完整步骤 + 避坑指南"的内容准则。如果你在落地中遇到问题,欢迎联系我们交流。

想把这套方案用到自己的项目上?

编程新知提供技术答疑与网站建设一站式服务,欢迎联系我们获取针对性建议。

联系工程师
📚

系统学习该技术

进入对应栏目,从基础到进阶完整学习,配套案例与避坑指南。

前往栏目 →
🏗️

需要落地实施

企业建站、SEO 优化、服务器部署等需求,交给工程师一步到位。

了解服务 →
💬

还有疑问

技术难题或方案咨询,联系编程新知获取一对一的专业建议。

联系我们 →