機械学習 学習まとめ: 教師あり学習

# 教師あり学習
- データ集合の各データの特徴量とラベル(もしくは目標値)の関係を学習するアルゴリズム
- タスクとしては予測(回帰)や分類など

# 線形回帰モデル
## 線形
- 比例で表される直線(2次元空間)、平面(3次元空間)、超平面(4次元以上空間)
    - 2次元空間だと$ y = ax + b $、3次元空間だと$ z = a·x + b·y + c$
    - n次元空間における超平面(hyperplane)の方程式
        - $ y = a_0 + a_1·x_1 + a_2·x_2 + \cdots + a_{n-1}·x_{n-1} $
        - $ y = a_0 + \displaystyle \sum_{i=1}^{n-1}a_i·x_i $
        - $ y = \displaystyle \sum_{i=0}^{n-1}a_i·x_i  , where &ensp; x_0 = 1 $
        - $ y = \boldsymbol{a}^T·\boldsymbol{x}, where &ensp; \boldsymbol{a} = \left(\begin{matrix} a_0 \\\ a_1 \\\ \vdots \\\ a_{n-1}\end{matrix}\right)$
            - $ \boldsymbol{a} $はn次元ベクトル
            - $ \boldsymbol{a}^T $で$ \left(\begin{matrix} a_0 & a_1 & \cdots & a_{n-1} \end{matrix}\right)$
            - $\boldsymbol{x}$もn次元ベクトル、$ \boldsymbol{x} = \left(\begin{matrix} x_0 \\\ x_1 \\\ \vdots \\\ x_{n-1}\end{matrix}\right)$

## 回帰問題
- ある入力(離散あるいは連続値)から出力(連続値)を予測する問題
    - 直線で予測: 線形回帰
    - 曲線で予測: 非線形回帰
- 回帰で扱うデータ
    - 入力: m次元のベクトル
        - 入力の各要素を説明変数または特徴量と呼ぶ
        - $ \boldsymbol{x} = \left(\begin{matrix} x_1 & x_2 & \cdots & x_{m} \end{matrix}\right)^T \in \mathbb{R}^m$
    - 出力: スカラー値
        - 目的変数
        - $ y \in \mathbb{R}^1 $

### 線形回帰モデル
- 回帰問題を解くための機械学習モデルの一つ
- 入力とm次元パラメータの線型結合を出力するモデル
    - 入力
        - $ \boldsymbol{x} = \left(\begin{matrix} x_1 & x_2 & \cdots & x_m \end{matrix}\right)^T \in \mathbb{R}^m$
    - パラメーター(重み、回帰係数)
        - $ \boldsymbol{w} = \left(\begin{matrix} w_0 & w_1 & w_2 & \cdots & w_m \end{matrix}\right)^T \in \mathbb{R}^{m+1}$
            - パラメーターは最小二乗法で推定する
    - 線型結合(入力とパラメーターの内積)
        - $ \hat{y} = \boldsymbol{w}^T \boldsymbol{x} + w_0 = \displaystyle \sum_{j=1}^{m}w_jx_j + w_0$
            - 予測値にはハットをつける

- 単回帰モデル
    - 説明変数(入力)が一次元
    - $ \boldsymbol{y} = \boldsymbol{X} \boldsymbol{w} + \boldsymbol{ε} $
        - $ \boldsymbol{X} = \left(\begin{matrix} \boldsymbol{x_1} & \boldsymbol{x_2} & \cdots & \boldsymbol{x_n} \end{matrix}\right)^T $
        - $ \boldsymbol{y} = \left(\begin{matrix} y_1 & y_2 & \cdots & y_n \end{matrix}\right)^T $
        - $ \boldsymbol{x_i} = \left(\begin{matrix} 1 &  x_i \end{matrix}\right)^T $
            - $x_0$を1とすることによって、$w_0$も同様に扱えるようにする
        - $ \boldsymbol{ε} = \left(\begin{matrix} ε_1 & ε_2 & \cdots & ε_n \end{matrix}\right)^T $
        - $ \boldsymbol{w} = \left(\begin{matrix} w_0 & w_i \end{matrix}\right)^T $
        - $ \left(\begin{matrix} y_1 \\\ y_2 \\\ \vdots \\\ y_n \end{matrix}\right) = \left(\begin{matrix} 1 & x_1 \\\ 1 & x_2 \\\ \vdots \\\ 1 & x_n \end{matrix}\right) \left(\begin{matrix} w_0 \\\ w_1 \end{matrix}\right) + \left(\begin{matrix} ε_1 \\\ ε_2 \\\ \vdots \\\ ε_n \end{matrix}\right) $
            - $ \boldsymbol{X} \boldsymbol{w} $はn×2行列と2×1行列の内積(結果はn×1行列となる)
- 線形重回帰モデル
    - 説明変数が多次元(m>1)
        - 重みは偏回帰係数と呼ぶ
    - 単回帰は直線だが、重回帰は超平面
    - $ \boldsymbol{y} = \boldsymbol{X} \boldsymbol{w} + \boldsymbol{ε} $
        - $ \boldsymbol{X} = \left(\begin{matrix} \boldsymbol{x_1} & \boldsymbol{x_2} & \cdots & \boldsymbol{x_n} \end{matrix}\right)^T $
        - $ \boldsymbol{y} = \left(\begin{matrix} y_1 & y_2 & \cdots & y_n \end{matrix}\right)^T $
        - $ \boldsymbol{x_i} = \left(\begin{matrix} 1 &  x_{i1} & \cdots & x_{im} \end{matrix}\right)^T $
        - $ \boldsymbol{ε} = \left(\begin{matrix} ε_0 & ε_1 & \cdots & ε_n \end{matrix}\right)^T $
        - $ \boldsymbol{w} = \left(\begin{matrix} w_0 & w_1 & \cdots & w_m \end{matrix}\right)^T $
        - $ \left(\begin{matrix} y_1 \\\ y_2 \\\ \vdots \\\ y_n \end{matrix}\right) = \left(\begin{matrix} 1 & x_{11} & \cdots & x_{1m} \\\ 1 & x_{21} & \cdots & x_{2m} \\\ \vdots & \vdots & \vdots & \vdots\\\ 1 & x_{n1} & \cdots & x_{nm} \end{matrix}\right) \left(\begin{matrix} w_0 \\\ w_1 \\\ \vdots \\\ w_m \end{matrix}\right) + \left(\begin{matrix} ε_1 \\\ ε_2 \\\ \vdots \\\ ε_n \end{matrix}\right) $
            - $ \boldsymbol{X} \boldsymbol{w} $はn×(m+1)行列と(m+1)×1行列の内積(結果はn×1行列となる)
            - $ \boldsymbol{X} $は計画行列/デザイン行列
- 線形回帰モデルでは最小二乗法でパラメーターを推定
    - 二乗誤差(残差平方和): データとモデル出力の二乗誤差の和
    - 平均二乗誤差MSE: Mean Squared Error
    $$ MSE_{train} = \dfrac{1}{n_{train}} \displaystyle \sum_{i=1}^{n_{train}} (\hat{y_i}^{(train)} - y_i^{(train)})^2 $$
    - 最小二乗法では、学習データの平均二乗誤差を最小とするパラメーターを探索する
        - その勾配がゼロになる点を求める
    - $ \hat{\boldsymbol{w}} = arg&ensp;min_{\boldsymbol{w} \in  \mathbb{R}^{m+1}}&ensp;MSE_{train} $
        - $ \dfrac{∂}{∂\boldsymbol{w}}MSE_{train} = 0 $
            - 以下では$_{train}, ^{(train)}は省略$
        - ⇒ $ \dfrac{∂}{∂\boldsymbol{w}}\lbrace\dfrac{1}{n} \displaystyle \sum_{i=1}^{n} (\hat{y_i} - y_i)^2 \rbrace = 0 $
            - $MSE$を展開
        - ⇒ $ \dfrac{1}{n}\dfrac{∂}{∂\boldsymbol{w}}\lbrace (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})^T (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})\rbrace = 0　$
            - 二乗を行列で表現(1×n行列とn×1行列の内積)
        - ⇒ $ \dfrac{1}{n}\dfrac{∂}{∂\boldsymbol{w}}\lbrace (\boldsymbol{w}^T\boldsymbol{X}^T - \boldsymbol{y}^T) (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})\rbrace = 0　$
            - 転置の線形性　＆ 転置の公式        
        - ⇒ $ \dfrac{1}{n}\dfrac{∂}{∂\boldsymbol{w}}\lbrace \boldsymbol{w}^T\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{w} - \boldsymbol{w}^T\boldsymbol{X}^T\boldsymbol{y} - \boldsymbol{y}^T\boldsymbol{X}\boldsymbol{w} + \boldsymbol{y}^T\boldsymbol{y})\rbrace = 0　$
            - $\lbrace\rbrace$内を展開 
        - ⇒ $ \dfrac{1}{n}\dfrac{∂}{∂\boldsymbol{w}}\lbrace \boldsymbol{w}^T\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{w} - 2\boldsymbol{w}^T\boldsymbol{X}^T\boldsymbol{y} + \boldsymbol{y}^T\boldsymbol{y} \rbrace = 0　$
            - $ \boldsymbol{y}^T\boldsymbol{X}\boldsymbol{w}$はスカラなので、$ \boldsymbol{y}^T\boldsymbol{X}\boldsymbol{w} = (\boldsymbol{y}^T\boldsymbol{X}\boldsymbol{w})^T $
            - これを転置の公式で、$ (\boldsymbol{y}^T\boldsymbol{X}\boldsymbol{w})^T = \boldsymbol{w}^T\boldsymbol{X}^T\boldsymbol{y} $
        - ⇒ $　2\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{w} - 2\boldsymbol{X}^T\boldsymbol{y}　= 0 $
            - ベクトルの微分計算
            - $ \dfrac{∂}{∂\boldsymbol{w}}( \boldsymbol{w}^T \boldsymbol{b} ) = \boldsymbol{b} $
            - $ \dfrac{∂}{∂\boldsymbol{w}}(\boldsymbol{w}^T \boldsymbol{A} \boldsymbol{w} ) = (\boldsymbol{A} + \boldsymbol{A}^T) \boldsymbol{w} $
        - ⇒ $　\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{w} = \boldsymbol{X}^T\boldsymbol{y} $
            - 両辺を2で割って、一部を右辺に移動
        - ⇒ $　\hat{\boldsymbol{w}} = (\boldsymbol{X}^T\boldsymbol{X})^{-1}\boldsymbol{X}^T\boldsymbol{y} $
            - 両辺に左から$ (\boldsymbol{X}^T\boldsymbol{X})^{-1} $をかける
            - 正規方程式(Normal equation)が得られた
    - 回帰係数
        - $ \hat{\boldsymbol{w}} = (\boldsymbol{X}^{(train)T}\boldsymbol{X}^{(train)})^{-1}\boldsymbol{X}^{(train)T}\boldsymbol{y}^{train} $
        ```Python
        # (X^TX)^{-1}X^Tの部分を計算する
        w_wo_y = np.dot(np.linalg.inv(np.dot(X_train.T, X_train)), X_train.T)
        # w = (X^TX)^{-1}X^T · y
        w = np.dot(w_wo_y, ys)
        ```
    - 予測値
        - $ \hat{\boldsymbol{y}} = \boldsymbol{X_*}(\boldsymbol{X}^{(train)T}\boldsymbol{X}^{(train)})^{-1}\boldsymbol{X}^{(train)T}\boldsymbol{y}^{train} $
            - $\boldsymbol{X_*}$は、予測したい新しい$\boldsymbol{X}$

### 非線形回帰モデル
- 非線形な構造を持つ現象に対して、非線形モデリングを適用する
    - 例えば、$ y = w_0 + w_1x + w_2x^2 + w_3x^3 $
- $x$の代わりに、基底関数である$φ(x)$を用いる
    - $φ(x)$は$x$の何らかの関数
    - 例えば、$ y = w_0 + w_1φ_1(x) + w_2φ_2(x) + w_3φ_3(x) $
    - ただし、$\boldsymbol{x}$については非線形だが、パラメーター$\boldsymbol{w}$の観点では線形である(linea-in-parameter)ことに注意
        - このため、正確には「非線形モデルによる線形回帰」と言える
- 1次元の基底関数
    - 多項式: $φ_j = x^j$
    - ガウス型基底関数: $ φ_j(x) = exp \lbrace -\dfrac{(x - μ_j)^2}{2h_j} \rbrace $
        - $μ_j$が山の位置を、$h_j$が山の幅を規定する
- n次元の基底関数
    - 2次元ガウス型基底関数: $ φ_j(\boldsymbol{x}) = exp \lbrace -\dfrac{(\boldsymbol{x} - \boldsymbol{μ_j})^T(\boldsymbol{x} - \boldsymbol{μ_j)}}{2h_j} \rbrace $


    - 説明変数: $ \boldsymbol{x_i} = \left(\begin{matrix} x_{i1} & x_{i2} & \cdots & x_{im} \end{matrix}\right)^T \in \mathbb{R}^{m}$
    - 非線形関数ベクトル: $ \boldsymbol{φ}(\boldsymbol{x_i}) = \left(\begin{matrix} φ_1(\boldsymbol{x_{i}}) & φ_2(\boldsymbol{x_{i}}) & \cdots & φ_k(\boldsymbol{x_{i}}) \end{matrix}\right)^T \in \mathbb{R}^{k}$
    - 非線形関数の計画行列: $ \boldsymbol{Φ}^{(train)} = \left(\begin{matrix} \boldsymbol{φ}(\boldsymbol{x_{1}}) & \boldsymbol{φ}(\boldsymbol{x_{2}}) & \cdots & \boldsymbol{φ}(\boldsymbol{x_{n}}) \end{matrix}\right)^T \in \mathbb{R}^{n×k}$
    - 最尤法による予測値: $ \hat{\boldsymbol{y}} = \boldsymbol{Φ_*}(\boldsymbol{Φ}^{(train)T}\boldsymbol{Φ}^{(train)})^{-1}\boldsymbol{Φ}^{(train)T}\boldsymbol{y}^{train} $
        - ロジック自体は線形回帰と同じ

# ロジスティック回帰モデル

## 分類問題
- ある入力(数値)からクラスに分類する問題
- 分類で扱うデータ
    - 入力: m次元のベクトル
        - 入力の各要素を説明変数または特徴量と呼ぶ
        - $ \boldsymbol{x} = \left(\begin{matrix} x_1 & x_2 & \cdots & x_{m} \end{matrix}\right)^T \in \mathbb{R}^m$
    - 出力: スカラー値
        - 目的変数
        - $ y \in \lbrace 0, 1 \rbrace $ (0 or 1の値)
- 3つのアプローチ
    - 識別的アプローチ
        - $ p(C_k|\boldsymbol{x}) $を直接モデル化
    - 生成的アプローチ
        - $ p(C_k) $と$ p(\boldsymbol{x}|C_k) $をモデル化し、その後Bayesの定理を用いて$ p(C_k|\boldsymbol{x}) $を求める
    - 識別的アプローチには識別関数の構成もある
        - 例えば、$ \begin{cases} f(\boldsymbol{x}) \geqq 0 ⇒ C = 1 \\\\ f(\boldsymbol{x}) < 0 ⇒ C = 0 \end{cases} $
        - SVMなど
    - ロジスティック回帰は識別的アプローチ

## ロジスティック回帰モデル
- 分類問題を解くための教師あり機械学習モデル
    - 入力とm次元パラメーターの線型結合をシグモイド関数に入力
    - 出力(シグモイド関数の出力)は$ y = 1 $になる確率の値
    - 入力
        - $ \boldsymbol{x} = \left(\begin{matrix} x_1 & x_2 & \cdots & x_m \end{matrix}\right)^T \in \mathbb{R}^m$
    - パラメーター(重み)
        - $ \boldsymbol{w} = \left(\begin{matrix} w_0 & w_1 & w_2 & \cdots & w_m \end{matrix}\right)^T \in \mathbb{R}^{m+1}$
            - パラメーターは最小二乗法で推定する
    - 線型結合(入力とパラメーターの内積)
        - $ \hat{y} = \boldsymbol{w}^T \boldsymbol{x} + w_0 = \displaystyle \sum_{j=1}^{m}w_jx_j + w_0$
        - ただこのままだと$y$は実数になってしまう
- シグモイド関数
    - ロジスティック関数ともいう
    - $ \boldsymbol{w}^T\boldsymbol{x} \in \mathbb{R} $の出力を$ y \in \lbrace 0, 1 \rbrace $につぶす
        - 入力は実数、出力は0〜1の値
    - $ σ(x) = \dfrac{1}{1 + exp(-ax)} $
        - $a$を増加させると、$x=0$付近での曲線の勾配が増加
    - シグモイド関数の微分は、シグモイド関数自身で表現できる
        - $ \dfrac{∂σ(x)}{∂x} = aσ(x)(1-σ(x)) $
- シグモイド関数を経ることによって、以下のようになる
    - $ P(Y = 1|\boldsymbol{x}) = σ(\boldsymbol{w}^T \boldsymbol{x} + w_0) $
        - $σ$はシグモイド関数
        - シグモイド関数の出力は確率になり、データYは確率が0.5以上ならば1、未満ならば0と予測することが可能になる
- 逆に、対数オッズを線形回帰により予測するという言い方もできる
    - 発生確率$P$を対数オッズ(ロジット)に変換することをロジット変換という
    - $ logit(P) = log(\dfrac{P}{1-P}) $
    - 逆に対数オッズ(ロジット)を確率に変換するのが、ロジスティック変換であり、これを実現しているのが、シグモイド関数(ロジスティック関数)


# サポートベクターマシーン(SVM: Support Vector Machine)
- 教師あり学習
- 分類と回帰どちらでも適用可能
    - 分類は決定的(確率は出さない)
- サポートベクターから最大限マージンを取るように決定境界線を決定する
    - サポートベクター: 境界線(面)の最も近くにあるデータ点（マージン上にある）
        - サポートベクターは少なくとも正例・負例それぞれ1つずつの2つとなる
        - マージンの外側のデータは予測に影響を与えない
    - ハードマージンは誤分類を許容しないが、ソフトマージンはある程度誤分類を許容する
        - ハードマージンは外れ値一つで境界線が大きく変わってしまい、過学習を起こしやすい
        - ソフトマージンは誤分類を許容するので、外れ値によって境界線が大きく変わることがなく、ロバスト性が増す
        - ソフトマージンでは、マージンの中にデータが入ることも許容する
- マージンを最大化しつつ，誤分類を減らしていくという最適化問題を解く
    - マージンの最大化は、マージンの逆数の最小化と考え、以下を最適化する
        - $ min \lbrace \dfrac{1}{M} + C \displaystyle \sum_{i=1}^m𝜉_i \rbrace $
            - $M$はマージン、$𝜉_i$は𝑖番目のデータがマージンを侵した具合(=残差)
            - パラメーター$C$によって、どれだけ誤分類を許容するかが決まる
                - $ C $が大きいと，$ 𝜉 $は小さくないといけないので、誤分類をあまり許容しない($ C $が無限大の時は誤分類を一切許容しない、結果的にハードマージンになる)
                - 逆に$ C $が小さいと、比較的誤分類を許容する
                - 一般に過学習を防ぐためには$ C $を小さくする方がよい
- 一般的な線形分類器の決定境界は超平面になる
    - 超平面は以下の式で表される
        - $ θ_0 + θ_1x_1 + θ_2x_2 + \cdots + θ_nx_n = 0 $
    - $x_0 = 1$とすると、
        - $ θ_0x_0 + θ_1x_1 + θ_2x_2 + \cdots + θ_nx_n = 0 $
    - これをベクトルで表記すると、
        - $ θ^T \boldsymbol{x} = 0 $
    - $ θ^T \boldsymbol{x} < 0 $が>0か、<0かで超平面のどちら側にあるかを判定する
- あるデータ$\boldsymbol{x}$から超平面への距離は、
    - $ d = \dfrac{|θ_0x_0 + θ_1x_1 + θ_2x_2 + \cdots + θ_nx_n|}{\sqrt{θ_0^2 + θ_1^2 + θ_2^2 + \cdots + θ_n^2}} $
    - この距離がマージンとなり、これを最大化するためには、分母である$ \sqrt{θ_0^2 + θ_1^2 + θ_2^2 + \cdots + θ_n^2} $を最小化する
        - 平方根を外して、$ min \displaystyle \sum_{j=0}^n{θ_j^2} $と表現できる
- $ θ^T \boldsymbol{x} < 0 $が>0か、<0かで超平面のどちら側にあるかを判定するが、実際にはマージンを取ることを考慮し、損失を計算する際に$ θ^T \boldsymbol{x} $が$ <-1 $(y=0の時)、また$ > 1 $(y=1の時)には損失は0とし、それ以外の場合に損失を線形に増やす
    - そのためにヒンジ損失(hinge loss)を利用する
        - 正解ラベルが1のデータでは、$ θ^T \boldsymbol{x}　> 1 $であれば損失が0
        - 正解ラベルが0のデータでは、$ θ^T \boldsymbol{x}　< -1 $であれば損失が0
- ハードマージンの場合、以下を制約として、$ \displaystyle \sum_{j=0}^n{θ_j^2} $を最小化する
    - $ θ^T \boldsymbol{x}> 1 &ensp;\text{if}&ensp; y_i = 1 $
    - $ θ^T \boldsymbol{x}< -1 &ensp;\text{if}&ensp; y_i = 0 $
- ソフトマージンの場合、変数$𝜉_i$(スラック変数)を導入して上記の制約を以下のように緩め、損失関数$ \displaystyle \sum_{j=0}^n{θ_j^2} + C \sum_{i=1}^m{𝜉_i}$ の最小化を図る
    - $ θ^T \boldsymbol{x}> 1-𝜉_i &ensp;\text{if}&ensp; y_i = 1 $
    - $ θ^T \boldsymbol{x}< -(1-𝜉_i) &ensp;\text{if}&ensp; y_i = 0 $
- カーネルトリック
    - 一見線形分離ができなそうなデータも、高次元特徴量を作ることで線形分離させることができる(高次元に写像する)
        - 例えば、特徴量$ x $を$ (x, x^2) $の二次元空間に写像し、新しい特徴量を生成する
        - この際、写像する関数(射影関数)を$ Φ(x) $で表し、$ Φ(x_i)^TΦ(x_j) $の計算を行う
        - $ Φ(x) $が新たな特徴ベクトル
        - ただし、これはそのままでは非常に計算コストが高くなる
    - カーネルトリックでは、計算量を減らすために、特徴ベクトルの内積である$Φ(x_i)^TΦ(x_j)$を一つのカーネル関数に置き換える
        - $ K(x_i, x_j) = Φ(x_i)^TΦ(x_j) $
        - $ K(x_i, x_j) $がカーネル関数
    - よく使われるカーネル関数
        - 正規化線形カーネル
            - $ K(x, x') = \dfrac{x^Tx'}{||x||||x'||}$
        - 多項式カーネル
            - $ K(x_i, x_j) = (x_i^Tx_j+c)^d $
        - ガウスカーネル(RBFカーネル、動径基底関数)
            - $ K(x_i, x_j) = exp\lbrace -\dfrac{||x_i - x_j||^2}{2σ^2} \rbrace $
        - シグモイドカーネル
            - $ K(x_i, x_j) = -\dfrac{1}{1+exp(-γx_i^Tx_j)} $
        - これらのカーネル関数を使い、
            - $ f(x) = \displaystyle \sum_{i=1}^ma_iK(x, x_i) $
            - 未知のデータ$x$に対して全ての学習データ$x_i$とのカーネル関数の結果を係数$a_i$を使って線形結合した形にする
- 計算例: TBF

# 決定木とランダムフォレスト
- 決定木とは特定の特徴がよく現れるようなデータのかたまりを見つけ、その分類ルールを生成する機械学習の手法
    - 目的変数の特徴が固まって存在するようなデータグループを見つけていく
    - 複数の説明変数を使った条件でデータを分割していくことで、そのデータ領域内における目的変数の特徴の濃度を高めていく
    - 得られた説明変数の条件で構成されるデータの分岐ルール（If-Thenの条件ルール）をツリー構造で生成する
    - 決定木には分類木と回帰木という2つのタイプがある(つまり、分類と回帰両方に利用できる)
        - 回帰木の場合、各データ領域内の値の平均値を期待値として評価する
- 分岐は情報利得の最大化(=不純度の減少量の最大化)を実現するように決定する
    - 実際の分岐の指標としては、モデルにより、ジニ係数、カイ2乗統計量、エントロピーなどを利用する
- データのスケールを事前に揃えておく必要がない、分析結果の説明が容易であるなどのメリットがある
- 決定木とバギングを組み合わせたものが、ランダムフォレスト
    - 複数の決定木を作成し、その多数決で最終的な結果を出す

# k近傍法(kNN)
- 教師あり学習
- 分類
- 最近傍のデータをk個取ってきて、それらがもっとも多く所属するクラスに識別
    - k=1だと最近傍法
- kの値を変えると分類結果も変わる
- kを大きくすると決定境界は滑らかになる
- 一個抜き交差検証法(leave-one-out cross-validation)
    - 1個のデータのみをテスト用に利用し、残りを全て学習データとして利用する交差検証
        - データの数だけ学習を繰り返し、モデルごとにテストして得られた結果を平均し算出