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

Indian Pines数据集分类:类别均衡采样报错及解决方法

解决Indian Pines数据集均衡采样的报错问题

问题背景

使用维度为145×145×200的Indian Pines(IP)数据集开展深度学习分类任务,尝试通过groupby方法从每个类别中选取等量训练样本时,出现ValueError: Index data must be 1-dimensional及Must pass 2-d input. shape=(145, 145, 200)错误。

错误原因

  1. 维度不匹配:原代码中X是3维数组(图像高度×宽度×波段数),直接转成DataFrame时无法正确映射为表格结构;y是2维标签矩阵,作为DataFrame索引时要求必须是1维数组,因此触发索引维度错误。
  2. 特征与标签对应错误:未将图像的每个像素点(对应一个样本)与标签一一对应,导致DataFrame构建逻辑混乱。

解决方案代码

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

sample_size = 3

# 1. 展平特征和标签:将3维特征转为2维,2维标签转为1维
X_flatten = X.reshape(-1, X.shape[-1])  # 形状变为 (145*145, 200)
y_flatten = y.flatten()  # 形状变为 (145*145,)

# 2. 构建DataFrame:特征列对应各波段,标签列单独命名为'y'
df = pd.DataFrame(X_flatten)
df['y'] = y_flatten

# 3. 按类别分组并采样指定数量样本
balanced_samples = df.groupby('y').apply(lambda x: x.sample(n=sample_size, random_state=42)).reset_index(drop=True)

# 4. 提取均衡后的特征和标签
X_balanced = balanced_samples.drop('y', axis=1).values  # 形状:(类别数×sample_size, 200)
y_balanced = balanced_samples['y'].values

# 若后续需适配CNN的3维输入,可恢复维度(示例)
# X_balanced = X_balanced.reshape(-1, 1, 1, 200)

关键步骤说明

  • 展平操作:将二维图像的每个像素点作为独立样本,使特征和标签都转为1维/2维结构,符合DataFrame的表格存储要求。
  • DataFrame构建:先将展平后的特征数组转为多列DataFrame(每列对应一个光谱波段),再添加标签列,避免索引维度错误。
  • 分组采样:通过groupby('y')按标签分组,sample()方法实现每组等量采样,random_state参数保证采样结果可复现。

内容的提问来源于stack exchange,提问作者Kumi Rani Research Scholar Dep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:37:32