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

在R中执行k-means聚类(k=3)时出错,寻求解决方案

K-Means聚类代码报错排查(k=3)

我尝试将数据划分为3个聚类,但运行代码时kmeans()函数报错,代码如下:

#Compute k-means with k=3
library(ggplot2)
library(cluster)
library(factoextra)
library(tidyverse)
library(FactoMineR)

set.seed(123)
protein2 <- read_csv("Downloads/protein.csv")
k1<- kmeans(protein2, centers=3, nstart=25)
print(k1)

我的数据集第一列是字符型的国家名称(如Albania、Austria),其余列均为数值型的蛋白质摄入相关指标(如RedMeat、Fish、Eggs等)。


错误原因

K-Means是基于距离计算的聚类算法,仅支持数值型输入。你的protein2数据框包含字符型的国家名称列,直接传入kmeans()会触发类型不兼容的错误。

修复方案

移除字符型列,只保留数值型特征用于聚类:

# Compute k-means with k=3
library(ggplot2)
library(cluster)
library(factoextra)
library(tidyverse)
library(FactoMineR)

set.seed(123)
protein2 <- read_csv("Downloads/protein.csv")

# 提取数值型特征列(移除第一列的国家名称)
protein_numeric <- select(protein2, -1)
# 或者用索引筛选:protein_numeric <- protein2[, -1]

# 执行K-Means聚类
k1 <- kmeans(protein_numeric, centers=3, nstart=25)
print(k1)

# 可选:将聚类结果合并回原数据,方便后续分析
protein2$cluster <- k1$cluster
head(protein2)

额外优化建议

如果各特征的量纲差异较大(比如有的指标是个位数,有的是几十),建议先对数据做标准化处理,避免量纲影响聚类结果:

# 标准化数值特征
protein_scaled <- scale(protein_numeric)
# 基于标准化后的数据聚类
k1_scaled <- kmeans(protein_scaled, centers=3, nstart=25)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:20:27