简单说明
支持向量回归是一种用来做预测的数学方法,属于「机器学习」的一种。
它的目标是找到一条「最合适的线」,能够大致描述数据点的趋势,并允许数据点离这条线有一定的误差(不要求所有点都完全落在这条线上)。
可以把它想象成:找到一条「宽带」或「隧道」,大部分数据点都能在隧道里行走,而不是一定要贴着隧道的中心线。
支持向量回归主要做了两件事
找到一条「平滑的线」,尽可能靠近所有数据点。
允许有一点点误差,只要误差不超过某个范围(叫「epsilon」),就认为是可以接受的。
这条线就是用来预测的线,它能帮助估算未来的数据。
SVR和普通回归的区别
普通回归(比如线性回归):
只找到一条线,试图让误差最小化。它对所有数据点很严格,偏差太大的点可能会让线跑偏。
支持向量回归(SVR):
它允许有一定的误差,只要误差在隧道里就不算问题。它更注重「整体趋势」,不被个别点干扰。
(以上说明摘录自MLer的文章)
数据的基本情况
涨跌幅预测
#只预测涨跌幅
y = df['涨跌幅'].values
#print(f"训练数据集,从{start_date_str}开始,总计 {len(y)}条数据,最后一天{day_read_last},涨跌幅为 {y[-1]:.2f}")
# x 需要重新映射成一个2x1的数组类似[[1,2,3,4]]这样的形式,reshape中-1代表全部 1代表1维
X = np.arange(len(y)).reshape(-1,1)
# 创建 SVR 模型
svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=0.1)
# 拟合模型
svr_rbf.fit(X, y)
# 为了能得到唯一的一个 y的数据,这里要做一个测试集的X,只有1个元素
X_test = np.arange(1).reshape(-1,1)
# 预测涨跌幅
y_pred = svr_rbf.predict(X_test)[0]
#print(f"通过 {i+1:2d} 年的{len(y):5d}条数据,预测 ({code}) {day_read_last} {str_day} 的涨跌幅为 {y_pred:.2f} %")
看看打印结果,