機械学習tips(更新中)
はじめに
機械学習の分野で、一つの記事にするほどではないけど、役にたつことをつらつらと書いていきます。
目次
permutation importance
permutation importance とは?
特徴量の重要度を評価する方法です。
計算方法
Permutation Importanceの使い方
具体的なPermutation Importanceの計算は以下の手順で行われます。
学習済みモデルをf, 特徴量行列をX, ターゲットベクトルをy, 損失関数(例えばMSE)をL(y,f)としたとき
- 本体のモデルを用いて、誤差eo = L(y, f(X))を計算する
- 全ての特徴量j = 1,...,Jに対して、 jをpermutationすることで特徴量行列Xpjを計算する
- 上記を用いて、permutation後の誤差ep = L(y,f(Xpj))を計算する
- Permutation Importance PIj = ep/eoを計算する
上記の手順で計算したPermutation Importanceが大きければ大きいほど、特徴量jがモデルにとって重要であることがわかります。
注意すること
- 相関係数の高い特徴量がある場合、片方を消してももう片方が精度を出してくれるので、重要度が高くないと判定されてしまうことがある。
正規化と標準化
正規化と標準化の使い分け
正規化
- 画像処理におけるRGBの強さ
- sigmoid, tanhなどの活性化関数を用いる、NNのいくつかのモデル
標準化
使わない
- 決定木、ランダムフォレスト
ライブラリのインポート
# 正規化 from sklearn.preprocessing import MinMaxScaler mmsc = MinMaxScaler() # 標準化 from sklearn.preprocessing import StandardScaler stdsc = StandardScaler()
特徴量エンジニアリング
intraction
特徴量同士に演算を作用させて、新たな特徴量を作り出す方法。
- 四則演算、特に特徴量同士の差や比率が精度向上につながるケースがある。
- 網羅的にやっても良いが、ビジネス的に意味のある量を作ることで精度を上げていることが多い。
- もともとある特徴量同士だけではなく、もとの量と集約値といったパターンも多い。
どんなときに有効か
物理量や意味が明確な数値列が多数ある場合(差や割り算が聞くのは、同一単位系の両同士のことが多い。)
注意点
相関係数が大きくなってしまうので、注意
# 標準化 from sklearn.preprocessing import StandardScaler def std(X): stdsc = StandardScaler() ans = stdsc.fit_transform(X.reshape(100,1)) return ans.reshape(100) X = np.random.rand(100) Y = np.random.rand(100) print("そのまま") print(np.corrcoef(X,Y)) print("+") print(np.corrcoef(X,std(X+Y))) print("-") print(np.corrcoef(X,std(X-Y))) print("*") print(np.corrcoef(X,std(X*Y))) print("/") print(np.corrcoef(X,std(X/Y)))
出力そのまま [[1. 0.01216205] [0.01216205 1. ]] + [[1. 0.71464402]
[0.71464402 1. ]]
[[1. 0.70616477] [0.70616477 1. ]] * [[1. 0.70383358] [0.70383358 1. ]] / [[1. 0.10135746] [0.10135746 1. ]]