Python 我如何组合/集成存储在3个数据帧中的3个机器学习模型的结果,并输出1个数据帧和大多数人同意的结果?

Python 我如何组合/集成存储在3个数据帧中的3个机器学习模型的结果,并输出1个数据帧和大多数人同意的结果?,python,pandas,machine-learning,scikit-learn,ensemble-learning,Python,Pandas,Machine Learning,Scikit Learn,Ensemble Learning,我目前正在参加一个在线黑客竞赛。所有排名靠前的条目彼此之间的距离都在1%以内。因此,我决定运行3个不同的模型,而不是一个性能最好的模型,即集成学习,对每一个模型调整超参数,然后将这三个模型的结果结合起来,得到一个更好的模型。我在一个数据帧中综合了这三种方法的结果,其df.head()如下所示: index | building_id | rf_damage_grade | xg_damage_grade | lr_damage_grade | damage_grade 0 a3380c

我目前正在参加一个在线黑客竞赛。所有排名靠前的条目彼此之间的距离都在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_损伤_等级”是我最好的分类器。它给出了大约74%的准确率,另外两个分别给出了68%和58%。在我想要的最终输出中,如果“xg_损坏等级”和“lr_损坏等级”都同意一个值,则最终输出“损坏等级”将更改为该值,否则它将保持等于“rf_损坏等级”的输出。数据中有超过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的
其中

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

非常感谢你的帮助。它在几秒钟内完成了这项工作,使用“for”循环大约需要2个小时。NP.在那里花了0.0613329410552978秒,DF.LoC花了0.1509299278259277秒,这是一个巨大的进步,从9000秒,它采取较早。problem@MykhailoLisovyi谢谢你的提示,我已经对答案投了更高的票,但由于我是一个新用户,代表性较少,我的得票数目前没有反映出来。@alok.m,很高兴能帮上忙!通常,熊猫的新来者会以一般的pythonic方式来处理可移植数据,比如循环元素。但是,在数据分析(Pandas、R、SAS等)中,您希望分块工作,用一种方法处理整个对象。在这里,这些逻辑调用由系列(即列)运行,而不是由系列的每个元素运行。一种不同的思维方式,但很有用。