《Python Machine Learning By Example》 Third Edition 第七章笔记
1 本章内容
通过本章内容,我们可以学习到:
- 介绍股票价格预测与特征工程
- 什么是回归任务及评价指标
- 线性回归
- 回归树与回归森林
- 支持向量回归
2 股票价格预测
2.1 介绍
- 公司的股票意味着对公司的拥有权,股票中的一股代表着对公司部分资产的拥有权,且与公司股票总数成比例。公司的股票可以通过证券交易所或组织来在股东和其他方之间流动。股票价格根据供求关系进行上下波动,以保持平衡。投资者通常希望低买高卖,这就需要对股票价格变化趋势有一个很好的把握。利用机器学习技术进行价格预测是当今比较重要的一个课题。
- 理论上,用预测算法预测价格是可行的,但是我们很难保证我们挑选的股票会适用于学习,即它应该是包含某种规律的,而不是被无法预知的事件所影响。因此,选择学习股票指数(股票指数通常是多支股票的加权平均)能更好地训练模型和阐明模型机理。
2.2 特征工程
- 在每个交易日,股票价格实时变化并记录,一支股票包含五个关键指标,分别为:Open(交易日的起始价格), Close(当天的最终价格), High(当天的最高交易价), Low(当天的最低交易价), Volume(当天收盘前公司的交易总额)。
- 选择训练特征十分重要。对于某天交易日,可用的特征为当前开盘价,及历史表现(收盘价,最高最低价,交易量),而当天的最高最低价及交易量是不能使用的,因为这属于未知信息。但是仅使用四个特征可能会导致拟合程度不足,并且通常情况下,特征并不是直接就可用的,因此就需要进行特征工程,来设计和构建特定领域的特征,以此提高模型预测性能。这需要具备一定的领域知识,还会消耗大量时间。
- 在做出决策前,投资者通常需要查看过去一段时间内的数据,而不仅仅是前一天的价格,因此可以通过计算过去一周,过去一个月,过去一年的平均收盘价,作为三个新特征(时间窗口可以具体调整)。在此基础上,我们还能通过计算三个特征间两两的比例,来引入价格变化趋势这一特征。对于交易量,可以进行与收盘价相类似的操作。
- 投资者还会关系股票的波动情况,它描述了股票是否稳定及投资是否有风险。可以用收盘价或交易量的标准差来构造特征。
- 还有,日回报率和年回报率也是股票的一个很重要的特征。基于日回报率,我们可以计算出一段时间的移动平均值。
- API提示:
# pandas中的函数
# shift(n), 让数据向后平移n个位置, 通过shift(1)可以获得前一天的数据
# rolling(n), 向前聚合n个位置的数据, 通过rolling(5).mean()可以获得过去五天的平均值,同理可以将mean()改为std()来求得标准差
3 回归任务
3.1 介绍
- 回归任务是监督学习的一种重要类别,由特征和连续的目标值构成,主要步骤为:1)找到特征与目标值之间的关系,即训练阶段;2)通过训练阶段学习到的模式来求出未来的特征的目标值,即预测阶段。
- 回归与分类的一个主要区别就是输出值为连续的还是离散的,这也导致了它们适用的领域不同:分类基本上用于确定所需成员的身份,类别标签;回归主要用于预测数值变化情况。
3.2 评价指标
- 比起仅仅查看模型的预测准确率,我们需要通过一些指标来衡量模型的表现,可以提供更好的见解。
- MSE,表示了与期望值间的均方误差,是一个常用的指标,有时候还可以取平方根,来使得误差的单位可以和估计的目标变量相同,即RMSE,而且计算平方,可以惩罚较大的误差。
- MAE,即平方绝对误差,使用了与目标变量相同的单位,让我们可以了解预测值与真实值之间的差距。MSE和MAE都是越小,模型越好。
- 拟合度(R squared),用来比较模型的预测结果与真实值的吻合程度。
4 回归模型
4.1 线性回归
- 线性回归想通过二维空间的一条直线或者三维空间的一个平面来拟合数据,识别的是特征与目标间的线性关系,模型为线性方程或加权和函数。
- w1到wn为权重系数,w0代表截距(偏差),可以表示为矩阵形式相乘。前面第五章提到的逻辑回归就是在线性回归基础上套了一层逻辑变换,将结果映射到了0-1区间来表示概率。同理,线性回归的目标函数也可以用MSE来定义,如下所示,其中y hat即为前面的wTx。训练方法为梯度下降法。
4.2 回归树
- 前面已经介绍过了用来解决分类任务的决策树,而回归树的建立过程与决策树几乎相同,其中不同的是:1)每次贪婪分裂的效果由加权MSE(权重由每个类别各自的样本数除以总数)来衡量,MSE越小,分裂效果越好;2)叶子结点的目标值由所有样本的平均值计算得出,而不是众数。
- 第四章时也介绍了随机森林,而如果把随机森林用于解决回归任务,则是独立地从训练样本中重置采样并随机选择特征来训练出多棵回归树,并取它们的平均值作为最后的决策,代码示例如下:
from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(n_estimators=100, max_depth=10,
min_samples_split=3)
regressor.fit(X_train, y_train)
predictions = regressor.predict(X_test)
4.3 支持向量回归
- 同样回顾一下,当支持向量机用于分类任务时(叫做SVC),是为了寻找能将观测样本划分到不同类别的最优超平面,而超平面又是通过最大化从每个分离空间中距离超平面最近的点到超平面的距离来确定的。 训练策略如下所示:
- 而用于回归的支持向量机(叫做SVR),是为了尽可能让所有训练样本都落在超平面周围的ε范围内,训练策略如下所示:
5 总结
- 本章介绍了股票价格预测任务及如何做特征工程来加强模型表现,接着介绍了什么是回归任务及回归任务的评价指标,最后学习了三种回归算法,下一章将介绍把神经网络用于回归任务,并与机器学习三种算法进行性能对比。