# Decision_making_team **Repository Path**: michaelzhang93/decision_making_team ## Basic Information - **Project Name**: Decision_making_team - **Description**: BUAA决策天团手撕随机森林和XGBoost,包括回归任务和线性分类任务 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-11-21 - **Last Updated**: 2024-04-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RandomForst and XGBoost 本程序是基于CART决策树为基分类器的随机森林和XGBoost算法的实现,任务为回归及分类。 #### **程序介绍:** ​ **随机森林/分类:** ​ DecisionTree.py:CART决策树程序 ​ RandomForest_Classifier.py:随机森林分类任务程序 ​ **随机森林/回归:** ​ Random_forest_regression.py:随机森林回归任务程序 ​ **XGBoost:** ​ XGB_model:XGBoost主程序 ​ **XGBoost/回归:** ​ regression_learning_rate.py:调整学习率情况下XGBoost回归任务 ​ regression_max_depth.py:调整决策树深度情况下XGBoost回归任务 ​ regression_n_estimators.py:调整决策树数量情况下XGBoost回归任务 ​ **XGBoost/分类:** ​ classifier_learning_rate.py:调整学习率情况下XGBoost回归任务 ​ classifier_max_depth.py:调整决策树深度情况下XGBoost回归任务 ​ classifier_n_estimators:调整决策树数量情况下XGBoost回归任务 #### **数据集:** ​ **回归:**波士顿房价数据集:包括506个样本,每个样本包括12个特征变量,标签为该地区的平均房价。训练集及测试集按照8:2划分。 ​ **分类:**威斯康星州乳腺癌(诊断)数据集 :乳腺癌数据集一共有569个样本,30个特征(10个平均值,10个标准差,10个最值),标签为二分类。其中良性为357个,恶性为212个。训练集及测试集按照8:2划分。 #### 评分标准: ​ **回归:**r2_score![image-20221121120511193](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121120511193.png) - r2_score = 1:样本中预测值和真实值完全相等,没有任何误差。 - r2_score = 0:样本的每项预测值都等于均值,训练不起作用。 - r2_score <0:训练模型产生的误差比使用均值产生的还要大,训练使结果更差。 ​ **分类:**f1_score:定义为精准率和召回率的调和平均数 ![image-20221121120632418](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121120632418.png) - f1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。 # RandomForest ### 回归任务 ​ **任务描述:**根据波士顿房价样本特征来回归得到房价价格。 ​ **实现方式**:通过训练集生成决策树,递归方式来构建决策树中节点位置关系,测试时通过父子节点关系来寻找叶节点,n棵决策树均值最终结果。 ​ **参数设置**: ​ tree_num:决策树个数 ​ **结论**: - **调整决策树个数:**在回归任务中测试集r2分值在0.6左右,决策树个数的增加对整体分值影响较小。 ![image-20221121124631356](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121124631356.png) ### 分类任务 ​ **任务描述:**根据乳腺癌样本特征来判断是否患乳腺癌,是一个二分类的问题。 ​ **实现方式:**通过训练集生成决策树,使用列表来构建决策树中节点位置关系,测试时通过父子节点关系来寻找叶节点,n棵决策树结论概率最大的作为最终结果。 ​ **参数设置:** ​ **决策树只设置了一个可调参数:** ​ min_sample:落在叶子上的最小样本数 ​ **随机森林有四个可调参数:** ​ ip:随机挑选的样本比例为(ip,1)中的一个随机数 ​ jp:随机挑选的特征比例 ​ n_tree:决策树的数量 ​ min_sample_leaf:叶节点上的最小样本数 ​ **结论**: - **调整决策树个数**:由于运行时间原因仅测试10棵决策树,根据实验结果可知f1分值变化明显,整体f1分值在0.9附近。决策树个数对最终分值影响较小。 ![image-20221121123554563](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121123554563.png) # XGBoost ### 回归任务 ​ **任务描述:**根据波士顿房价样本特征来回归得到房价价格。 **实现方式**:遍历训练集所有样本特征及每个特征元素,计算分裂增益gain,根据最大增益切点进行切分,递归构建决策树,依次构建好n棵决策树。测试时依次解析结构树,计算每棵决策树叠加值。 ​ **参数设置**: ​ base_score(叶子节点初始权值)=0.5, ​ max_depth(决策树最大深度)=6, ​ n_estimators(决策树个数)=4, ​ learning_rate(学习率)=0.3, ​ min_child_sample(叶子节点样本数)=1, ​ objective(任务类型)='classifier' ​ **结论**: - **调整决策树个数:**XGBoost在回归任务上表现平滑,决策树个数大于10个时训练集及测试集f1分数不再发生变化。 ![image-20221121121919883](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121121919883.png) - **调整决策树深度:**决策树深度在2层时训练集及测试集f1分数最高,随层数的增多开始出现严重过拟合现象。 ![image-20221121121951312](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121121951312.png) - **调整学习率变化:**(此处学习率为前一个决策树结果对后一个决策树影响系数)学习率大于0.2后训练集及测试集f1分值变化不明显,过拟合仍存在。 ![image-20221121122032235](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121122032235.png) ### 分类任务 ​ **任务描述:**根据乳腺癌样本特征来判断是否患乳腺癌,是一个二分类的问题。 ​ **实现方式**:遍历训练集所有样本特征及每个特征元素,计算分裂增益gain,根据最大增益切点进行切分,递归构建决策树,依次构建好n棵决策树。测试时依次解析结构树,计算每棵决策树叠加值。 ​ **参数设置**: ​ base_score(叶子节点初始权值)=0.5, ​ max_depth(决策树最大深度)=6, ​ n_estimators(决策树个数)=4, ​ learning_rate(学习率)=0.3, ​ min_child_sample(叶子节点样本数)=1, ​ objective(任务类型)='classifier' ​ **结论**: - **调整决策树个数:**XGBoost在分类任务上表现较好,仅一棵决策树是即可在测试集达到94%分值,在4棵树时表现最好,随着决策树数量增加出现过拟合现象。 ![image-20221121121626390](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121121626390.png) - **调整决策树深度:**决策树深度在4层时训练集及测试集f1分数最高,层数大于5层后分类能力不再变化。 ![image-20221121121720218](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121121720218.png) **调整学习率变化:**(此处学习率为前一个决策树结果对后一个决策树影响系数)学习率大于0.1后训练集及测试集f1分值变化不明显。 ![image-20221121121747761](C:\Users\wangs\AppData\Roaming\Typora\typora-user-images\image-20221121121747761.png)