【问题标题】:sklearn Logistic Regression "ValueError: Found array with dim 3. Estimator expected <= 2."sklearn 逻辑回归“ValueError:找到暗淡 3 的数组。估计器预期 <= 2。”
【发布时间】:2016-04-30 13:18:52
【问题描述】:

我试图解决this problem 6 in this notebook。问题是使用来自sklearn.linear_model 的 LogisticRegression 模型,使用 50、100、1000 和 5000 个训练样本来训练一个简单的模型。

lr = LogisticRegression()
lr.fit(train_dataset,train_labels)

这是我试图做的代码,它给了我错误。

ValueError: 找到暗淡为 3 的数组。预计估计器

有什么想法吗?

更新 1:更新 Jupyter Notebook 的链接。

【问题讨论】:

  • 这个问题的github链接现在已经失效了。

标签: python scikit-learn logistic-regression


【解决方案1】:

scikit-learn 期望 fit 函数的训练数据集使用 2d num 数组。您传入的数据集是一个 3d 数组,您需要将数组重塑为 2d。

nsamples, nx, ny = train_dataset.shape
d2_train_dataset = train_dataset.reshape((nsamples,nx*ny))

【讨论】:

  • 您介意解释一下 ndarray.reshape 如何神奇地将 3D 数据转换为 2D 而不丢失原始向量表示的信息吗?
  • 第一个维度保持不变,其他两个维度被展平(因此 28x28 变为 784)。拟合算法接下来将考虑样本一的前 784 个特征部分,以及样本二的接下来的 784 个特征部分,依此类推。
  • 我的 X 数据与 y 标签是分开的。如何使用此答案展平 X 训练数据集? Y 标签是一个 5k 数组。 X_train 是 5k x 1024 x 1024
  • 您是对的,但您是如何获得这些信息的? documentation 明确表示 Parameters: X : {array-like, sparse matrix}, shape (n_samples, n_features)
  • 因此,如果我以这种方式重塑我的数据,对其进行拟合并预测我的 y。我的 y 的形状现在是 (nsamples, 1)。但是我需要 y 是 (nx,ny) 因为我需要每个像素的标签。这种情况我该怎么办?
【解决方案2】:

在 LSTM、GRU 和 TCN 层中,Dence 层之前最后一层的 return_sequence 必须设置为 False 。 这是您遇到此错误消息的条件之一。

【讨论】:

    【解决方案3】:

    如果有人在两个或多个时间序列中使用 LSTM 或任何 RNN 时偶然发现这个问题,这可能是一个解决方案。

    但是,对于那些希望预测两个不同值之间的误差的人,例如,如果您尝试预测两个完全不同的时间序列,那么您可以执行以下操作:

    from sklearn import mean_squared_error 
    # Any sklearn function that takes 2D data only
    # 3D data
    real = np.array([
        [
            [1,60],
            [2,70],
            [3,80]
        ],
        [
            [2,70],
            [3,80],
            [4,90]
        ]
    ]) 
    
    pred = np.array([
        [
            [1.1,62.1],
            [2.1,72.1],
            [3.1,82.1]
        ],
        [
            [2.1,72.1],
            [3.1,82.1],
            [4.1,92.1]
        ]
    ])
    
    # Error/Some Metric on Feature 1:
    print(mean_squared_error(real[:,:,0], pred[:,:,0]) # 0.1000
    
    # Error/Some Metric on Feature 2:
    print(mean_squared_error(real[:,:,1], pred[:,:,1]) # 2.0000
    

    Additional Info from the numpy indexing

    【讨论】:

      【解决方案4】:

      您的模型中可能有最后一个“lstm”层,使用“return_sequences=True”。 将此更改为 false 以不返回其他 lstm 模型的输出。

      【讨论】:

        猜你喜欢
        • 2017-03-26
        • 2019-06-01
        • 2020-07-10
        • 2016-11-28
        • 2021-04-16
        • 2019-07-19
        • 2018-12-15
        • 2018-01-16
        • 2018-06-08
        相关资源
        最近更新 更多