Python 如何将数据集拆分为(X_列,y_列),(X_测试,y_测试)?

Python 如何将数据集拆分为(X_列,y_列),(X_测试,y_测试)?,python,tensorflow,keras,scikit-learn,Python,Tensorflow,Keras,Scikit Learn,我使用的培训和验证数据集是为了再现性 validation\u dataset.csv是training\u dataset.csv的基本事实 我在下面做的是将数据集输入一个简单的CNN层,该层提取图像的有用特征,并将其作为1D输入LSTM网络进行分类 从keras.models导入 从keras.layers导入致密、平坦 从keras.layers.voluminal导入Conv1D 从keras.layers导入LSTM 从keras.layers.voluminal导入MaxPoolg1

我使用的培训和验证数据集是为了再现性


validation\u dataset.csv
training\u dataset.csv
的基本事实

我在下面做的是将数据集输入一个简单的CNN层,该层提取图像的有用特征,并将其作为1D输入LSTM网络进行分类

从keras.models导入
从keras.layers导入致密、平坦
从keras.layers.voluminal导入Conv1D
从keras.layers导入LSTM
从keras.layers.voluminal导入MaxPoolg1d
从keras.layers导入TimeDistributed
从keras.layers导入退出
来自keras导入优化器
从keras.callbacks导入早期终止
作为pd进口熊猫
从sklearn.model\u选择导入列车\u测试\u拆分
将matplotlib.pyplot作为plt导入
从numpy导入genfromtxt
df_train=genfromtxt('data/train/training_dataset.csv',分隔符=',')
df_validation=genfromtxt('data/validation/validation_dataset.csv',分隔符=',')
#列车,测试=列车-测试-分割(df-列车,测试-尺寸=0.20,随机-状态=0)
df_列=df_列[…,无]
df_验证=df_验证[…,无]
批量大小=8
纪元=5
模型=顺序()
add(Conv1D(filters=5,kernel_size=3,activation='relu',padding='same'))
添加(最大池1d(池大小=2))
#model.add(TimeDistributed(flatte()))
model.add(LSTM(50,返回序列=True,经常性退出=0.2))
模型。添加(辍学(0.2))
型号.添加(LSTM(10))
模型。添加(辍学(0.2))
model.add(密集型(1,激活='sigmoid'))
adam=优化器。adam(lr=0.001,beta_1=0.9,beta_2=0.999,epsilon=None,decay=0.0)
compile(optimizer=“rmsprop”,loss='mse',metrics=['accurity'])
回调=[EarlyStoping('val_loss',耐心=3]
模型拟合(df\U序列、df\U验证、批量大小=批量大小)
打印(model.summary())
分数=模型。评估(df_训练,df_验证,详细=0)
打印(“精度:%.2f%%”%(分数[1]*100))
我想将培训和验证数据集拆分为
(X\u-train,y\u-train),(X\u-test,y\u-test)
,以便我可以使用这两个数据集进行培训和测试。我尝试了Scikit学习库的拆分函数-
train,test=train\u test\u split(df\u train,test\u size=0.20,random\u state=0)
,但调用
model.fit()
函数后出现以下错误

ValueError: Data cardinality is ambiguous:
  x sizes: 14384
  y sizes: 3596
Please provide data which shares the same first dimension.

我们如何将数据集拆分为共享同一维度的
(X\u-train,y\u-train)
(X\u-test,y\u-test)
。这里,我假设Y的列名是“target”

target = df_train['target']
df_train = df_train.drop(columns=['target'])
X_序列,X_测试,y_序列,y_测试=序列测试分割(df_序列,目标,测试尺寸=0.20,随机状态=0)

--

似乎我最初误解了您的问题,“validation_dataset.csv”是您的标签数据。我为没有正确阅读而道歉

在这种情况下,您不需要“target”变量,因为df_验证就是这样。因此,我认为以下措施可能有效:

X_train, X_test, y_train, y_test = train_test_split(df_train, df_validation, test_size=0.20, random_state=0)

您将df\U序列作为X传递给您的
model.fit()
df\U验证作为y传递给您的。你应该看看文档

代码应如下所示:

model.fit(X_train, y_train, validation_data=(X_val, y_val))

train\u test\u split
返回
x\u train,x\u test,y\u train,y\u test
,顺序为您分配的
y\u train
应该是
x\u test
,Marcus您没有指定您定义的目标
train,test=train\u test\u split(df\u train,test\u size=0.20,random\u state=0)
但是在训练时,你仍然调用你原来的
df_train
而不是
train
test
@AlexanderRiedel,我这样做只是为了避免错误。@Andrew,上面写着
ValueError:没有足够的值来解包(预期4,得到2)
X_val,y_val是什么?如果你试过的话,可以发布一个有用的代码片段吗。感谢您的
df_validation
中包含的功能,y_val是相应的标签。
validation_dataset.csv
是标签的内容,Antoine。如果您能看一下我的代码和数据集,我将不胜感激。谢谢你抽出时间。谢谢你,亚当。但是当我这样做时,我得到了这个错误
索引器:只有整数、切片(
)、省略号(
)、numpy.newaxis(
None
)和整数或布尔数组是有效的索引
是来自列车测试分割线或其他线的错误吗?不,它在
目标=df\u列车['target']
。顺便说一下,我们没有列名。这是一个像素数据是的,这是有意义的。不过我对你的数据集有点困惑。火车是什么?那么这意味着df_验证是标签还是图像?或者你在做其他事情?我刚从另一条评论中读到,你说“validation_dataset.csv”是标签。我将编辑答案。