はじめに
kaggleのコンペを始めた際に特徴エンジニアリングで学んだときに凄い納得したことの備忘録。
コンペをやった人ならわかると思うのですが、モデル自体は皆ほとんど似たようなモデルを使ってるんですよね…
どこでこんなにスコアを離されるんだろうと思っていました。
ならどうして1位の人と差が出るのか、それは特徴エンジニアリングにあります。
特徴エンジニアリングとは
特徴エンジニアリングとは、まぁご存じのとおり、与えられた特徴の他に新しい特徴を追加してモデルを学習させることですね。
これは
1.全く新しいデータを集める方法
2.もともとある特徴量から、新たな特徴量を算出する方法
の2種類が主になるかと思うのですが、
新しいデータを集めるのは難しいし、どんな特徴量を足せばいいのかわからん!
そもそも計算で算出してるならもともとの特徴量の情報も持ってるから無意味やろ!
ってツッコミたくなるかもしれません(僕もそうでした)
過去の僕も何回か適当に特徴量を追加してみたこともあったのですが、あまりスコアを上げることができませんでした。
しかしそれは特徴エンジニアリングのコツを全く理解せずに学習させていたことが原因でした。
コツ
コツは以下の2つになります!
重要なことには過敏に反応すること
重要でないことには反応しないこと
初めてこのコツを知ったとき目から鱗でしたよ全く(勉強不足)
簡単な例を挙げると、University of California at Irvine(UCI)が公開しているデータセット「小麦データセット」があります。
これは小麦の種の面積や長さ幅から小麦の品種を予測するものなのですが、特徴量の中に密集度といったものがあります。
この密集度は前述したような、他の特徴量から計算して求められた特徴量なのですが、式としては
(種の面積)/(種の周囲長さ)^2
となっています。
この特徴量は種の形が同じであれば面積に関わらず同じ値になります。しかし形が細長くなったり、丸くなったりするとこの特徴量の値は大きく変化します。(適当に代入してみてください)
このように分類に重要な特徴に反応し、重要でない特徴に反応しない特徴量は、学習に非常に有効だといえます。
検証
時間があったら更新します。
おわり
特徴量を作成する際に忘れたくないコツであったので備忘録として記事にしました。
重要なことには過敏に反応する
重要でないことには反応しない
このコツを意識するだけでモデルのスコアは格段に向上するでしょう!