使用Pandas DataFrame与Keras训练ANN时遇数据适配器匹配错误
解决Keras模型
.fit()报错:Failed to find data adapter that can handle input... 问题原因
从错误详情能明确看到,你的X_train和y_train都是Pandas DataFrame类型。对于二分类的客户流失预测任务,Keras的model.fit()期望标签y是一维结构(比如Pandas Series或NumPy数组),而非二维的DataFrame,这才导致数据适配器无法识别输入格式。
解决方法
方法1:将y转换为NumPy数组
直接调用.values或.to_numpy()方法,把y_train转成NumPy一维数组:
model.fit(X_train, y_train.values, epochs=100) # 或者用to_numpy()更规范 model.fit(X_train, y_train.to_numpy(), epochs=100)
方法2:将y转换为Pandas Series
如果y_train是单列DataFrame,通过取列名或.squeeze()方法降维成Series:
# 假设y_train的列名为'churn' model.fit(X_train, y_train['churn'], epochs=100) # 或者用squeeze自动处理单列降维 model.fit(X_train, y_train.squeeze(), epochs=100)
方法3:统一转换X和y为NumPy数组(可选)
虽然Keras支持直接用DataFrame作为特征输入,但统一转成NumPy数组也能彻底解决格式问题:
model.fit(X_train.to_numpy(), y_train.to_numpy(), epochs=100)
修改后的完整代码示例
import tensorflow as tf from tensorflow import keras model = keras.Sequential([ keras.layers.Dense(26, input_shape=(26,), activation='relu'), keras.layers.Dense(15, activation='relu'), keras.layers.Dense(1, activation='sigmoid') ]) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 转换y_train为NumPy数组后训练 model.fit(X_train, y_train.to_numpy(), epochs=100)
内容的提问来源于stack exchange,提问作者RAKIB23424
相关产品推荐
相关产品推荐

