软件开发网站有哪些,不可替代的客户管理系统,有什么做任务得佣金的网站,网站开发亿码酷流量目录 
一、Boosting训练与预测 
二、梯度增强的思想核心 
三、如何构造弱学习器和加权平均的权重 
四、损失函数 
五、梯度增强决策树 
六、GBDT生成新特征 
主要思想 
构造流程 
七、梯度增强决策树以及在搜索的应用 
7.1 GDBT模型调参 
7.1.1 框架层面参数 
n_estimators 
su…目录 
一、Boosting训练与预测 
二、梯度增强的思想核心 
三、如何构造弱学习器和加权平均的权重 
四、损失函数 
五、梯度增强决策树 
六、GBDT生成新特征 
主要思想 
构造流程 
七、梯度增强决策树以及在搜索的应用 
7.1 GDBT模型调参 
7.1.1 框架层面参数 
n_estimators 
subsample 
7.1.2 分类/回归树层面参数 
最大特征数max_features 
决策树最大深度max_depth 
部节点再划分所需最小样本数min_samples_split 
叶子节点最少样本数min_samples_leaf 
7.2 K折交叉验证找到最佳超参数 
交叉验证的优点 
交叉验证的缺点 
基于k折交叉验证的网格搜索法 
7.3  GBDT在推荐系统中的排序算法示例 一、Boosting训练与预测 Boosting训练与预测   Boosting训练过程为串型基模型按次序一一进行训练基模型的训练集按照某种策略每次都进行一定的更新。对所有基模型预测的结果进行线性综合产生最终的预测结果 
GBDT是将梯度下降和 Boosting 方法结合的算法。它采用决策树模型并定义一个损失函数通过梯度下降来优化模型。 二、梯度增强的思想核心 
梯度增强首先还是增强算法的一个扩展也是希望能用一系列的弱学习器来达到一个强学习器的效果从而逼近目标变量的值也就是我们常说的标签值。而根据加性模型的假设这种逼近效果是这些弱学习器的一个加权平均。也就是说最终的预测效果是所有单个弱学习器的一个平均效果只不过这个平均不是简单的平均而是一个加权的效果。 三、如何构造弱学习器和加权平均的权重 
梯度增强采用了一个统计学或者说是优化理论的视角使得构造这些部分变得更加直观。 
梯度增强的作者们意识到如果使用“梯度下降”Gradient Descent来优化一个目标函数最后的预测式可以写成一个加和的形式。也就是每一轮梯度的值和一个叫“学习速率”Learning Rate的参数共同叠加起来形成了最后的预测结果。这个观察非常重要如果把这个观察和我们的目标也就是构造弱学习器的加权平均联系起来看我们就会发现其实每个梯度的值就可以认为是一个弱学习器而学习速率就可以看作是某种意义上的权重 首先这是一个迭代算法。每一轮迭代我们把当前所有学习器的加权平均结果当作这一轮的函数值然后求得针对某一个损失函数对于当前所有学习器的参数的一个梯度。然后我们利用某一个弱学习器算法可以是线性回归模型Linear Regression、对数几率模型Logistic Regression等来拟合这个梯度。最后我们利用“线查找”Line Search的方式找到权重。说得更直白一些那就是我们尝试利用一些简单的模型来拟合不同迭代轮数的梯度。 四、损失函数 
损失函数是用来量化模型预测值与实际值之间差异的函数。在训练模型时损失函数的值被用来通过优化算法如梯度下降调整模型参数目标是最小化这个损失值 常见的损失函数   对于GBDT来说如果是用于回归问题那么通常选择平Squared Error Loss方误差损失)如果是用于分类问题尤其是二分类问题通常选择Logistic Regression Loss(逻辑回归损失)。请注意GBDT用于多分类问题时会使用对数损失的多分类版本。 五、梯度增强决策树 
梯度增强决策树就是利用决策树这种最基本的学习器来当作弱学习器去拟合梯度增强过程中的梯度。然后融合到整个梯度增强的过程中最终梯度增强决策树其实就是每一轮迭代都拟合一个新的决策树用来表达当前的梯度然后跟前面已经有的决策树进行叠加。在整个过程中决策树的形状比如有多少层、总共有多少节点等都是可以调整的或者学习的超参数。而总共有多少棵决策树也就是有多少轮迭代是重要的调节参数也是防止整个学习过程过拟合的重要手段。 六、GBDT生成新特征 
主要思想 
GBDT每棵树的路径直接作为LR输入特征使用 构造流程 
用已有特征训练GBDT模型然后利用GBDT模型学习到的树来构造新特征。构造的新特征向量是取值0/1的向量的每个元素对应于GBDT模型中树的叶子结点。当一个样本点通过某棵树最终落在这棵树的一个叶子结点上那么在新特征向量中这个叶子结点对应的元素值为1而这棵树的其他叶子结点对应的元素值为0。新特征向量的长度等于GBDT模型里所有树包含的叶子结点数之和。  新特征向量反映了数据点在所有决策树中的路径信息可以帮助线性模型如逻辑回归更好地捕捉数据点的复杂结构和模式因为决策树能够捕捉非线性关系而这种关系现在被编码到新特征向量中供线性模型使用。这样的技术常被用于提高模型在各种任务中的表现尤其是在那些线性模型不足以捕捉数据复杂性的场景中。 七、梯度增强决策树以及在搜索的应用 
7.1 GDBT模型调参 
7.1.1 框架层面参数 
n_estimators 
弱学习器的最大迭代次数或者说最大的弱学习器的个数。一般来说取值太小容易欠拟合太大又容易过拟合一般选择一个适中的数值。 
subsample 
即子采样取值为(0,1]。注意这里的子采样和随机森林不一样随机森林使用的是放回抽样而这里是不放回抽样。如果取值为1则全部样本都使用如果取值小于1则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差即防止过拟合但是会增加样本拟合的偏差因此取值不能太低。推荐在[0.5, 0.8]之间默认是1.0即不使用子采样。 7.1.2 分类/回归树层面参数 
最大特征数max_features 
默认是“None”,即 考虑所有的特征数。如果是整数代表考虑的特征绝对数。如果是浮点数代表考虑特征百分比。一般来说如果样本特征数不多比如小于50可以用默认的“None”如果特征数非常多需要进行网格搜索。 
决策树最大深度max_depth 
默认可以不输入此时决策树在建立子树的时候不会限制子树的深度。一般来说数据少或者特征少的时候可以不管这个值。如果模型样本量多特征也多则需要限制最大深度取值取决于数据的分布。常用的可以取值10-100之间。 
部节点再划分所需最小样本数min_samples_split 
如果某节点的样本数少于min_samples_split则不会继续再进行划分。 默认是2. 如果样本量不大不需要调节这个值。如果样本量数量级非常大则推荐增大这个值。 
叶子节点最少样本数min_samples_leaf 
如果某叶子节点数目小于样本数则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数或者最少样本数占样本总数的百分比。如果样本量不大不需要调节这个值。如果样本量数量级非常大则推荐增大这个值。 7.2 K折交叉验证找到最佳超参数 选择K的值(比如10)将数据集分成K等份使用其中的K-1份数据作为训练数据进行模型的训练使用一种度量测度在另外一份数据(作为验证数据)衡量模型的预测性能 交叉验证的优点 
交叉验证通过降低模型在一次数据分割中性能表现上的方差来保证模型性能的稳定性交叉验证可以用于选择调节参数、比较模型性能差别、选择特征 
交叉验证的缺点 
交叉验证带来一定的计算代价尤其是当数据集很大的时候导致计算过程会变得很慢 基于k折交叉验证的网格搜索法 
GridSearchCV其作用是自动调参。将每个参数所有可能的取值输入后可以给出最优化的结果和参数。但是该方法适合于小数据集对于大样本很难得出结果。 
此时可以使用基于贪心算法的坐标下降进行快速调优先拿当前对模型影响最大的参数调优直到最优化再拿下一个影响最大的参数调优如此下去直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优时间效率较高。 以下是一个使用 GridSearchCV 优化 GBDT 参数的简单例子 
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier# 定义 GBDT 模型
gbdt  GradientBoostingClassifier()# 定义参数网格
param_grid  {n_estimators: [100, 200, 300],learning_rate: [0.01, 0.1, 0.2],max_depth: [3, 4, 5]
}# 创建 GridSearchCV 对象
grid_search  GridSearchCV(gbdt, param_grid, cv5, scoringaccuracy)# 拟合/训练模型
grid_search.fit(X_train, y_train)# 获取最佳参数组合和模型
best_parameters  grid_search.best_params_
best_model  grid_search.best_estimator_在这个例子中GridSearchCV 用于找到 GBDT 模型的最佳超参数如 n_estimators、learning_rate 和 max_depth。通过这种方式GridSearchCV 提供了一个方便的方法来提高 GBDT 模型的性能。 
7.3  GBDT在推荐系统中的排序算法示例 
import numpy as np
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split# 生成模拟的推荐系统数据集
# 假设有10个特征这些特征描述了用户和物品的各种属性和交互
X  np.random.rand(1000, 10)  # 特征矩阵每行代表用户-物品对的特征
y  np.random.rand(1000)  # 目标变量代表用户对物品的评分或偏好# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test  train_test_split(X, y, test_size0.2, random_state42)# 初始化 GBDT 模型
gbdt  GradientBoostingRegressor(n_estimators100, learning_rate0.1, max_depth3, random_state42)# 训练模型
gbdt.fit(X_train, y_train)# 使用模型进行预测
predictions  gbdt.predict(X_test)# 将预测结果和测试集的特征合并模拟实际推荐场景
recommended_items  pd.DataFrame(X_test, columns[ffeature_{i} for i in range(X_test.shape[1])])
recommended_items[predicted_rating]  predictions# 对每个用户推荐评分最高的物品
# 在实际应用中你需要一个用户ID来分组这里我们简化为按行分组
recommended_items.sort_values(bypredicted_rating, ascendingFalse, inplaceTrue)# 展示每个用户推荐的最高评分物品
recommended_items_per_user  recommended_items.groupby(feature_0, as_indexFalse).first()
print(recommended_items_per_user)在上述代码中X 表示特征矩阵y 表示目标变量。我们首先使用 train_test_split 分割数据集然后创建和训练一个GBDT模型。这个模型用来预测用户对物品的评分。最后我们展示了如何使用这个模型来为用户推荐评分最高的物品。 
请注意这是一个高度简化的示例。在实际推荐系统中你会有一个用户ID与物品ID并且你会根据这些ID来构建特征然后进行排序和推荐。特征可能包括用户的历史行为物品的内容特征用户和物品的交互历史等。另外排序模型的评估可能会使用更复杂的指标如平均准确率均值Mean Average Precision或归一化折扣累积增益NDCG。