【问题标题】:LinearRegression by given last n rows给定最后 n 行的线性回归
【发布时间】:2020-04-09 15:25:15
【问题描述】:

我目前正在研究时间序列模型。这很简单。我正在部署最后一行 OHLC(开、高、低、收)值并试图预测下一个收盘价。简单而无用。但我想做的是给最后 10 天的时间来预测明天的价格。我知道这不会是准确的,但这是我正在尝试做的。

我如何获得 NextClose 并将其应用于线性回归模型:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

df = pd.read_csv("./EURUSD.csv")
days = 1
df['NextClose'] = df['Close'].shift(-days)
df = df.dropna()
total = len(df)
test_ratio = 0.30
test_size = int(total * test_ratio)

total = len(df)
test_ratio = 0.30
test_size = int(total * test_ratio)
X = df[['Open', 'High', 'Low', 'Close']]
y = df[['NextClose']]
#build test and train data
X_train = X[:-test_size]
y_train = y[:-test_size]
X_test = X[-test_size:]
y_test = y[-test_size:]
# build model
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
plt.scatter(y_pred, y_test)
plt.show()

在这种情况下,我只给出最后一行。我想要做的是提供最后 10-20 行。

【问题讨论】:

  • 我不确定您的 DataFrame 是什么样子,但据我了解,您正在尝试仅在过去 10 天(CSV 的行)内预测下一次收盘,对吗?不知道“只给出最后一行”是什么意思。给出最后一行来测试它?
  • 我想给出最后 10 行并预测下一个收盘价。在当前回归中,我们只给出 1 行而不是 10

标签: python pandas scikit-learn linear-regression


【解决方案1】:

我相信这与MachineLearningMastery page 上的函数create_dataset 中描述的数据转换类似(请参阅LSTM 使用窗口方法进行回归 部分) .

目标是使用第 t:(t+days) 行的数据来预测第 (t+days)+1 行的收盘价。

X_train 矩阵的每一行将有 days * X.shape[1] 列,在下面的示例中,它表示来自 10 天数据的展平数据。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# generate random data to test
df = pd.DataFrame(np.random.normal(size=(2000, 4)))
df.columns = ['Open', 'High', 'Low', 'Close']

days = 10
df = df.dropna()

total = len(df)
test_ratio = 0.30
test_size = int(total * test_ratio)
X = df[['Open', 'High', 'Low', 'Close']]
y = df['Close'].shift(-days)

# this function based on the MachineLearningMastery page mentioned 
def create_dataset(X, y, look_back=1):
    dataX, dataY = [], []
    for i in range(X.shape[0]-look_back):
        a = X.iloc[i:(i+look_back), :].values.flatten()
        dataX.append(a)
        dataY.append(y.iloc[i])

    return np.array(dataX), np.array(dataY)

#build test and train data
X_train, y_train = create_dataset(X[:-test_size], y[:-test_size], look_back=days)
X_test, y_test = create_dataset(X[-test_size:], y[-test_size:], look_back=days)
# build model
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
plt.scatter(y_pred, y_test)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2019-10-01
    相关资源
    最近更新 更多