今回はキカガクで「機械学習 実践(教師あり学習:回帰) - KIKAGAKU」と「機械学習 実践(教師あり学習:分類) - KIKAGAKU」を学んだ。
機械学習 実践(教師あり学習:回帰)
回帰
直線で表現することを線形回帰という。
- 単回帰分析
- 重回帰分析
- Ridge 回帰(リッジ回帰)
- Lasso 回帰(ラッソ回帰)
直線ではない形で表現するアルゴリズムを非線形回帰という。
- 決定木(回帰木)
- ランダムフォレスト
- ニューラルネットワーク
Kaggle などの世界的な分析プラットフォームでは、勾配ブースティングと呼ばれる手法が多く使用されており、有名な例として XGBoost や LightGBM がある。
重回帰分析の復習
回帰分析とは、2 つ以上の変数から回帰分析を行う多変量解析の一つ。
目的関数は単回帰分析と同様に二乗和誤差を用いて最適化する。
重回帰分析の実装
- データセットの準備
- 学習用データセットとテスト用データセットへ分割
単純に全体の何割かを学習用データセットとし、残りをテスト用データセットとする、といった分割を行う方法はホールドアウト法 (holdout method) と呼ばれる。 - モデルの学習・検証
Step 1:モデルの定義
Step 2:モデルの学習
Step 3:モデルの検証 - 推論 (inference)
モデルの検証において、LinearRegression クラスは score() メソッドを提供しており、入力変数と目的変数を与えると学習済みのモデルを用いて計算した決定係数 (coefficient of determination) という指標を返す。決定係数の最大値は 1 であり、値が大きいほど(1 に近いほど)モデルが与えられたデータに当てはまっていることを表す。
学習時に用いたデータに対してはよく当てはまっていても、学習時に用いなかったデータに対しては予測値と目標値の差異が大きくなってしまう現象を、過学習 (overfitting) という。
線形回帰の過学習を抑制する手法
過学習を抑制するアプローチは次のとおり。
- データセットのサンプル数を増やす
- ハイパーパラメータを調整する
- 他のアルゴリズムを使用する
Ridge 回帰(リッジ回帰)やLasso 回帰(ラッソ回帰)など
正則化 (regularization) は、機械学習において、正則化は目的関数に正則化項と呼ばれるモデルの複雑性に罰則(ペナルティ)を科すために追加の項を導入して過学習を抑制する。
Ridge 回帰は、重回帰分析に対して正則化を行うことで、モデルの過度な複雑さに罰則を課して過学習を抑制する。重回帰分析の目的関数である最小二乗法と正則化項という 2 つの最小化した場所を最適解とする。
ハイパーパラメータとは、モデルの学習を実行する前に設定する値。
ノルムとは、長さを一般化したもので、ベクトル空間で距離を与えるための概念。
Lasso 回帰も、重回帰分析に対して正則化を行うが、不要な入力変数の重みを 0 にし(スパース性)、実質的に入力変数を減らすことによって過学習を抑制する。
スパース性とは物事の本質的な特徴を決定づける要素はわずかであるという性質を示す。
ソースコード
実行結果
Fig.1 パラメータの分布をヒストグラムで可視化
Fig.2 Rigde 回帰のパラメータの分布
Fig.3 Lasso 回帰のパラメータの分布
相関関係と多重共線性問題
過学習が起こる原因の一つとして、入力変数同士の相関が強いものが含まれていると発生する多重共線性 (Multicollinearity) という問題がある。
一般的に機械学習アルゴリズムは、学習時に相関の高い入力変数を使用することにより、モデルの予測精度向上の妨げとなる場合がある。その対策として、単純にデータセットの中から相関の高い入力変数のどちらかを削除する方法や、使用するアルゴリズムを変更する方法がある。
.corr() を使用して相関関係を表す数値(相関係数)を確認する。
相関係数はヒートマップで可視化する。ヒートマップは、seaborn.heatmap() メソッドを使用する。
2 つの変数の関係を可視化するには sns.jointplot() を使用する。
Partial Least Squares (PLS) は、多重共線性の問題の対処法として有力なアルゴリズムである。
- 入力値と目標値の共分散が最大になるように主成分を抽出
- 抽出された主成分に対して重回帰分析を用いてモデルの学習を行う
主成分分析は、100 個の特徴量があった場合にその特徴量の数を分散を用いて 10 や 20 個などに削減する手法(次元削減)である。
PLS との違いは教師あり学習と教師なし学習で、主成分を抽出するときに目標値の情報を使うか使わないかの違いがある。
scikit-learn に用意されているモジュール PLSRegression を使用すると、これらのステップを意識せずに実装できる。
ソースコード
実行結果
機械学習 実践(教師あり学習:分類)
分類
分類はカテゴリが異なる複数のデータを見分けることができる境界線を求めることが目的。
二次元平面上にあるデータ(集合)を一本の直線で分けられることを線形分離可能といい、そのアルゴリズムを線形分類器と呼ぶ。
線形分類器として有名なものは、
- 単純パーセプトロン
- 線形サポートベクトルマシン
- ロジスティック回帰
等。
線形分離可能ではない場合に、線形ではない形で分類するアルゴリズムを非線形分類器と呼ぶ。
非線形分類器として有名なものは、
- k-近傍法
- 決定木(分類木)
- ランダムフォレスト
- 非線形サポートベクトルマシン
- ニューラルネットワーク
等。
決定木の実装で分類の全体像を理解
scikit-learn は問題設定が回帰、分類問わず、
- モデルの定義
- 学習
- 検証
の 3 ステップで進める。
分類では、回帰の時に使用した指標である決定係数ではなく、決定木の score() メソッドで表示される正解率 (Accuracy) を用いる。
正解率の最小値は
0 となり、最大値は 1 となる。
目的関数は、回帰では平均二乗誤差が用いられていたが、分類では交差エントロピーが主に用いる。
ただし、どちらの目的関数も正解と予測の差を評価したいという考えは同じ。
分類の問題設定でも、scikit-learn を用いての実装は回帰の場合と大きな違いはなく、推論も同様に predict() メソッドで実行することが可能。
決定木の特徴
決定木は複数の分岐を繰り返すことによって分類を行う。
特徴は次の 2 つ。
- 解釈が容易。必要な前処理が少ない。
- 過学習になる場合が多く、汎用性の低いモデルになる傾向がある。
ハイパーパラメータは次の 2 つ。
- max_depth(木構造の深さの上限)は、過学習を抑えるためのハイパーパラメータ。上限が低いとモデルの表現力は低下し、過学習を抑える。
- min_samples_split(木構造の分岐先の値)は、分岐先のノード数の最低値を設定するハイパーパラメータ。過学習に陥る可能性が上がるので調整が必要。
決定木単体では高い性能を出せない複雑な問題設定に対してはアンサンブル学習が用いられる。
アンサンブル学習は、決定木を基本として、学習器を複数用意して一つのモデルにしようというアルゴリズムである。
アンサンブル学習には、
- ランダムフォレスト
- XGBoost
- LightGBM
等がある。
サポートベクトルマシン (SVM)
サポートベクトルマシンは、2 つのカテゴリを識別する分類器。
サポートベクトルマシンでは、境界線に最も近いサンプルとの距離(マージン)が最大となるように境界線が定義される。
サポートベクトルマシンにカーネル関数を取り入れた一連の手法をカーネルトリックと呼ぶ。
カーネル関数により、高次元(無限次元)の特徴空間へ写像し、特徴空間上で線形分離を行う。
特徴は次の 2 つ。
- 未知のデータへの識別性能が比較的強い。ハイパーパラメータの数が少ない。
- 学習する際に必ずデータの標準化(もしくは正規化)を行う必要がある。
ハイパーパラメータは次の 2 つ。
- C(コストパラメータ)は、誤った予測に対するペナルティ。大き過ぎると過学習を起こす。
- gamma(ガンマ)は、モデルの複雑さを決定する。値が大きくなるほどモデルが複雑になり過学習を起こす。
サポートベクトルマシンは一般的にデータに対して標準化を適用する必要がある。
標準化 (Standardization)
は平均と標準偏差を算出して行なう。
標準化を行うには、sklearn.preprocessiong 以下の StandardScaler を用いる。
算出した平均と標準偏差から実際にデータセットの値を変換するには transform() メソッドを使用する。
ロジスティック回帰
ロジスティック回帰 (Logistic regression) は、あるデータがカテゴリに属する確率を予測するための回帰のアルゴリズムに該当するが、確率を予測することが可能な特性から分類の問題設定で用いられることが多い。
ロジスティック回帰は入力変数から目的変数に対して二値分類をおこなうモデル。
特徴は次の 2 つ。
- 説明能力が高い。入力変数の重要度、オッズ比がわかる。
- 線形分類器のため、複雑な問題設定に対応できない場合がある。
ハイパーパラメータは次の 2 つ。
- C(コストパラメータ)は。誤った予測に対するペナルティ。大きすぎると過学習を起こす。
- penaltyは、正則化を行う方法を決定する。L1L1、L2L2 のノルムから選択する。
ロジスティック回帰ではオッズ比を用いて、目的変数に対する各入力変数の影響の大きさを確認する。
オッズ比とは、ある事象の 1 つの群と 1
つの群におけるオッズの比として定義される。
オッズ比が 1 になると事象の起こりやすさが同じであることを表し、1 よりも大きい(小さい)とオッズ A がオッズ B よりも起こりやすい(起こりにくい)ということになる。
分類のアルゴリズムには確率を予測できるものと確率を予測できないものに分けることができる。
特に、分類器では前者を識別モデル、後者を識別関数と呼ぶ。
ロジスティック回帰は識別モデルに該当し、predict() メソッドで推論を行い分類結果を取得でき、predict_proba() メソッドで確率を取得することができる。
scikit-learn を用いて推論を行う際の入力変数は行列である必要がある。
分類の評価方法
分類において、学習済みモデルを評価する指標
- Accuracy(正解率)は分類の精度を確認するための指標
- Precision(適合率)は誤りを少なくしたい場合の指標
- Recall(再現率)は正例の見逃しを避けたい場合の指標
- F1score(F 値)はPrecision と Recall の両者のバランスを取るために調和平均で計算される指標
Precision と Recall は互いにトレードオフの関係にあり、どちらかの値を上げようとすると、もう一方の値が下がることになる。
混同行列 (Confusion Matrix) は実測値と予測値の関係性を示す表。
- TP (True Positive、真陽性):予測値を正例として、その予測が正しい場合の数
- FP (False Positive、偽陽性):予測値を正例として、その予測が誤りの場合の数
- TN (True Negative、真陰性):予測値を負例として、その予測が正しい場合の数
- FN (False Negative、偽陰性):予測値を負例として、その予測が誤りの場合の数
ソースコード
実行結果
Fig.6 入力変数の影響度
Fig.7 特徴量の重み
Fig.8 オッズ比
Fig.9 目的変数のデータ個数
Fig.10 混同行列
Fig.11 評価指標