You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)的二维数组。

修正步骤

  1. 合并特征为正确的输入矩阵
    使用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),符合要求。

  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),与对应标签的样本数完全匹配。

  3. 适配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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:05:28