- 模拟生成股票价格数据:
- 使用simulate_stock_prices函数模拟生成了一段股票价格的历史数据。
- 参数包括num_days(模拟天数)、initial_price(初始股价)和volatility(波动率)。
- 在模拟过程中,每天的股票价格根据前一天的价格加上一个从正态分布中抽样得到的波动量得到。
- 设置参数:
- 设置了num_days(模拟天数)、initial_price(初始股价)和volatility(波动率)等参数。
- 拟合高斯过程模型:
- 使用GaussianProcessRegressor类来拟合股票价格数据。
- 选择了合适的高斯过程内核,这里使用常量核(ConstantKernel)乘以径向基函数核(RBF)。
- 设置了n_restarts_optimizer参数,表示在拟合模型时重新启动优化算法的次数。
- 绘制预测结果:
- 在整个模拟时间范围内生成了预测值,并计算了每个预测值的置信区间。
- 使用plot函数绘制了实际股票价格和预测股票价格的曲线。
- 使用fill_between函数填充了预测股票价格曲线周围的置信区间。
- 添加了标签、标题和图例等图形元素,使图表更具可读性。
程序代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
# 模拟生成股票价格数据
def simulate_stock_prices(num_days, initial_price, volatility):
price = initial_price
prices = [price]
for _ in range(num_days):
price_change = np.random.normal(0, volatility)
price += price_change
prices.append(price)
return np.array(prices)
# 参数设置
num_days = 100
initial_price = 100 # 初始股价
volatility = 1.0 # 波动率
# 模拟生成股票价格数据
days = np.arange(num_days + 1)
stock_prices = simulate_stock_prices(num_days, initial_price, volatility)
# 高斯过程回归模型
kernel = C(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10)
# 拟合高斯过程模型
gp.fit(days.reshape(-1, 1), stock_prices)
# 在整个范围内生成预测值
X_pred = np.linspace(0, num_days, 1000).reshape(-1, 1)
y_pred, sigma = gp.predict(X_pred, return_std=True)
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制预测结果
plt.figure(figsize=(10, 6))
plt.plot(days, stock_prices, 'r-', label='实际价格')
plt.plot(X_pred, y_pred, 'b-', label='预测价格')
plt.fill_between(X_pred.flatten(), y_pred - 1.96 * sigma, y_pred + 1.96 * sigma,
alpha=0.2, color='blue')
plt.xlabel('日期')
plt.ylabel('股票价格')
plt.title('股票价格的高斯过程回归预测')
plt.legend()
plt.show()
在这个示例中,我们模拟了股票价格数据,然后使用高斯过程回归模型来拟合这些数据。最后,我们使用拟合模型生成了对未来股票价格的预测,并将预测结果与实际价格绘制在图表上,以可视化模拟股票走势。