欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > DataWhale AI 夏令营 笔记1-baseline

DataWhale AI 夏令营 笔记1-baseline

2024/10/25 9:23:42 来源:https://blog.csdn.net/drarad/article/details/140723631  浏览:    关键词:DataWhale AI 夏令营 笔记1-baseline

第一次的baseline的任务是随机森林的建模
随机森林(Random Forest)的实现过程包括以下几个步骤:

数据集的准备:
将整个数据集分成训练集和测试集。

样本选择(Bootstrap Sampling):
从原始数据集中有放回地随机抽取多个样本子集,形成多个训练集。每个训练集的大小与原始数据集相同,但由于是有放回抽样,一些样本可能会重复出现,而一些样本可能不会出现。
构建决策树:

对于每个抽取的训练集,训练一棵决策树。
在构建每棵树时,并不是使用所有特征进行分裂,而是在每次分裂节点时随机选择一部分特征来寻找最佳分裂点。这个过程增加了模型的多样性并减少了过拟合。

决策树的训练过程:
节点分裂:从随机选择的特征中选择最佳的分裂特征和分裂点,使得每个节点尽可能纯净。这个过程通过递归地分裂节点来完成,直到达到停止条件(如最大深度、最小样本数等)。
叶节点:当节点不再继续分裂时(达到停止条件),将该节点作为叶节点。叶节点的预测值通常是该节点中所有样本的均值(回归任务)或类别的多数投票(分类任务)。

聚合预测:
当所有树都训练完成后,使用这些树进行预测。
对于回归任务,所有树的预测值取平均值作为最终预测结果。
对于分类任务,所有树的预测结果进行投票,得票最多的类别作为最终预测结果

我们可以通过调整参数使得其得到更好的结果

n_estimators(树的数量):

作用:更多的树通常会提高模型的性能,但也会增加计算时间。
调整方法:从一个较小的值开始(如10),逐步增加(如100、200等),观察模型性能的变化。一般来说,增加树的数量会提高模型的稳定性和准确性,但也会带来计算成本的增加。
max_depth(树的最大深度):

作用:限制树的深度可以防止过拟合。较深的树可以捕捉更复杂的关系,但也更容易过拟合。
调整方法:可以从一个较小的值开始(如5),逐步增加,观察模型的表现。通常需要通过交叉验证来选择一个合适的深度。
min_samples_split(内部节点再划分所需的最小样本数):

作用:这个参数限制了继续分裂一个节点所需的最小样本数,防止树过于复杂。
调整方法:一般来说,保持默认值(2)是一个不错的选择。如果数据噪声较大,可以考虑增大这个值来限制树的复杂度。
min_samples_leaf(叶子节点所需的最小样本数):

作用:这个参数限制了一个叶节点所需的最小样本数,可以防止树的某些分支过于细化。
调整方法:可以尝试增加这个值(如从1到5),观察模型性能的变化。对于数据噪声较大的情况,增大这个值可以防止过拟合。
n_jobs(并行数):

作用:控制计算过程中使用的CPU核心数量。
调整方法:n_jobs=-1 会使用所有可用的CPU核心,这通常是最好的选择,因为可以最大化计算速度。
1.网格搜索
就是直接穷举,需要大量的算力

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid = {'n_estimators': [10, 50, 100, 200],  # 树的数量'max_depth': [None, 10, 20, 30],  # 树的最大深度'min_samples_split': [2, 5, 10],  # 内部节点再划分所需的最小样本数'min_samples_leaf': [1, 2, 4]  # 叶子节点所需的最小样本数
}# 实例化模型
model = RandomForestRegressor(n_jobs=-1)# 使用网格搜索进行参数调优
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, n_jobs=-1, verbose=2)
grid_search.fit(train_x, train_y)# 输出最优参数
print(f'Best parameters found: {grid_search.best_params_}')

2.随机搜索
随机搜索是通过在参数空间中随机采样一定数量的组合来寻找最优参数,通常在计算资源有限的情况下使用。相比网格搜索,随机搜索可以在较大的参数空间中找到接近最优的参数组合

from sklearn.model_selection import RandomizedSearchCV
import numpy as np# 定义参数分布
param_dist = {'n_estimators': [int(x) for x in np.linspace(start=10, stop=200, num=10)],  # 树的数量'max_depth': [None] + [int(x) for x in np.linspace(10, 110, num=11)],  # 树的最大深度'min_samples_split': [2, 5, 10],  # 内部节点再划分所需的最小样本数'min_samples_leaf': [1, 2, 4],  # 叶子节点所需的最小样本数'bootstrap': [True, False]  # 是否使用自助采样法
}# 实例化模型
model = RandomForestRegressor(n_jobs=-1)# 使用随机搜索进行参数调优
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=100, cv=3, n_jobs=-1, verbose=2, random_state=42)
random_search.fit(train_x, train_y)# 输出最优参数
print(f'Best parameters found: {random_search.best_params_}')

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com