如何 combine/ensemble 存储在 3 个数据帧中的 3 个机器学习模型的结果,并输出 1 个数据帧且结果得到多数人同意?

How do I combine/ensemble results of 3 machine learning models stored in 3 dataframes and output 1 dataframe with results agreed by majority?

我目前正在参加在线黑客马拉松。所有排名靠前的条目彼此相差在 1% 以内。所以我决定 运行 3 个不同的模型,而不是一个性能最好的模型,即集成学习,调整每个模型的超参数,然后结合所有三个的结果以获得更好的模型。我将所有三个结果组合在一个数据框中,它的 df.head() 如下:

index | building_id | rf_damage_grade | xg_damage_grade | lr_damage_grade   | damage_grade

0   a3380c4f75  Grade 4 Grade 2 Grade 3 Grade 4

1   a338a4e653  Grade 5 Grade 5 Grade 5 Grade 5

2   a338a4e6b7  Grade 5 Grade 5 Grade 5 Grade 5

3   a33a6eaa3a  Grade 3 Grade 2 Grade 4 Grade 3

4   a33b073ff6  Grade 5 Grade 5 Grade 5 Grade 5

所以 'rf_damage_grade' 是我最好的分类器的列。它给出了大约 74% 的准确率,其他两个分别给出了 68% 和 58%。在我想要的最终输出中,如果 'xg_damage_grade' 和 'lr_damage_grade' 都同意一个值,则最终输出 'damage_grade' 将更改为该值,否则它仍然等于 'rf_damage_grade' 的输出.数据中有超过 40 万行,每次我重新 运行 我的模型时,在我的 2015 年初 MBP 上执行此操作大约需要一个小时。以下是我编写的代码:

for i in range(len(final)):
    if final.iloc[i,2]==final.iloc[i,3]:
        final.iloc[i,4]=final.iloc[i,2]
        if final.iloc[i,3]!=final.iloc[i,1]:
            count+=1
    else:
        continue

我该怎么做才能提高效率? sklearn 中是否有任何内置函数可以执行此类操作?

简单地 运行 条件逻辑与 .loc:

df.loc[df['xg_damage_grade'] == df['lr_damage_grade'], 'damage_grade'] = df['xg_damage_grade']
df.loc[df['xg_damage_grade'] != df['lr_damage_grade'], 'damage_grade'] = df['rf_damage_grade']

或者使用 numpy 的 where:

df['damage_grade'] = np.where(df['xg_damage_grade'] == df['lr_damage_grade'],
                              df['xg_damage_grade']
                              df['rf_damage_grade'])