Introduction to ML with Python

Pyhton3

export PATH="/home/tkobayas/anaconda3/bin:$PATH"

Jupyter Notebook

cd /home/tkobayas/usr/git/amueller/introduction_to_ml_with_python

jupyter notebook

 

Supervised Learning

Classifier と Regressor

  • k-NN (k-Nearest Neighbors)
    k個の近いやつを拾う。訓練はデータを格納するだけ。予測に時間がかかる
  • Linear Regression (ordinary least squares : OLS)
    二乗誤差(mean squared error) が最小になるように w (係数: coefficient) と b (切片: intercept) を求める。
  • Ridge
    L2正則化 (regularization) で w を小くし、汎化性能を上げる
  • Lasso
    L1正則化
  • Logistic Regression
    (TODO)
  • Linear Support Vector Machines: SVM
    (TODO)
  • Naive Bayes Classifiers
    (TODO)
  • Decision Trees
    2分木の繰り返し。depthを調整して汎化。外挿(extrapolate)ができない、つまり訓練データのレンジの外側に対しては予測できない
  • Random Forests
    featureやデータを減らした条件で複数のDecision Treeを生成し、組み合わせる(それぞれの確率予測を平均し、最も高いものに決定)
  • Gradient Boosted Regression Trees (勾配ブースティング回帰木)
    1つ前のDecision Treeの誤りを次のDecision Treeが修正するようにして、Decision Treeを順番に作っていく
  • Kernelized Support Vector Machines
    非線形特徴量を追加する(例:ある特徴量の2乗)。決定境界に重要な一部のデータポイントを Support Vector と呼ぶ。前処理:全ての特徴量が0から1の間になるようにスケール変換する。
  • Neural Network
    多層パーセプトロン(multilayer perceptron: MLP)。隠れユニット(Hidden Unit)による重み付け。活性化関数 RELU、TANH

不確実性の推定

  • Decision Function
    正負で予測クラス、絶対値でそのモデルが信じている度合いが表される
  • Predicting Probabilities
    0から1で確率(確信度)を表す

Unsupervised Learning and PreProcessing

前処理、スケール変換

  •  StandardScaler など

次元削減、特徴量抽出、多様体学習

  • 主成分分析 Principal Component Analysis : PCA
    まず分散が大きい方向を第1成分とする。次に第1成分と直交する方向から、最も情報を持っている方向を探し、第2成分とする。以下繰り返す。
    主成分のいくつかだけを残すことで次元削減にも使える。
    例えば顔認識に使う時、画像を各ピクセル(特徴量)ではなく、PCA変換後の各主成分の重み付き和で表現する、つまり別の特徴量で表現する。
  • 非負値行列因子分解 Non-negetive Matric Factorization : NMF
    データを非負の重み付き和に分解する。複数のデータが重ね合わせられた場合(複数楽器の音声データなど)に有効
  • t-SNE
    多様体学習。主に2次元表現にして可視化に用いる。

クラスタリング

  • k-means クラスタリング
    まずランダムにクラスタ重心を決める。個々のデータポイントを最寄りの重心に割り当て、重心位置を再計算する、を繰り返す。クラスタが丸い塊でないと上手く機能しない。
  • 凝集型クラスタリング agglomerative clustering
    個々のデータポイントを個別のクラスタとして開始する。類似したクラスタをマージしていく。「類似」のデフォルトは ward。マージした際にクラスタないの分散の増分が最小になるように2つのクラスタを選択する。これは階層型クラスタリング hierarchical clustering でもある。デンドログラムで階層を見る。
  • DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
    クラスタはデータ中で高密度領域を構成していて、比較的空虚な領域で区切られていると考える。空虚な領域のデータを noise とみなす。クラスタ数を先験的に与える必要がない。
クラスタリングアルゴリズムの比較と評価
  • 調整ランド指数(adjusted rand index : ARI)
  • 正規化相互情報量(normalized mutual information : NMI)

データの表現と特徴量エンジニアリング

Categorical Variables

  • One-Hot-Encoding (Dummy variables)
    カテゴリごとに 0/1 の特徴量に置き換える。連続性のない数値データもワンホットエンコードする

 Binning, Discretization, Linear Models, and Trees

  • Binning/Discretization
    連続量を等間隔(ビン)に区切り、複数の離散値にし、ワンホットエンコーディングする。線形モデルに適用すると表現力が上がる場合がある。
  • 交互作用特徴量(interaction feature)
    2つの特徴量の積を特徴量として加える
  • 多項式特徴量(polynominal deature)
    特徴量の2乗、3乗 ... を特徴量として加える。Linear Regression と組み合わせると、Polynominal Linear Regression となる。スムーズに適合するようになる。

単変量非線形変換 Univariate Nonlinear Transformation

  •  log, exp はスケール変換で有用。sin,cos は周期的なパターンに有用。

自動特徴量選択

特徴量が多すぎると過剰適合の可能性が高くなる。どのように良い特徴量を選択すればよいか?

  • 単変量統計 univariate statistics
    個々の特徴量とターゲットとの間の統計的関係を計算。高い確信度で関連している特徴量を選択する。モデルの構築が不要
  • モデルベース選択 model-based selection
    教師あり学習モデルを用いて個々の特徴量の重要性を判断。決定木ベースモデルなどを使う。
  • 反復選択 iteratice selection
    再帰的特徴量削減 recursive feature elimination : RFE まず全ての特徴量を使ってモデルを作り、最も重要度が低い特徴量を削減する。そしてまたモデルを作り。。。を繰り返す。

専門家知識の利用

専門家によるレビューで、適切な特徴量を追加する。単なるPOSIX時刻ではなく、時刻や曜日など。

モデルの評価と改良

 交差検証 cross-validation

k-fold cross-validation データをk個に分割して1つをテストデータとし、残りを訓練データにする。kパターンの組合わせで精度を検証できる。

層化k分割交差検証 stratified k-fold cross-validation 各分割内でのクラスの比率が全体の比率と同じになるように分割する。

1つ抜き交差検証 leave-one-out データ1つが1分割に相当する。大量に検証出来る。

グリッドサーチ

各パラメータ(SVMにおける gamma [カーネルのバント幅]、C[正則化パラメータ])の各値でグリッド表にして、比較する。

パラメータ選択用にもう一つ「検証セット」を分ける。つまりデータを training set, validation set, test set に3分割する

評価基準とスコア

最終的な目標を見失わないこと。アプリケーションの高レベルでの目的を考える。

精度が予測性能の尺度として良くない場合がある。結果を true positive (TP), false positive (FP), true negative (TN), false negative (FN)  に分ける。

精度 = (TP+TN) / (TP + TN + FP + FN)

適合率 = TP / (TP + FP) ... 偽陽性を減らしたいときに用いる

再現率 = TP / (TP + FN) ... 偽陰性を避けたいときに用いる(ガン検査など)

f-measure (f-値) = 2 * ( (適合率 * 再現率) / (適合率 + 再現率) ) ... 総合的にまとめて評価。偏った2クラス分類データセットに対しては、精度よりも良い基準となる。

ROCカーブ receiver operating characterristics curve 偽陽性率と真陽性率を軸にしてプロットする。このカーブの下の領域面積 AUC : area under the curve のスコアで評価。偏ったクラス分類問題を評価する基準としては、精度よりもAUCの方がはるかに良い。

回帰の場合、R^2スコア(coefficient of determination)で良い

アルゴリズムチェーンとパイプライン

複数の Estimator をひとつの Pipeline にまとめる(例: MinMaxScaler と SVC)。この pipeline をグリッドサーチに渡せばよい。

(fit -> transform) -> (fit -> transform) -> (fit) とか

(transform) -> (transform) -> (predict) のように呼ばれる

グリッドサーチとパイプラインの組合わせで、例えば RandomForestClassifier と SVC の比較もできる。

テキストデータの処理

Bag of Words (BoW)

単語に分割し、出現回数をカウント。そのまま特徴量として Classifier を訓練できる。

不要な単語などを検出し、特徴量を抽出/削減する。あるいはスケールを調整する。

  • min_df : 最小出現文書数。例えば、1つの文書にしか出現しない単語は評価する意味が無いだろう。
  • ストップワード : 辞書ベースで固有の不要リストを作る。英語だと the, me, など
  • tf-idf (term frequency-inverse document frequency) : 特定の文書に頻出する単語に重みを与える(満遍なく出るような単語は重要では無い)。

n-gram

2つや3つのトークンをまとめる。例えば "not worth" は否定的、"definitely worth", "well worth" は肯定的。

正規化 normalization

  • 語幹処理 stemming : 単語の末尾を取り除き、単語の変化形を共通化する。機械的なので、うまくいかない場合も多い。
  • 見出し語化 lemmatization : 語幹処理よりも複雑な処理で、一般に良い結果が得られる
  • スペルミスの修正など

トピックモデリング、文書クラスタリング

  • LDA (Latent Dirichlet Allocation) : 同時に現れる頻度の高い単語の集合(= トピック)を探す。

その他

  • word2vec : ワードベクタと呼ばれる連続値ベクタ表現を利用
  • RNN (Recurrent Neural Networks) : テキストからテキストを生成。自動翻訳や要約に適している