Python 股指期货高频数据机器学习预测( 五 )


利用创建的模型
介绍
代表“” , 其中术语“ ”源于弗里德曼的贪婪函数逼近:梯度增强机 。
实质上是Tree(GBDT)的高效实现 , 如果使用最常用作为学习器 , 那么它基本相当于CART分类树 。
CART分类回归树是一种典型的二叉决策树 , 可以做分类或者回归 。如果待预测结果是离散型数据 , 则CART生成分类决策树;如果待预测结果是连续型数据 , 则CART生成回归决策树 。数据对象的属性特征为离散型或连续型 , 并不是区别分类树与回归树的标准 , 例如表1中 , 数据对象xixi的属性A、B为离散型或连续型 , 并是不区别分类树与回归树的标准 。作为分类决策树时 , 待预测样本落至某一叶子节点 , 则输出该叶子节点中所有样本所属类别最多的那一类(即叶子节点中的样本可能不是属于同一个类别 , 则多数为主);作为回归决策树时 , 待预测样本落至某一叶子节点 , 则输出该叶子节点中所有样本的均值 。
模型实现
利用xgboost库 , 实现XGB模型 。from xgboost import XGBRegressorfrom sklearn.model_selection import GridSearchCVcv_params = {'n_estimators': [600,800,1000,1200,1400,1600]}other_params = {'learning_rate': 0.1, 'n_estimators': 100, 'max_depth': 4, 'min_child_weight': 5, 'seed': 0,'subsample': 0.6, 'colsample_bytree': 0.9, 'gamma': 0.4, 'reg_alpha': 0, 'reg_lambda': 1}model = XGBRegressor(**other_params)optimized_GBM = GridSearchCV(estimator=model, param_grid=cv_params,scoring='neg_mean_squared_error', cv=3, verbose=3, n_jobs=5)optimized_GBM.fit(X_train_70, y_train)
参数调整
利用上述函数以及类似于Gibbs采样算法的思想 , 逐步调整参数 。具体方法为:首先设置每个参数的取值区间 。然后选取某个参数 , 将其设置为取值区间中等间距的几个点 , 进行训练模型进行验证 , 将最好的点设置为这个参数的值 , 然后选取其他参数 , 重复这一步 , 直到参数稳定 。
但实验中 , 由于过拟合情况严重 , 越大会导致近似情况更好 , 但同时会导致模型的泛化能力降低 。于是我通过提交结果 , 选定了=200 。然后调整其他参数 。
随机回归森林模型
简单来说 , 随机森林就是多个回归树的融合 。随机森林的优势在于
在没有验证数据集的时候 , 可以计算袋外预测误差(生成树时没有用到的样本点所对应的类别可由生成的树估计 , 与其真实类别比较即可得到袋外预测) 。随机森林可以计算变量的重要性 。计算不同数据点之间的距离 , 从而进行非监督分类 。
模型实现
利用库提供的r 。
【Python股指期货高频数据机器学习预测】from sklearn.ensemble import RandomForestRegressorclf = RandomForestRegressor(oob_score = True,max_depth = 20,min_samples_split=20,min_samples_leaf=10,n_estimators=20,random_state=0,verbose=3)clf.fit(X_train.reshape(-1,70),y_train.reshape((-1,)))
模型之外
特征工程的重要性远远超过模型的选取以及调参 。在最初的尝试中 , 我只是简单的进行了数据归一化 , 得到的结果并不理想 , 很多次训练的RNN模型有RMSE>0.00155的情况 。在认真探索每个数据特征的意义并根据它们的意义进行数据处理后 , 采取的模型几乎全部RMSE