俺はただLightGBMを動かしてみたかったんだ
ゼロから作るディープラーニング読んでみたけど...
みなさんご存知「ゼロから作るDeep Learning」です。筆者の私は理系のバックグラウンドがあるため、多少四苦八苦しながらも理解できました。
しかし!kaggleで活躍したい!業務に活かしたい!機械学習もっとやってみたい!そこにたどり着くにはこの本を読んだだけでは当然ダメなのです。
とりあえずLightGBM動かしたい
詳しい方は突っ込みたいと思います...
「ディープラーニング勉強したのにLightGBMはGBDTですよ」
見逃してください。(GBDTって何?という方はこちら)
なぜLightGBMかと言われるととにかく流行っていたんです。
素晴らしい点はいくらでもありますが、私からしてみるととりあえず流行っていたんです。あとは他人のコードをみると実装が簡単そうでした。そして実際に、簡単でした。
LightGBMを動かした初心者の反省
公式ドキュメントを読んで勉強してから動かすべし。
最初はわかりやすそうなブログからコードをそのまま持ってきて転用しました。するとやっぱりエラーだらけで、、、
やっぱりどんな理由があろうとちゃんと公式ドキュメントを読んでから使わないといけないです。誰かの書いたブログを丸々コピーして転用なんていけません。そんなことを実感しました。
LightGBM初心者はここで嵌った
【その1】LightGBMに与えるテーブルデータは全て数値に変換すること。文字列は与えられない
この対策はsklearnのライブラリを利用すると早く解決できます。
scalar = StandardScaler()
scalar.fit(X[num_features])
for df in [X, test]:
df[num_features] = scalar.transform(df[num_features])
le = preprocessing.LabelEncoder()
le.fit(X[column])
for column in cat_features:
label_encoded_column = le.transform(df[column])
df[column] = pd.Series(label_encoded_column).astype('category')
【その2】予測したいのは2値問題?多分類?回帰?
objectiveというパラメータ引数を意識しなくてはいけません。
予測したいことはなんなのか?「株価を予測したい」のか「男女を見分けたいのか」によってobjectiveを変更する必要があります。
params = {"objective": "multiclass", "num_class": 3, }
【その3】テストデータと訓練データには同じ加工を
訓練データだけ加工してはいけませんでした。当たり前ですね...
上で紹介したStandardScaler()を使うときも、訓練データから得た情報で変換を行います。例えば犬を1、猫を2みたいな変換ロジックがStandardScalerを使用した先ほどの例でいうと、le.fit(X[column])とした段階で決まります。
これをXとtestに同様に作用させなくてはいけません。
以上でした。また、この時のコードは
に記載しています。
ブログを別で管理しているので、よろしければご覧ください!
この記事が気に入ったらサポートをしてみませんか?