如何用scikit-learn对二维输入做训练测试划分?解决维度不匹配错误
解决train-test split样本数不一致问题及神经网络输入维度修正
问题根源
你当前构造的X = [X1, X2]是包含两个一维数组的列表,结构为2个样本,每个样本126个特征,但y是对应126个样本的标签数组,这导致train_test_split检测到输入样本数不匹配(2 vs 126),抛出ValueError。
而神经网络要求的输入格式是n_samples行,n_features列(每个样本对应一行,特征作为列),也就是形状为(126, 2)的二维数组。
修正步骤
合并特征为正确的输入矩阵
使用np.column_stack()将X1和X2按列合并,得到每行对应一个样本、包含两个特征的二维数组:import numpy as np from sklearn.model_selection import train_test_split X1 = np.arange(0,4*np.pi,0.1) # 共126个样本 X2 = np.cos(X1) y = np.sin(X1) # 合并为(n_samples, n_features)格式的二维数组 X = np.column_stack((X1, X2))此时
X.shape输出为(126, 2),符合要求。正常执行train-test拆分
修正X后,train_test_split可正确拆分数据:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4)拆分后的
X_train形状为(75, 2),X_test为(51, 2),与对应标签的样本数完全匹配。适配Keras神经网络输入
你后续设置的input_dim=2完全正确,因为每个样本包含2个特征,修正后的输入矩阵和该设置完美兼容:from keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(10, input_dim=2, activation='relu'))
验证要点
- 始终确保输入特征矩阵的形状为
(样本数, 特征数) - 拆分前可用
print(X.shape)和print(y.shape)确认两者样本数一致(均为126)
内容的提问来源于stack exchange,提问作者Formal_that
相关产品推荐
相关产品推荐

