使用 指数平滑算法 基于Python 帮我写一个预测股票数据中的涨跌幅的代码 使用训练集训练模型 使用测试集测试模型 并画出预测值与真实值的对比折线图
时间: 2024-04-02 11:33:23 浏览: 240
Python基于LSTM模型实现预测股市源代码+模型+数据集
5星 · 资源好评率100%
好的,我可以帮您实现这个功能。以下是代码示例:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取股票数据
data = pd.read_csv('stock_data.csv')
# 将时间列转为时间类型
data['date'] = pd.to_datetime(data['date'])
# 按照时间排序
data = data.sort_values('date')
# 将数据集分为训练集和测试集
train_size = int(len(data) * 0.8)
train_set = data[:train_size]['change']
test_set = data[train_size:]['change']
# 定义指数平滑算法
def exponential_smoothing(series, alpha):
result = [series[0]] # 第一个值与原始值相同
for n in range(1, len(series)):
result.append(alpha * series[n] + (1 - alpha) * result[n-1])
return result
# 训练模型
alpha = 0.2
train_smooth = exponential_smoothing(train_set, alpha)
# 预测未来5个值
predictions = []
for i in range(5):
last_value = train_smooth[-1]
predictions.append(alpha * last_value + (1 - alpha) * test_set[i])
train_smooth.append(predictions[-1])
# 计算误差
mse = np.mean((np.array(predictions) - np.array(test_set[:5])) ** 2)
print('平均误差:', mse)
# 绘制预测值与真实值的对比折线图
plt.plot(data['date'][train_size:train_size+5], test_set[:5], label='真实值')
plt.plot(data['date'][train_size:train_size+5], predictions, label='预测值')
plt.legend()
plt.show()
```
注意,上述代码中使用了一个名为 `stock_data.csv` 的文件,其中包含了股票数据,您需要根据自己的数据进行修改。另外,代码中的 `alpha` 参数可以根据实际情况进行调整,它决定了平滑系数的大小。
阅读全文