【问题标题】:MLPClassifier: Expected 2D array got 1D array insteadMLPClassifier:预期的二维数组改为一维数组
【发布时间】:2019-06-05 04:27:20
【问题描述】:

伙计们,我是 Python 新手,也是神经网络的新手。我正在尝试实施一个神经网络来根据当天的开盘价预测比特币一天的收盘价。所以我得到了一个 CSV 文件,我尝试使用“打开”列作为条目,并使用“关闭”列作为目标,您可以在下面的代码中看到这一点:

from sklearn.neural_network import MLPClassifier
import numpy as np
import pandas as pd

dataset = pd.read_csv('BTC_USD.csv')

X = dataset['Open']
y = dataset['Close']

NeuralNetwork = MLPClassifier(verbose = True,
                       max_iter = 1000,
                       tol = 0,
                       activation = 'logistic')

NeuralNetwork.fit(X, y)

运行代码时出现此错误:

ValueError: 预期二维数组,得到一维数组: 数组=[4.95100000e-02 4.95100000e-02 8.58400000e-02 ... 6.70745996e+03 6.66883984e+03 7.32675977e+03].
如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果数据包含单个样本,则使用 array.reshape(1, -1)。

出现这个错误后,我在stackoverflow中做了一些研究,并尝试了其他帖子中提出的一些解决方案,比如这个:

from sklearn.neural_network import MLPClassifier
import numpy as np
import pandas as pd

dataset = pd.read_csv('BTC_USD.csv')

X = np.array(dataset[['Open']])
X = X.reshape(-1, 1)

y = np.array(dataset[['Close']])
y = y.reshape(-1, 1)

NeuralNetwork = MLPClassifier(verbose = True,
                       max_iter = 1000,
                       tol = 0,
                       activation = 'logistic')

NeuralNetwork.fit(X, y)

运行这段代码后,我得到了这个新错误:

ValueError: 未知标签类型: (array([4.95100000e-02, 8.58400000e-02, 8.08000000e-02, ...,
6.66883984e+03, 6.30685010e+03, 7.49379980e+03]),)

以及第一行(包含目录)的“警告”:

DataConversionWarning:当需要一维数组时,传递了列向量 y。请将 y 的形状更改为 (n_samples, ),例如使用 ravel()。
y = column_or_1d(y, warn=True)

你能帮帮我吗?我尝试了许多解决方案,但其中任何一个都有效。

【问题讨论】:

  • 您是否尝试过错误中提供的建议?更准确地说,在拟合之前添加y = y.ravel()或直接添加NeuralNetwork.fit(X, y.ravel())
  • 不,我没有,但我现在尝试并返回此错误:AttributeError: 'numpy.ndarray' object has no attribute 'rave1'
  • 它是ravel(),带有 L,而不是 1。
  • 哈哈哈对不起兄弟,但它还是没有用..我不知道该怎么办了
  • 能否提供数据集以便我们检查?

标签: python arrays


【解决方案1】:

您应该使用数据框的values 属性来获取一列的元素。另外,你要实现的是回归,而不是分类,所以必须使用回归器如MLPRegressor,如下

from sklearn.neural_network import MLPRegressor
import numpy as np
import pandas as pd

dataset = pd.read_csv('BTC_USD.csv')

X = dataset["Open"].values.reshape(-1, 1)
y = dataset["Close"].values

NeuralNetwork = MLPRegressor(verbose = True,
                             max_iter = 1000,
                             tol = 0,
                             activation = "logistic")
NeuralNetwork.fit(X, y)

代码现在可以运行,但结果不正确,因为您需要处理功能和网络超参数。但这超出了 SO 的范围。

【讨论】:

  • 在这里工作!如果我将 MLPClassifier 与您发布的确切代码一起使用,仍然无法正常工作,仅使用 Regressor,我发现这非常有趣且毫无意义(从初学者的角度来看)。感谢您对我的帮助,我将尝试了解 Regressor 以及这些指标之间的差异!
猜你喜欢
  • 2019-08-17
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 2021-03-01
  • 2019-10-07
  • 1970-01-01
  • 2019-03-28
  • 2021-04-16
相关资源
最近更新 更多