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

LSTM多分类任务的土地利用/覆盖分类数据集预处理问题求助

问题原因分析

你当前处理逻辑的核心问题是没有将原始长表格式的数据按New_id分组转换成LSTM所需的序列格式:

  • 原始数据为长表结构:每个多边形(唯一New_id)对应29行记录,每行存储单个日期的4个特征值
  • LSTM要求的输入维度为(样本数, 时间步长, 特征数),对应你的场景就是(约10000, 29, 4),分类标签的维度为(样本数, 分类数量)(多分类场景需要做独热编码)
    你当前没有按New_id做分组聚合,直接将全量行的特征转换为数组,维度完全不符合模型输入要求,因此触发维度不匹配报错。
正确预处理流程

1. 数据校验

先确认所有New_id的记录数一致,且单个New_id仅对应一个分类值,避免后续序列长度或标签错误:

# 检查每个New_id的记录数,正常结果应仅返回29,无其他数值
id_counts = df.groupby('New_id').size()
print(id_counts.value_counts())

# 检查单个New_id是否对应唯一Class,返回True则正常
print(df.groupby('New_id')['Class'].nunique().eq(1).all())

如果存在记录数不足29的New_id,可选择时间插值补全或直接删除样本;如果存在单个New_id对应多个Class的情况,需先修正原始数据的标注错误。

2. 构造序列特征与标签

按New_id分组,将每个样本的29天特征拼接为二维序列,同时提取对应分类标签:

import numpy as np
import pandas as pd

# 按New_id和日期排序,保证每个样本的时间序列顺序正确
df_sorted = df.sort_values(by=['New_id', 'data'])

features = []
labels = []

for new_id, group in df_sorted.groupby('New_id'):
    # 提取当前样本的4个特征序列,形状为(29, 4)
    seq = group[['VV', 'VH', 'RVI', 'RATIO']].values
    features.append(seq)
    # 提取当前样本的分类标签
    label = group['Class'].iloc[0]
    labels.append(label)

# 转换为numpy数组,此时X的形状已经符合LSTM输入要求
X = np.array(features)
y = np.array(labels)

# 多分类场景需对标签做独热编码
from tensorflow.keras.utils import to_categorical
y = to_categorical(y)

3. 数据集拆分

拆分训练集、验证集、测试集后即可输入LSTM模型训练:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
    X, y, 
    test_size=0.2, 
    random_state=42,
    stratify=y # 保持拆分后各类别比例和原数据集一致
)

内容的提问来源于stack exchange,提问作者Ana Paola Siri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:04