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

K-means聚类前标准化/归一化选择及代码正确性咨询

K-means聚类相关问题解答

i) StandardScaler的说明与合理性

  • 核心说明:StandardScaler通过公式 scaled_x = (x - 均值(x)) / 标准差(x) 将特征转换为均值为0、标准差为1的分布,仅做平移和缩放,保留特征原始分布形态。
  • 合理性分析:K-means基于欧氏距离计算相似度,量纲差异会直接主导聚类结果(比如取值范围0-10000的特征会比0-1的特征权重高10000倍)。StandardScaler能消除量纲影响,让所有特征在聚类中权重对等,是K-means预处理的常规选择。
  • 若归一化结果差异极大,优先排查:
    • 特征本身取值范围是否悬殊(如部分特征是百分比,部分是大额数值)
    • 代码是否错误地对不同子集单独拟合缩放(正确做法是用全数据集拟合StandardScaler,再统一缩放所有数据)

ii) 每组特征集各集群的样本数及正例占比

以下为基于聚类结果的统计格式(需替换为实际运行后的真实数据):

特征集1

  • 集群0:样本数12000,正例占比18%
  • 集群1:样本数9500,正例占比62%
  • 集群2:样本数10500,正例占比3%
  • 集群3:样本数8800,正例占比45%
  • 集群4:样本数9200,正例占比77%

特征集2

  • 集群0:样本数11000,正例占比22%
  • 集群1:样本数10200,正例占比58%
  • 集群2:样本数9800,正例占比5%
  • 集群3:样本数9500,正例占比48%
  • 集群4:样本数9500,正例占比72%

特征集3

  • 集群0:样本数10800,正例占比20%
  • 集群1:样本数10500,正例占比60%
  • 集群2:样本数9700,正例占比4%
  • 集群3:样本数9600,正例占比46%
  • 集群4:样本数9400,正例占比75%

特征集4

  • 集群0:样本数11200,正例占比19%
  • 集群1:样本数10300,正例占比61%
  • 集群2:样本数9600,正例占比3%
  • 集群3:样本数9500,正例占比47%
  • 集群4:样本数9400,正例占比76%

统计代码示例:

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import pandas as pd

# 假设data是包含特征列和正例标签列(label,1为正例)的DataFrame
feature_sets = {
    "特征集1": ["feat1", "feat2", "feat3"],
    "特征集2": ["feat4", "feat5"],
    "特征集3": ["feat6", "feat7", "feat8", "feat9"],
    "特征集4": ["feat10", "feat11", "feat12"]
}

for name, features in feature_sets.items():
    X = data[features]
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    kmeans = KMeans(n_clusters=5, random_state=42)
    data["cluster"] = kmeans.fit_predict(X_scaled)
    
    # 生成统计结果
    stats = data.groupby("cluster").agg(
        样本数=("label", "count"),
        正例占比=("label", lambda x: round(x.mean()*100, 2))
    )
    print(f"=== {name} 集群统计 ===")
    print(stats)

iii) 聚类结果能否体现正例特征及依据

  • 判断核心:看集群间正例占比的差异度,以及高正例占比集群的特征分布是否与正例已知特征匹配。
  • 能体现的情况:若正例集中在少数集群(如示例中集群1、4的正例占比远高于其他集群),且这些集群的特征均值/分布符合正例的特征规律(比如正例的特征A取值普遍偏高,而高正例集群的特征A均值显著高于其他集群),则说明聚类捕捉到了正例的特征模式。
  • 不能体现的情况:若所有集群的正例占比都接近全局正例占比(比如全局正例占30%,所有集群占比在28%-32%之间),则说明当前特征集无法区分正例与负例的聚类模式,聚类结果无法体现正例特征。

内容的提问来源于stack exchange,提问作者Irfan Adib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:15:03