0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

データを入れるだけで簡単にそれなりの予測をするライブラリを作る(2022.5.9)

Last updated at Posted at 2022-05-09

背景:AutoMLを作りたい

機械が得意な事は機械に任せたい私は、データを入れるだけで上手い具合に処理してくれる物を作りたいと思っています。だいぶ前からAutoMLの存在を知っていて、それを理解して作りたいと前々から思っていました。機械的に処理すると言っても、それを作っているのは人間なので結局、人間的な物になるんだと思っています。要は作る人間がどこまで考え抜いているかだけの違いで、単にすごい物を作りたいのか、人間が安全に使える物を作りたいのかに振られやすいと思います。

方法:GitHubにあげて使える様にする

今回実装するのは、LightGBMとLabelEncoding, K-Foldです。ライブラリはそのまま使います。メソッドは、1.説明変数と目的変数のリストを抽出する「devide_tr_ob関数」、2.全てのカテゴリカルデータをラベルエンコーディングする「MyLabelEncoding関数」3.データをK-Foldで分割しLightGBMのデータセットに収める「LGBM_K_DataSet関数」4.学習を行う「LGBM_train関数」の4つを用意しました。よろしければ、ご自由にお使い下さると嬉しいです。改善のリクエストなどありましたら大変助かります。

ライブラリのインストール

GitHubからgit cloneします。

!git clone https://github.com/ShinyRyo/mymojule.git

データの読み込み

今回はkaggleのspaceship titanicのデータを使わせて頂きます。kaggleのnotebookで実行しています。今回は分かり易くするため3つのカテゴリカルデータを落としています。

import pandas as pd
data_path="/kaggle/input/spaceship-titanic/"
train=pd.read_csv(data_path+'train.csv')
test=pd.read_csv(data_path+'test.csv')
train1=train.drop(['PassengerId','Name','Cabin'],axis=1)
test1=test.drop(['PassengerId','Name','Cabin'],axis=1)

モデルインスタンスの作成

先程インストール(git clone)した自作モジュールをインポートします。インスタンス名はてきとうです。

from mymojule.MyLGBM import MyLGBM
a=MyLGBM(train1, test1)

モデルの実行(前処理(ラベルエンコーディング、K-Fold、LGBMデータセットの作成)、学習)

__call__関数を使います。ラベルエンコーディング、K-Fold、LGBM.Datasetの処理後、学習を開始します。学習後のモデルはself.lgb_modelに返すようにしています。

a()

image.png

予測

self.lgb_modelでpredictします。self.lgb_modelに学習済みモデルが返されているので、predictメソッドを使えます。テストデータも前処理した物を使いたいので、self.testを使います。

pred=a.lgb_model.predict(a.test1)

後処理

回帰分析のモデルなので、predictはfloatで出てきます。今回のタスクではTrue, Falseの二値分類にしたいです。ここは適当に平均値より大きければTrue、それ以外はFalseにします。

import numpy as np
pred2=[True if i > np.mean(pred) else False for i in pred]

結果:2つのコンペに対応しました

回帰問題だけですが、目的通りラベルエンコーディングしてLightGBMで学習出来ました。2つのコンペとは言っても一つは分類問題でしたので、後処理をしました。無事投稿でき、評価も付きました。

感想:上手くいかない時は初めからやってみるのに限る

今回はクラスの__init__関数と__call__関数を理解して実装出来ました。使い方が分かっても、使いこなせるのは別でデバッグにかなり時間がかかりました。1つの方で上手くいっても、別の課題に使うと別の問題が出てきて、エラー場所の特定や対応に苦労しました。ともあれ、自分の作りたい物に近付いてる感じがして楽しくなっています。

課題

  1. ノーマルなモデルとの差を明確にしていない
  2. PyPIに上げてアップデートしていきたい
  3. 更新に時間が掛かり過ぎる

関連

GitHubから自作モジュールを使ってみる
自作モジュールをPyPIに登録する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?