簡體   English   中英

如何將存儲在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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM