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

使用sklearn执行fit_transform时如何忽略索引列进行MDS降维?

问题原因

你出现报错是因为两个未注意到的代码问题:

  • df.set_index('Tissue')没有赋值回原变量,执行后df仍然保留Tissue列,并没有真的将Tissue设为索引,传入MDS计算时会把Tissue列的字符串也带入计算,触发类型错误
  • 构造DataFrame时所有基因的数值都是用字符串格式传入的(包裹了引号),即使你正确筛选了基因列,也需要先转成浮点型才能被MDS算法识别计算
解决方案

两种常用实现方式都可以满足需求,不需要手动先移除再加回Tissue信息:

方案1:正确设置索引后执行计算

# 把Tissue列设为索引,赋值回df完成修改
df = df.set_index('Tissue')
# 将所有基因列转换为浮点型数值
df = df.astype(float)

# 执行MDS降维
mds = MDS(2, random_state=0)
df_2d = mds.fit_transform(df)

# 合并降维结果与Tissue索引,方便后续绘图分组
mds_result = pd.DataFrame(df_2d, columns=['MDS1', 'MDS2'], index=df.index).reset_index()

方案2:显式选择基因列计算,保留原DataFrame结构

如果不想修改原df的结构,可以直接指定参与计算的基因列:

# 筛选所有基因列,转换为浮点型
gene_cols = [col for col in df.columns if col.startswith('Gene')]
gene_data = df[gene_cols].astype(float)

# 执行MDS降维
mds = MDS(2, random_state=0)
df_2d = mds.fit_transform(gene_data)

# 合并降维结果与原Tissue列
mds_result = pd.DataFrame(df_2d, columns=['MDS1', 'MDS2'])
mds_result['Tissue'] = df['Tissue']

后续如果要绘制分组MDS散点图,直接使用合并了Tissue信息的mds_result即可按组织类型给点上色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:09:01