fast.ai par1 lesson4 Tabularデータの攻略方法メモ

    はじめに

    この記事では、Tabular(表形式)データに対しての攻略方法についてメモする。

    詳しくは、以下の参考記事を参照。

    この記事では、オリジナルのデータに対してこの技をどうやって適用するか、 動画のなかでコメントされていたので、それを書く。

    TabularデータにDeep Learningを適用するためのステップ

    step1

    カテゴリカルデータと、数値データのカラムを並べる。

    cat_vars = ['Store', 'DayOfWeek', 'Year', 'Month', 'Day', 'StateHoliday', 'CompetitionMonthsOpen',
        'Promo2Weeks', 'StoreType', 'Assortment', 'PromoInterval', 'CompetitionOpenSinceYear', 'Promo2SinceYear',
        'State', 'Week', 'Events', 'Promo_fw', 'Promo_bw', 'StateHoliday_fw', 'StateHoliday_bw',
        'SchoolHoliday_fw', 'SchoolHoliday_bw']
    
    contin_vars = ['CompetitionDistance', 'Max_TemperatureC', 'Mean_TemperatureC', 'Min_TemperatureC',
       'Max_Humidity', 'Mean_Humidity', 'Min_Humidity', 'Max_Wind_SpeedKm_h', 
       'Mean_Wind_SpeedKm_h', 'CloudCover', 'trend', 'trend_DE',
       'AfterStateHoliday', 'BeforeStateHoliday', 'Promo', 'SchoolHoliday']

    step2

    どのindexがvalidation setなのかを設定する。

    train_ratiotrain_rat  = 0.75
    train_size = int(samp_size * train_ratio); train_size
    val_idx = list(range(train_size, len(df)))

    step3

    DataFrameから、dataオブジェクトを作成。

    md = ColumnarModelData.from_data_frame(PATH, val_idx, df, yl.astype(np.float32), cat_flds=cat_vars, bs=128,
                                           test_df=df_test)

    step4

    embeddingするサイズを求める。

    cat_sz = [(c, len(joined_samp[c].cat.categories)+1) for c in cat_vars]
    emb_szs = [(c, min(50, (c+1)//2)) for _,c in cat_sz]

    step5

    学習モデルの作成

    mm  =  md.get_learner(emb_szs, len(df.columns)-len(cat_vars),
    	            0.04, 1, [1000,500], [0.001,0.01], y_range=y_range)

    step6

    学習

    m.fit(lr, 5, metrics=[exp_rmspe], cycle_len=1)