训练和测试特征形状与数据集中的列数不同

数据挖掘 喀拉斯 数据集 数据清理 特征工程 特征
2022-02-24 12:17:13

我正在制作一个用于回归的序列神经网络,其中包含 3 个密集层,这些层将在一个简单的数据集上进行训练。但在我开始执行模型的那部分代码之前,我得到的特征形状与数据集中的列不同。数据集的列包括:

  1. 一个分类的“名称”列,它是单热编码的

2)其他 20 列是整数/浮点数

我的数据集中有 21 个特征。ValueError 告诉我它期待 36 但只有 21 当我使用 X.shape 检查我的数据集的形状时,它告诉我形状是 (98,36)。我的数据集有 98 行 x 21 列。我的数据集中只有 21 个特征。它是如何变成 36 的形状的?

因此,当我尝试运行我的 Keras 模型时,我当然会收到此错误

错误 ValueError:层序贯_1 的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 21,但接收到形状的输入(无,36)

这是我导入和清理数据集时的代码

导入数据集

N_df_1 = pd.read_csv('/', error_bad_lines=False) #I can't show dataset paths 
N_df_2 = pd.read_csv('/', error_bad_lines=False)
N_df_3 = pd.read_csv('/', error_bad_lines=False)
N_df_4 = pd.read_csv('/', error_bad_lines=False)
N_df_5 = pd.read_csv('/', error_bad_lines=False)
N_df_6 = pd.read_csv('/', error_bad_lines=False)
N_df_7 = pd.read_csv('/', error_bad_lines=False)
N_df_8 = pd.read_csv('/', error_bad_lines=False)
N_df_9 = pd.read_csv('/', error_bad_lines=False)
N_df_10 = pd.read_csv('/', error_bad_lines=False)

清理数据

#Had to combine datasets through concatenation 
N_df = pd.concat([N_df_1, N_df_2, N_df_3, N_df_4,N_df_5 ,N_df_6, N_df_7,N_df_8, N_df_9, N_df_10 ignore_index=False, axis=0)

#Getting rid of all NaN values 
N_df.dropna(axis = 0, how = 'all', inplace = True)

编码分类数据

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X = np.array(ct.fit_transform(N_df))
1个回答

情况是您正在应用 One-Hot Encoding,这意味着它会使用每个变量的因子来增加列。假设您有一个二进制变量(男/女)。实际上,它是数据文件中的一列,看起来像。

在此处输入图像描述

它实际上是一列,但是当您对此功能进行单热编码时,它看起来像这样。

在此处输入图像描述

因此,您有 21 个特征减去 36 - 20,您的 name 变量中总共有 16 个名称。因此,您会遇到形状错误。