数値データの行方向の統計量を特徴量として生成するコードの書き方です。
ありがちな特徴量生成
まずは良く見る書き方
# 一個一個付け加えていくやり方
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のカーネルなどを見ると結構汚いコードが多い気がする。
なるべくスッキリしたコードを書くと、再利用しやすいし拡張性も高まる。