XGBoost
通过训练特征,在训练一个特征的基础上训练下一个,预测与真实分布的差距,通过不断训练弥补差距,最终组合真实分布模拟
目标函数包含正则项和损失函数
损失函数代表模型拟合数据程度
通常用他的一阶导数指出梯度下降的方向,还计算了二阶导数,考虑梯度变化,拟合更快精度更高
正则项用来控制模型的复杂程度
节点越多模型越大运算时间长,超过一定限度会过拟合,导致分类效果下降
calc_util.py
calc_features计算特定时间窗口内的特征
get_features对整个数据集应用特征计算,并保存结果
collections用于高效的数据容器,如 deque
type_list=collections.deque(maxlen=max_len)
使用 deque 创建一个双端队列,限制最大长度为 max_len
特征计算逻辑
遍历数据,根据高低点的比较,动态更新特征列表
根据上一个特征点的类型(高点或低点),判断当前点是否形成新的特征点
计算当前特征
close_mean=type_df.close.mean()close_std=type_df.close.std()cur_features['score']=(close-close_mean)/close_std
calc_features
函数的核心逻辑是通过遍历时间序列数据,动态识别高低点,并根据这些高低点计算特征
get_features
这个函数负责对整个数据集应用特征计算,并保存结果
对每个时间点,取最近的data_len条数据作为窗口,调用calc_features计算特征
calc_model_util.py
sklearn:用于模型训练、评估和数据预处理。
xgboost:提供XGBoost模型(回归和分类)。
joblib:用于保存训练好的模型。
prepare_data 函数处理数据
创建包含固定列名的DataFrame(score_mean到diff_mean,最后一列为label)。
检查数据是否为空。
提取特征列名(最后一列label除外)。
使用均值填充缺失值。
返回原始数据、处理后的数据和特征名称。
train_model 函数训练分类模型
调用prepare_data处理数据。
分割特征和标签。
对标签进行编码(转换为数值)。
划分训练集和测试集(比例7:3)。
初始化XGBoost分类器(目标函数为二分类逻辑回归)。
训练模型并预测测试集。
输出混淆矩阵和分类报告。
保存模型到eth.pkl。
predict_result 函数使用训练好的模型进行预测并保存结果
预处理数据并提取特征。
对标签编码。
预测标签及其概率。
生成结果DataFrame,包含预测标签、真实标签、概率和精度。
保存结果到result.csv。
calc_util.py
calc_features 函数从原始价格数据中提取特征。
对数据按时间降序排序。
在初始20个数据点中识别第一个高点或低点。
遍历数据,动态更新高点和低点序列(交替生成,需满足最小间隔min_interval)。
计算所有点的均值和标准差,生成标准化后的特征(如score和score_0到score_34)。
get_features 函数批量生成特征并保存。
定义高/低点的最小间隔(4)和最大序列长度(35)。
计算价格变化率(diff)。
遍历数据,每次取最近的1000条数据调用calc_features生成特征。
保存所有特征到features.csv