股票数据的缩放

Scaling of stock data

我正在尝试将机器学习应用于股票预测,并且我 运行 遇到了有关缩放未来未见(高得多)股票收盘价的问题。

假设我使用随机福雷斯特回归来预测股票价格。我将数据分成训练集和测试集。 对于训练集,我使用 standardscaler,并进行拟合和转换 然后我用回归量来拟合 对于测试集,我使用 standardscaler,并进行转换 然后我使用回归器进行预测,并与测试标签

进行比较

如果我在图表上绘制预测和测试标签,预测似乎达到最大值或上限。问题是standardscaler fit on train set, test set (later in the timeline) have much higher value,算法不知道如何处理这些极端数据

def test(X, y):
    # split the data
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, shuffle=False)

    # preprocess the data
    pipeline = Pipeline([
    ('std_scaler', StandardScaler()),
    ])
    # model = LinearRegression()
    model = RandomForestRegressor(n_estimators=20, random_state=0)

    # preprocessing fit transform on train data
    X_train = pipeline.fit_transform(X_train)
    # fit model on train data with train label
    model.fit(X_train, y_train)
    # transform on test data
    X_test = pipeline.transform(X_test)
    # predict on test data
    y_pred = model.predict(X_test)
    # print(np.sqrt(mean_squared_error(y_test, y_pred)))

    d = {'actual': y_test, 'predict': y_pred}
    plot_data = pd.DataFrame.from_dict(d)
    sns.lineplot(data=plot_data)
    plt.show()

缩放应该做什么?

这是我绘制预测的结果,实际收盘价与时间的关系

问题主要出在您使用的机型上。 RandomForest 回归器是在决策树上创建的。它正在学习为训练集中的每个示例将输入映射到输出。因此,RandomForest 回归器将适用于中间值,但对于它在训练过程中没有看到的极端值,它当然会在您的图片显示时执行。 您想要的是直接使用 linear/polynomial 回归或 ARIMA 等更高级的算法来学习函数。