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

K-means聚类的PCA处理遇类型错误,求教核主成分分析聚类方法

解决K-means结合核PCA时的TypeError: 'str'与'int'不支持'<'运算问题

嘿,这个错误我太熟了——你这是数据集里混了字符串类型的特征,而核PCA和K-means都是纯数值计算的算法,根本没法处理字符串,当算法尝试对包含字符串的特征矩阵做比较或运算时,直接就触发类型不匹配的报错了。

咱们先拆解问题:你的数据集里Genre列是Male/Female这种字符串值,这就是罪魁祸首。接下来一步步解决:

1. 先处理字符串分类特征

针对Genre这种无顺序的分类特征,最稳妥的是用独热编码,用pandas就能轻松实现:

import pandas as pd

# 假设你的数据存在DataFrame df中
# 对Genre列做独热编码,drop_first避免多重共线性
df = pd.get_dummies(df, columns=['Genre'], drop_first=True)

执行后会生成Genre_Male列,1代表男性,0代表女性,完美转换成数值型。

如果你好奇,标签编码(Label Encoding)虽然也能转,但只适合有顺序的分类(比如评分等级),这里Gender用独热编码更合理。

2. 移除无关列+标准化数值特征

首先,CustomerID是标识列,聚类完全用不上,先删掉:

df = df.drop('CustomerID', axis=1)

然后,核PCA对数据尺度很敏感,把数值特征(Age、年收入、消费评分)标准化一下,让它们处于同一尺度:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
numerical_features = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)']
df[numerical_features] = scaler.fit_transform(df[numerical_features])

3. 重新运行核PCA+K-means流程

现在数据全是数值型了,就可以正常执行你的分析流程:

from sklearn.decomposition import KernelPCA
from sklearn.cluster import KMeans

# 用核PCA降维,比如选rbf核,降到2维方便后续可视化
kpca = KernelPCA(n_components=2, kernel='rbf', random_state=42)
X_kpca = kpca.fit_transform(df)

# 执行K-means聚类,这里假设分5类(你可以用肘部法确定最优聚类数)
kmeans = KMeans(n_clusters=5, random_state=42)
cluster_labels = kmeans.fit_predict(X_kpca)

# 把聚类结果合并回原数据,方便后续分析
df['Cluster'] = cluster_labels

额外提醒

  • 跑之前可以用df.dtypes检查所有列的类型,确保没有遗漏的字符串列;
  • 核函数可以多试试(比如linear、poly),不同核函数对聚类效果影响不小;
  • 确定K-means最优聚类数的话,可以用肘部法或轮廓系数法,比直接指定更靠谱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:37:12