sklearn Logistic Regression "ValueError: Found array with dim 3. Estimator expected <= 2."
sklearn Logistic Regression "ValueError: Found array with dim 3. Estimator expected <= 2."
我尝试解决 this problem 6 in this notebook。问题是通过使用来自 sklearn.linear_model
.
的 LogisticRegression 模型,使用 50、100、1000 和 5000 个训练样本在该数据上训练一个简单模型
lr = LogisticRegression()
lr.fit(train_dataset,train_labels)
这是我尝试执行的代码,它给了我错误。
ValueError: Found array with dim 3. Estimator expected <= 2.
有什么想法吗?
更新 1:将 link 更新到 Jupyter Notebook。
scikit-learn 需要 2d num 数组作为 fit 函数的训练数据集。您传入的数据集是一个 3d 数组,您需要将该数组重塑为 2d。
nsamples, nx, ny = train_dataset.shape
d2_train_dataset = train_dataset.reshape((nsamples,nx*ny))
在 LSTM、GRU 和 TCN 层中,Dence 层之前最后一层的 return_sequence 必须设置为 False 。
这是您遇到此错误消息的情况之一。
如果有人在使用 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
您的模型中的最后一个“lstm”层可能使用“return_sequences=True”。
将其更改为 false 以不 return 进一步 lstm 模型的输出。
我在解决图像分类问题时遇到了类似的错误。我们有一个三维矩阵:第一维是图片总数,可以用“-1”代替,第二维是图片的高和宽的乘积,第三维等于三,因为RGB 图像具有三个通道(红色、绿色和蓝色)。如果我们不想丢失关于图像颜色的信息,那么我们使用x_train.reshape(-1, nxny3)。如果可以忽略颜色从而减小矩阵的大小:x_train.reshape(-1, nxny1)
我尝试解决 this problem 6 in this notebook。问题是通过使用来自 sklearn.linear_model
.
lr = LogisticRegression()
lr.fit(train_dataset,train_labels)
这是我尝试执行的代码,它给了我错误。
ValueError: Found array with dim 3. Estimator expected <= 2.
有什么想法吗?
更新 1:将 link 更新到 Jupyter Notebook。
scikit-learn 需要 2d num 数组作为 fit 函数的训练数据集。您传入的数据集是一个 3d 数组,您需要将该数组重塑为 2d。
nsamples, nx, ny = train_dataset.shape
d2_train_dataset = train_dataset.reshape((nsamples,nx*ny))
在 LSTM、GRU 和 TCN 层中,Dence 层之前最后一层的 return_sequence 必须设置为 False 。 这是您遇到此错误消息的情况之一。
如果有人在使用 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
您的模型中的最后一个“lstm”层可能使用“return_sequences=True”。 将其更改为 false 以不 return 进一步 lstm 模型的输出。
我在解决图像分类问题时遇到了类似的错误。我们有一个三维矩阵:第一维是图片总数,可以用“-1”代替,第二维是图片的高和宽的乘积,第三维等于三,因为RGB 图像具有三个通道(红色、绿色和蓝色)。如果我们不想丢失关于图像颜色的信息,那么我们使用x_train.reshape(-1, nxny3)。如果可以忽略颜色从而减小矩阵的大小:x_train.reshape(-1, nxny1)