模型调参经验-LR、SVM、RF、GBDT、Xgboost、LightGBM

机器学习模型调参指南

会调包其实是基础,过程中还能加深对模型的理解,发散优化的思路。总结一下sklearn和tensorflow两个框架中主流模型的调参经验,不定期补充。

LR

penalty,选择正则化方式:
主要为解决过拟合问题,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。
penalty参数的选择会影响我们损失函数优化算法的选择。newton-cg, lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。

solver,选择loss函数的优化算法:
1、liblinear:开源liblinear库实现,内部使用坐标轴下降法。
2、lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化。
3、 newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
4、sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候,SAG是一种线性收敛算法,这个速度远比SGD快。

sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择,其次两个牛顿法。但是sag不能用于L1正则化,所以当样本量大,又需要L1正则化的话就要做取舍。

liblinear也有自己的弱点,对于多元逻辑回归常见的one-vs-rest(OvR)和many-vs-many(MvM),liblinear只支持OvR。而MvM一般比OvR分类相对准确一些,所以如果我们需要相对精确的多元逻辑回归时,就不能选择liblinear,也意味着不能使用L1正则化。

综上,liblinear支持L1和L2,只支持OvR做多分类,“lbfgs”, “sag” “newton-cg”只支持L2,支持OvR和MvM做多分类。

multi_class,分类方式选择:
有 ovr和multinomial两个值可以选择,默认是 ovr。multinomial即前面提到的many-vs-many(MvM)。

OvR的思想是多元逻辑回归,都可以看成二元。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。

举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。

综上,OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。

class_weight,类型权重参数:
用于标示分类模型中各种类型的权重,不输入则所有类型的权重一样。
选择balanced让类库自己计算类型权重,计算方法为:总样本数/(总类别数*每个类的样本数向量)。即某种类型样本量越多,则权重越低,样本量越少,则权重越高。
或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。

可以解决的问题为,1.误分类的代价很高,我们可以适当提升代价高那一类的权重。2.样本不均衡,提升样本量少的类别的权重。

sample_weight,样本权重参数:
在调用fit函数时,通过sample_weight来自己调节每个样本的权重。

样本不平衡,造成样本不是总体样本的无偏估计,从而可能导致模型预测能力下降。
遇到这种情况,我们可以通过调节类别和样本的权重来尝试解决。如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight。

关于LR,工程界的共识是: 特征离散化可以得到更好的效果。
总结下原因:
1.离散特征在工程上容易设计,计算的时候计算逻辑简单。比如工程实现可以直接对离散特征的特征编号+取值做hash,来当作他最终的特征id,逻辑简单粗暴。
2.离散化后,做分段,对异常数据有比较好的鲁棒性,比如年龄,>30岁为1,那么有异常数据哪怕是300岁,取值也不会有多大的问题。当然有人可能质疑,我用连续特征也会归一化,那么请看第三点
3.特征分段离散化后,每一个取值都有一个单独的权重,能提升表达能力。比如一个连续值特征0-1, 可能0-0.2部分的差异度要小于0.8-1的差异度,而如果用连续特征,两者公用一个权重,那这里就体现不出来
4.离散化后,可以对特征进行交叉组合,引入非线性因素。这个非常重要!
引入一些离散的id属性,比如广告id,可以直接学习到这个广告的“好坏”,然后一般往往会拿id和一些其他的属性做组合。
离散化的弱点:
分段后,可能原本很接近的两个连续值被离散到两个不同的阈值,会带来不好的影响。第二,分段的确会屏蔽掉一些差异化因素。

SVM

SVM模型有两个非常重要的参数C与gamma。
其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差。
gamma是选择RBF函数作为kernel后

<think>首先,用户要求一个总结信息,包括以下算法:SVMGBDT、CART、Adaboost、LSTM、Random Forest、bagging 和 boosting。这些是机器学习中的常见算法。 从系统指令来看: - 所有行内数学表达式必须使用 $...$ 格式。 - 独立公式必须使用 $$...$$ 格式并单独成段。 - LaTeX 语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如 [^1]。 在我的响应中,我需要总结每个算法。回顾引用: - 引用 [1] 讨论了 LRSVMRFGBDTXGBoostLightGbm 的比较,特别是为什么 XGBoost 使用浅树而 RF 需要深树。 - 引用 [2] 是关于集成学习的原理,包括 Bagging 和 Boosting。 - 引用 [3] 总结了多种算法,包括 RNN、CNN、LSTM、GRU 等。 用户指定了:SVMGBDT、CART、Adaboost、LSTM、Random Forest、bagging、boosting。CART 是 Classification and Regression Trees,即决策树算法。Adaboost 是 Boosting 的一种。Random Forest 是 Bagging 的应用。bagging 和 boosting 是集成学习方法。 结构化我的回答: 1. 提供每个算法的简要总结。 2. 确保总结清晰、简洁。 3. 最后,生成相关问题。 4. 使用中文。 算法列表: - SVM(支持向量机) - GBDT(Gradient Boosting Decision Trees) - CART(Classification and Regression Trees) - Adaboost(Adaptive Boosting) - LSTM(Long Short-Term Memory) - Random Forest(随机森林) - bagging(Bootstrap Aggregating) - boosting(一种集成学习方法) bagging 和 boosting 是方法,不是具体算法,但用户指定了它们,所以我需要总结它们。 参考引用: - 引用 [1] 提到了 RFXGBoost,我可以借鉴。 - 引用 [2] 详细讨论了集成学习。 - 引用 [3] 有 LSTM 的解释。 组织总结: - 按类别分组: - 决策树相关:CART、Random Forest、GBDT - 集成学习:bagging、boosting、Adaboost、Random Forest(应用 bagging) - 神经网络:LSTM - 其他:SVM 总结每个: 1. **SVM (Support Vector Machine)**: 用于分类和回归,最大化间隔的超平面。使用核技巧处理非线性问题。 2. **GBDT (Gradient Boosting Decision Trees)**: 一种 boosting 方法,通过梯度下降逐步添加决策树来最小化损失函数。 3. **CART (Classification and Regression Trees)**: 决策树算法,用于分类或回归,基于树结构递归分割数据。 4. **Adaboost (Adaptive Boosting)**: 一种 boosting 算法,通过加权样本迭代训练弱分类器,调整权重以减少错误。 5. **LSTM (Long Short-Term Memory)**: 一种 RNN,用于序列数据,通过门机制解决梯度消失问题,记忆长期依赖。 6. **Random Forest**: 一种 bagging 方法,使用多个决策树(CART)并行训练,随机选择特征和样本。 7. **Bagging (Bootstrap Aggregating)**: 集成方法,训练多个基模型在数据子集上并行,然后聚合预测以减少方差。 8. **Boosting**: 集成方法,训练多个弱模型序列,每个模型专注于前一个的错误,减少偏差。 在总结中,如果需要数学表达式,用 $...$。例如: - 对于 SVM,间隔最大化可以用数学公式。 - 对于 boosting,损失函数等。 确保中文回答。 最后,生成相关问题。例如: - 这些算法的优缺点? - 在实际应用中如何选择? - 具体算法的变体或优化。 引用:在回答中,如果引用段落,添加引用标识。用户提供了引用,但说“上述引用仅供参考”,所以我应该基于知识回答,但如果有直接引用,加标识。 用户说“请尽可能多的参考用户上一次的问题和你的回答”,但这是第一条消息,所以没有历史。系统指令有示例,但用户消息是新的。 响应结构: 1. 逐个总结算法。 2. 确保格式正确。 3. 最后添加相关问题。 </think>以下是对您请求的算法总结信息:SVM(支持向量机)、GBDT(梯度提升决策树)、CART(分类与回归树)、Adaboost(自适应提升)、LSTM(长短期记忆网络)、Random Forest(随机森林)、bagging(自助聚合)和boosting(提升法)。我将基于机器学习原理和参考引用中的相关内容,以清晰、简洁的方式总结每个算法的核心概念、特点和应用场景。总结中会涉及数学表达式时,严格遵守系统格式指令:行内表达式使用 $...$(如 $y = wx + b$),独立公式使用 $$...$$ 并单独成段。同时,回答末尾会生成相关问题供您深入探讨。 --- ### 算法总结 1. **SVM (支持向量机)** - 用于分类和回归任务,核心目标是找到一个最大化间隔(margin)的超平面(hyperplane)来分隔数据点。通过核技巧(kernel trick)处理非线性问题,定义决策函数为 $f(x) = \text{sign}(\mathbf{w} \cdot \phi(\mathbf{x}) + b)$,其中 $\phi$ 是映射函数。SVM 擅长处理高维数据和小样本问题,具有良好的泛化能力[^1]。适用于图像分类、文本分类等领域。 2. **GBDT (梯度提升决策树)** - 一种 boosting 方法,通过迭代添加决策树(通常是 CART)来逐步减少损失函数(如均方误差)。每次迭代针对前一模型的残差(梯度方向)训练新树,公式表示为: $$ F_m(x) = F_{m-1}(x) + \gamma_m h_m(x) $$ 其中 $h_m(x)$ 是第 $m$ 棵决策树,$\gamma_m$ 是学习率。GBDT 无需深树(通常深度 4-6 即可),因为每棵树专注于纠正前序错误,从而高效提升精度,防止过拟合[^1]。适用于回归、分类和排序任务。 3. **CART (分类与回归树)** - 一种决策树算法,用于分类或回归问题。基于递归二分分裂(recursive binary splitting)构建树结构,通过信息增益(information gain)或基尼不纯度(Gini impurity)选择最优分割点。分类时最小化 $Gini(D) = 1 - \sum_{i=1}^k p_i^2$,回归时最小化均方误差 $MSE = \frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2$。CART 简单易解释,但单棵树容易过拟合,常作为集成方法的基础(如 Random Forest)[^2]。 4. **Adaboost (自适应提升)** - 一种 boosting 算法,通过加权样本迭代训练弱分类器(如决策树)。每次迭代增加错误样本的权重,模型输出为加权投票: $$ H(x) = \text{sign}\left(\sum_{t=1}^T \alpha_t h_t(x)\right) $$ 其中 $\alpha_t$ 是分类器权重,$h_t(x)$ 是弱分类器。Adaboost 能快速提升弱分类器性能,减少偏差,但对噪声数据敏感[^2]。适用于二分类和多分类问题。 5. **LSTM (长短期记忆网络)** - 一种递归神经网络(RNN)变体,用于序列数据(如时间序列、自然语言)。通过门控机制(遗忘门、输入门、输出门)解决梯度消失问题,公式表示为: $$ \begin{aligned} f_t &= \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) \\ i_t &= \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \\ o_t &= \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) \\ \tilde{C}_t &= \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) \\ C_t &= f_t \odot C_{t-1} + i_t \odot \tilde{C}_t \\ h_t &= o_t \odot \tanh(C_t) \end{aligned} $$ 其中 $\sigma$ 是 sigmoid 函数,$\odot$ 表示逐元素乘法。LSTM 能记忆长期依赖,适用于语音识别、机器翻译等任务[^3]。 6. **Random Forest (随机森林)** - 一种 bagging 方法,由多个 CART 决策树并行组成。每个树在自助采样(bootstrap sample)和随机特征子集上训练,最终通过投票聚合预测。随机森林需要深树(深度常在 15 以上)来提高单个弱分类器精度,因为随机采样降低了单树性能,但整体减少了方差和过拟合风险[^1]。适用于高维数据分类和特征选择。 7. **Bagging (自助聚合)** - 集成学习方法,通过训练多个基模型(如决策树)在数据子集上并行运行,并聚合预测(如平均或投票)。核心公式为: $$ \hat{y} = \frac{1}{M} \sum_{i=1}^M f_i(x) $$ 其中 $f_i(x)$ 是第 $i$ 个基模型。Bagging 减少模型方差,提升稳定性,尤其适用于高方差算法(如决策树)[^2]。Random Forest 是其典型应用。 8. **Boosting (提升法)** - 集成学习方法,通过序列训练多个弱模型,每个新模型专注于前序模型的错误。Boosting 减少偏差,公式通用形式为 $F(x) = \sum_{m=1}^M \beta_m h_m(x)$,其中 $\beta_m$ 是模型权重。Adaboost 和 GBDT 是其代表,boosting 方法通常生成浅层模型(如树深较浅),因为迭代过程逐步优化精度,避免深度导致的过拟合[^1][^2]。适用于提升弱分类器的性能。 --- ### 关键比较与补充说明 - **深度差异原因**:Random Forest(基于 bagging)需要深树(如深度 15+)来补偿单个决策树因随机采样导致的精度下降,而 XGBoostGBDT 的优化)使用浅树(深度通常 ≤6),因为 boosting 的序列特性逐步纠正错误,浅树即可高效提升精度并防止过拟合[^1]。 - **算法分类**: - 单一模型SVM、CART、LSTM。 - 集成方法:Bagging(Random Forest)、Boosting(Adaboost、GBDT)。 - 整体上,这些算法覆盖了监督学习(如分类、回归)和序列处理任务,选择取决于数据特性:结构化数据常用集成方法(如 GBDT、Random Forest),序列数据使用 LSTM。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值