• 机器学习知识点:模型加权集成7种方法


    在竞赛中如果对多个预测结果进行集成,最方便的做法是直接对预测结果进行加权求和。此时不同任务,加权方法不同:

    • 分类任务:类别投票 & 概率值加权

    • 回归任务:预测值加权

    • 排序任务:排序次序加权

    • 目标检测任务:预测结果NMS

    • 语义分割任务:像素类别投票 & 加权

    在本文中我们将介绍最常见的分类 & 回归任务的结果加权方法,也就是Blend操作。

    技术提升

    项目代码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

    方式①、添加微信号:dkl88191,备注:来自CSDN
    方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    多样性 & 精度差异

    在对结果进行集成时需要考虑如下两点:

    • 模型的多样性:

    • 模型的精度差异;

    集成学习的精度收益是需要模型&预测结果的多样性,如果多样性不足,则最终预测结果和单个模型类似。

    精度差异是指模型之间的精度差异,如果精度差异很大最终集成的效果也不会很好。如下情况2的模型精度差异就较大。

    三个模型精度:[0.9, 0.92, 0.92]
    三个模型精度:[0.9, 0.8, 0.7]
    
    • 1
    • 2

    Out of fold

    Out of fold又名袋外预测,是一个模型在交叉验证的过程中使用训练部分进行训练,然后对验证集进行预测,交替得到训练集和测试集预测结果。

    如果我们拥有三个模型,通过交叉验证可以得到3个训练集预测结果和3个验证集预测结果。

    如下展示的几种方法,都需要训练集标签 与 训练集预测结果搜索得到参数,然后将参数在测试集上进行使用。

    方法1:均值加权

    • 原理:对所有模型的预测结果计算均值;

    • 优点:简单,过拟合可能性低;

    • 缺点:会受到模型原始精度差异的影响;

    oof_preds = []
    for col in oofCols:
        oof_preds.append(oof_df[col])
    
    y_avg = np.mean(np.array(oof_preds), axis=0)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方法2:权重加权

    • 原理:对所有模型的预测结果加权求和;

    • 优点:比均值更加可控;

    • 缺点:权重需人工设置,更容易过拟合;

    weights = [1,2,3]
    y_wtavg = np.zeros(len(oof_df))
    
    for wt, col in zip(weights, oofCols):
        y_wtavg += (wt*oof_df[col])
    
    y_wtavg = y_wtavg / sum(weights)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    方法3:排序加权

    • 原理:对预测结果进行排序,使用次序代替原始取值;

    • 优点:适合分类任务,对概率进行集成;

    • 缺点:会受到模型原始精度差异的影响;

    rankPreds = []
    for i, col in enumerate(oofCols):
        rankPreds.append(oof_df[col].rank().values)
    
    y_rankavg = np.mean(np.array(rankPreds), axis=0)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方法4:排序权重加权

    • 原理:对预测结果进行排序,使用次序进行加权求和;

    • 优点:比均值更加可控;

    • 缺点:权重需人工设置,更容易过拟合;

    rankPreds = []
    weights = [1,2,3]
    
    for i, col in enumerate(oofCols):
        rankPreds.append(oof_df[col].rank().values * weights[i])
    
    
    y_rankavg = np.mean(np.array(rankPreds), axis=0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    方法5:爬山法加权

    • 原理:权重进行搜索,保留最优的权重;

    • 优点:可以自动权重权重大小;

    • 缺点:更容易过拟合;

    for w1 in np.linspace(0, 1, 100):
      for w2 in np.linspace(0, w2, 100):
        w3 = 1 - w1 - w3
        
        如果 w1, w2, w3取得更好的精度,保留权重
        否则尝试下一组权重组合
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    方法6:线性回归加权

    • 原理:使用线性回归确定权重

    • 优点:可以自动权重权重大小;

    • 缺点:需要额外训练,容易过拟合;

    from sklearn.linear_model import LinearRegression
    
    lr = LinearRegression(fit_intercept=False)
    lr.fit(
       三个模型对训练集预测结果,
       训练集标签
    )
    
    lr.coef_ # 线性回归的权重
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    方法7:参数优化加权

    • 原理:使用优化方法搜索权重

    • 优点:可以自动权重权重大小;

    • 缺点:需要额外训练,容易过拟合;

    def f(x):
        return x[0]**2 + x[1]**2 + (5 - x[0] - x[1])
        
    from scipy import optimize
    minimum = optimize.fmin(f, [1, 1])
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    c期末复习
    【笔试真题记录】2023华为9.20机试第二题(DFS和BFS)
    PendingIntent
    M和打印及绘图的火花
    【无标题】CTreeCtrl更改-/+展开按钮颜色
    交换机和路由器技术-17-生成树协议配置
    基于Pytorch框架的深度学习ConvNext神经网络宠物猫识别分类系统源码
    异常--Java
    【uni-app系列】uni-app之App打包
    【图解 HTTP】简单的HTTP协议
  • 原文地址:https://blog.csdn.net/m0_59596937/article/details/127950279