python程序中的错误。 “预期为2D数组,但改为有1D数组”

时间:2018-11-23 05:16:23

标签: python scikit-learn

我正在尝试预测价格以及绘制图表以可视化数据。但是有一个错误,我无法弄清楚。

dates=[]
prices=[]

def getdata(filename):
    with open(filename,'r') as csvfile:
        csvFilereader=csv.reader(csvfile)
        next(csvFilereader)
        for row in csvFilereader:

            dates.append(int(row[0].split('-')[0]))
            prices.append(float(row[1]))
    return
def predicted_price(dates, prices, x):

    dates=np.reshape(dates,len(dates),1)


    svr_linear= SVR(kernel='linear', C=1e3)
    svr_poly= SVR(kernel='poly', C=1e3, degree=2)
    svr_rbf= SVR(kernel='rbf', C=1e3, gamma=0.1)

    svr_linear.fit(dates,prices)
    svr_poly.fit(dates,prices)
    svr_rbf.fit(dates,prices)

    plt.scatter(dates,prices, color='black', label='Data')
    plt.plot(dates, svr.rbf.predict(dates), color='red', label='RBF Model')
    plt.plot(dates, svr.poly.predict(dates), color='blue', label='Poly Model')
    plt.plot(dates, svr.linear.predict(dates), color='green', label='Linera Model')

    plt.xlabel('Dates')
    plt.ylabel('Prices')
    plt.title('Regression')

    plt.legend()
    plt.show()

    return svr_rbf.predict(x)[0], svr_linerar.predict(x)[0], svr_poly(x)[0]


getdata('D:\\android\\trans1.csv')


predicted_prices=predicted_price(dates,prices,10)
print(predicted_prices)

这是我得到的错误:

Expected 2D array, got 1D array instead:
array=[19102018. 19102018. 19102018. ... 22102018. 20102018. 23102018.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

更改预测价格:

(dates,prices,10)

([dates,prices,10])

给出此错误:

predicted_price() missing 2 required positional arguments: 'prices' and 'x'

这是数据的图像:

date and price data

1 个答案:

答案 0 :(得分:0)

此代码至少有3个问题:

  • getdata什么也不return。它仅适用于datesprices是全局的。将它们都移到getdatareturn dates, prices
  • SVR未导入(我想是sklearn)
  • 错误消息告诉您:dates = dates.reshape(-1, 1)

关于参数的子问题

  

更改预测价格:

     

(日期,价格,10)   

     

([日期,价格,10])   出现此错误:

     

predicted_price()缺少2个必需的位置参数:“ prices”和“ x”

编写[dates,prices,10]时,您将构建一个列表。这是您传递给函数的列表。但是该函数需要3个参数,而不是1个。因此,将其命名为predicted_price(dates,prices,10)

另一个说明:大括号(...)属于函数,而不属于数据。这很重要,因为

predicted_price(dates,prices,10)

不同于

predicted_price((dates,prices,10))

第一个是正确的,第二个是构造一个元组并将其传递给predicted_price

如果您可以制作一个包含一些数据的minimal complete example,则可能需要征求有关codereview.stackexchange.com的反馈