构建AI癌症分类模型遇Data cardinality错误,求修复方案
问题分析与解决
核心错误原因
报错Data cardinality is ambiguous是因为训练集的特征数据(x_train)和标签数据(y_train)样本数量不匹配,根源是train_test_split的返回值顺序写错。
代码中的具体问题及修复步骤
1. 训练集/测试集拆分顺序错误
原代码:
x_train, x_test, y_test, y_train = train_test_split(x, y, test_size=0.2)
train_test_split的标准返回顺序是x_train, x_test, y_train, y_test,你把y_train和y_test写反了,导致y_train实际是测试集标签,样本数仅为总数据的20%,和x_train的80%样本数不匹配。
修复后:
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
2. 输入层input_shape参数错误
原代码:
model.add(tf.keras.layers.Dense(256, input_shape=x_train.shape, activation='sigmoid'))
input_shape需要指定单个样本的特征维度,而非整个训练集的形状。x_train.shape返回(样本数, 特征数),应取第二个维度即特征数量。
修复后:
model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation='sigmoid'))
3. 损失函数名称拼写错误
原代码:
model.compile(optimizer='adam', loss='binary_crossentrop', metrics=['accuracy'])
损失函数binary_crossentropy少写了最后一个字母y,会导致无法识别该损失函数。
修复后:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
完整修复后的代码
import pandas as pd dataset = pd.read_csv('cancer.csv') x = dataset.drop(columns=["diagnosis(1=m, 0=b)"]) y = dataset["diagnosis(1=m, 0=b)"] 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) import tensorflow as tf model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation='sigmoid')) model.add(tf.keras.layers.Dense(256, activation='sigmoid')) model.add(tf.keras.layers.Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=1000)
内容的提问来源于stack exchange,提问作者user24242174
相关产品推荐
相关产品推荐

