我试图将机器学习应用于股票预测,但是在扩展未来看不见的(更高)股票收盘价时遇到了问题。
让我们说我在预测股价时使用了随机的阿甘正态回归。我将数据分为训练集和测试集。 对于火车,我使用standardscaler,并进行拟合和变换 然后我用回归器来拟合 对于测试集,我使用standardscaler并进行转换 然后我使用回归器进行预测,并与测试标签进行比较
如果我在图表上绘制预测和测试标签,则预测似乎已超出极限或上限。问题在于,标准定标器适合火车组,测试组(在时间轴上晚)具有更高的价值,算法不知道如何处理这些极端数据
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()
缩放后应该怎么做?
这就是我绘制预测的结果,实际收盘价与时间的对比
答案 0 :(得分:0)
问题主要来自您使用的模型。 RandomForest回归器是在决策树上创建的。它正在学习将训练集中的每个示例的输入映射到输出。因此,RandomForest回归器将适用于中间值,但适用于训练过程中未曾见过的极限值,当然,只要显示图片,它就可以执行。 您想要的是直接使用线性/多项式回归或ARIMA等更高级的算法来学习函数。