LoginSignup
5
6

More than 3 years have passed since last update.

機械学習の統計量を特徴量として加える際のスマートな書き方

Posted at

数値データの行方向の統計量を特徴量として生成するコードの書き方です。

ありがちな特徴量生成

まずは良く見る書き方

# 一個一個付け加えていくやり方
df["sum"] = df.sum(axis=1)
df["max"] = df.max(axis=1)
df["min"] = df.min(axis=1)
df["mean"] = df.mean(axis=1)
df["median"] = df.median(axis=1)
df["mad"] = df.mad(axis=1)
df["var"] = df.var(axis=1)
df["std"] = df.std(axis=1)
df["skew"] = df.skew(axis=1)
df["kurt"] = df.kurt(axis=1)

df.head()

これでも良いが、拡張性やメンテナンスを考えるとちょっと気持ち悪い。

スマートな特徴量生成

func_list =["sum", "max", "min", "mean", "median", "mad",
            "var", "std", "skew", "kurt"]

for func in func_list:
    df[func] = df.apply(func, axis=1)

Lambda関数も使える

f_diff = lambda x: df["xxx"]-df["yyy"]

func_list =["sum", "max", "min", "mean", "median", "mad",
            "var", "std", "skew", "kurt", f_diff]

for func in func_list:
    df[func] = df.apply(func, axis=1)


機械学習ではその場限りの実験が多いので”書き捨て”のコードが量産されがち。
※実際、Kaggleのカーネルなどを見ると結構汚いコードが多い気がする。

なるべくスッキリしたコードを書くと、再利用しやすいし拡張性も高まる。

5
6
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
5
6