H::I::D::8
学び
- 教師あり学習
- 分類: カテゴリを予測する
- 回帰: 数量を予測する
- 実問題を既存のタスクに結びつけることがまず第一歩
- 特徴量は多めに出すようにするのが良い
- 無駄な特徴量は、この後のプロセスで見つけ出して取り除いてしまうことができるから
- 適合率寄りのFβスコア
- 正例と負例ができるだけ同じくらいの数になるように注意
- 正例のデータをたくさん持っているなら、できるだけ負例のデータを集めるように
- 機械学習アルゴリズムを実装するときに大事なのは、まず もっとも簡単な方法で 実装・実験・評価を行う こと
- ベースラインを実装したときに、あまりにも性能が低いときは、タスク設定自体を疑う
特徴抽出
がとても大事- 次元ごとに値のスケールがバラバラだと、学習アルゴリズムは性能を発揮できない
- すべての次元でだいたい同じような値の範囲になるようにスケール変換する
- 標準化 (standardization): Z-score によるスケーリング
- 正規化 (normalization): Min-Max スケーリング
- 前処理フェーズでも学習フェーズでもテストデータを使ってはいけないことに注意
- 実際にエラー(false positive/false negative)になっているインスタンス(事例)を見てみるのが重要
- 既存実装のソースコードを読むのも勉強になる (scikit-learn とか読みやすい)
- 自分でミドルウェアのようなものを作るのは筋が悪い
- Choosing the right estimator — scikit-learn 0.17.1 documentation
- どの手法が最適かYes/Noチャート形式で選ぶことができる
- 機械学習アルゴリズム チート シート | Microsoft Azure
- これも同じような奴
- テキストの前処理
- 文字単位の正規化
- NFKC
Normalizer.normalize("〜〜〜〜〜", Normalizer.Form.NFKC);
- 単語単位の正規化
- 見出し語化 (lemmatization)
- 文字単位の正規化
- BoW (Bag of Words) モデル
- テキストをベクトル表現するための方法
- 単語の順番は区別しない
- ストップワードの除去
- a / the / is などの頻出語を除去する
- 品詞がわかっている場合、助詞(日本語の場合)や冠詞(英語の場合)の単語をすべて除去する、なども可能
- テキストを BoW モデルで特徴ベクトルに変換する
- BoW モデルでは、1つの単語が1つの次元に対応
- 次元の順番は適当に決める
- 単語の出現回数や重要度で、各次元に重み付けをすることができる
- 単語頻度 (TF; term frequency):その文書に単語が現れた回数
- 文書頻度 (DF; document frequency):データセットのうち、いくつの文書にその単語が現れたか
- 逆文書頻度 (IDF; inverse document frequency):DF の逆数。単語の重要度を表すと考えられる
for (i <- 0 to arr.size -1)
->for(i <- 0 until arr.size)
->for (i <- arr.indices)
- 昨日のパーセプトロンの実装がマズかった
- 重みの次元が決め打ちになっており,特徴量の次元が決め打ちのしてたやつより多ければ無視する感じになっていた...
if (w.size < features.size) w.appendAll(Nil.padTo(features.size - w.size, 0.0))
- こんな感じでちゃんとやってあげる (
w
はArrayBuffer
)
謎
- 一体どんな感じでやれば,F値が良い感じになるのか...
TF
でしかやってないので,DF
やIDF
でもやってみるか
情報
- HTMLをサニタイズするのに,許可する要素を選べてべんりだった