我正在使用其他4列按行自定义定义的函数来创建新的Pandas Dataframe列。
下面是列的结构,正在应用该函数。
创建的新列如下所示。
我写的函数如下:
def convert_credit_rows(row):
return np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32)
X_train['credit_balance'] = X_train.apply(convert_credit_rows, axis=1)
X_test['credit_balance'] = X_test.apply(convert_credit_rows, axis=1)
我将这个数据集提供给一个简单的神经网络,如下所示:
def CreditBalanceDetector():
X_train_credit_balance = X_train['credit_balance']
X_test_credit_balance = X_test['credit_balance']
model = Sequential()
model.add(Dense(20, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(6, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=0.0005),
metrics=['accuracy'])
early_stop = EarlyStopping(monitor='val_loss',patience=3)
model.fit(X_train_credit_balance, y_train, epochs=50, validation_data=
(X_test_credit_balance, y_test), callbacks=[early_stop])
但是当尝试训练模型时,出现以下错误。
尽管StackOverflow中有几个类似的问题,但解决方案表明这些方法对我不起作用。
如果有人能弄清楚我要去哪里,那将不胜感激。谢谢。
答案 0 :(得分:0)
我可以弄清楚代码中出了什么问题。在这里发贴给将来可能会受益的人。
在上面的代码中,我提供了Pandas Series对象作为X_train_credit_balance
和X_test_credit_balance
的数据类型,其中model.fit()
函数需要一个数组。如果我们按以下方式检查X_train_credit_balance
的单个元素,
print(X_train_credit_balance[0])
它将给出以下不是必需的输出:
array([30., 30.], dtype=float32)
更正代码
可以通过如下修改convert_credit_rows(row)
函数来纠正上述行为:
credit_list = []
def convert_credit_rows(row):
credit_list.append(np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32))
X_train_credit_balance = np.array(credit_list)
convert_credit_rows
函数将应用于创建(m,n)维数组列表的每一行-在这种情况下为credit_list。然后,下一步,我们可以通过credit_list
将np.array(credit_list)
转换为ndarray。如果我们在操作结束时打印出credit_list
,我们将看到正确格式化的数组,如下所示:
[[1. 2. 3.]
[1. 2. 3.]
[1. 2. 3.]
[1. 2. 3.]
[1. 2. 3.]
[1. 2. 3.]]
现在,如果我们打印出X_train_credit_balance
的类型,它将是<class 'numpy.ndarray'>
而不是Pandas Series对象。