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

关于Scikit-learn中KMeans聚类仅输入X轴值的疑问

关于Scikit-learn KMeans只传X轴的困惑解答

嘿,这个问题问得太戳中新手痛点了——刚上手聚类和Scikit-learn的时候,很多人都会在特征维度这里绕晕!咱们一步步拆解清楚:

首先,你代码里的关键细节:传入的是「单特征一维数据」,而非完整的二维坐标

你写的kmeans.fit(df["x"]),这里的df["x"]是Pandas的Series,形状是(3,)(对应3个样本)。而Scikit-learn的聚类模型要求输入是二维数组(样本数量 × 特征数量),所以它会自动把这个一维Series转换成形状为(3,1)的二维数组——简单说,就是把每个x值当成一个独立的「单特征样本」,完全没用到y列的数据。

那模型怎么计算距离?用的是一维空间的欧氏距离

你熟悉的二维欧氏距离公式是sqrt( (x2-x1)^2 + (y2-y1)^2 ),但如果是只有x这一个特征的一维场景,公式就简化成了|x2 - x1|(根号里只有(x2-x1)^2,开根号就是绝对值)。这时候模型是在一维数轴上对x值分组,比如你的例子里x是5、6、7,分成2类的话,可能会把5单独归为一类,6和7归为另一类,和y的8、9、10完全没关系。

怎么让模型用到X和Y两个维度?

如果你想实现最初理解的「二维空间相似点分组」,必须把两个特征都传给模型,代码要改成:

from sklearn.cluster import KMeans
kmeans = KMeans(2)
# 用双层方括号,得到形状为(3,2)的二维数组,包含x和y两个特征
kmeans.fit(df[["x", "y"]])

这时候模型才会用你熟悉的二维欧氏距离公式,对(x,y)坐标点进行聚类。

最后再划个重点

  • 只传df["x"]时,模型完全丢弃了y列数据,做的是一维聚类,和你最初想的二维坐标分组不是一回事
  • Scikit-learn的聚类模型默认处理「多特征样本」,输入必须是二维数组(哪怕只有一个特征,也要转成(n,1)的形状)
  • 要实现二维空间的点聚类,一定要传入包含所有需要用到的特征的数组

内容的提问来源于stack exchange,提问作者Alireza Hosseini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:59:24