MLPClassifier:预期的2D数组取而代之的是1D数组

时间:2018-07-19 20:32:10

标签: python arrays

伙计们,我是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:预期的2D数组,取而代之的是1D数组: 数组= [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:未知标签类型:(数组([4.95100000e-02、8.58400000e-02、8.08000000e-02,...,        6.66883984e + 03,6.30685010e + 03,7.49379980e + 03]),)

,并在第一行(包含目录)的“警告”:

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

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

1 个答案:

答案 0 :(得分: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的范围。