前回のパーセプトロンに引き続きこの勉強会用に仕事ではじめる機械学習を元に機械学習におけるアルゴリズムをまとめる。
AIPy (アイパイ) ハンズオン #3 (2018/07/19 19:30〜)
この勉強会について しばらくは機械学習に特化した勉強会になります。仕事で機械学習などを活用したいけど何からはじめればよいか分からないような方向けのハンズオン形式の勉強会です。ハ ンズオン形式といいつつまず初めは力を養う為に 仕事ではじめる機械学習 の輪読会からはじめます。この会はみんなで集まって意見を交換したり協力したりしながら一気 ...
※不適切な内容である場合はすぐに取り下げます。
そもそもどのアルゴリズムを選ぶべきか
機械学習にはどんな種類があるか- 分類(Classification):正解となる離散的なカテゴリ(クラス)と入力データの組み合わせで学習し、未知のデータからクラスを予測する
- 回帰:正解となる数値と入力データの組み合わせで学習し、未知のデータから連続値を予測する
- クラスタリング:データを何かしらの基準でグルーピングする
- 次元削減:高次元のデータを可視化や計算量削減などのために低次元マッピングする
- その他
アルゴリズムを選定する、scikit-learnのフローチャート ※その他(推薦、異常検知、頻出パターンマイニング、強化学習)は覗く 参考:scikit-learn algorithm cheat-sheet
分類
- 教師あり学習の1つ
- 予測対象はカテゴリなどの離散的な値を予測する
- メールがスパムかどうかや画像が映っているのがどういった物体かなど
- クラスの数が2の場合を二値分類、3以上の場合を多値分類という
- パーセプトロン
- ロジスティック回帰
- SVM (サポートベクターマシン)
- ニューラルネットワーク
- k-NN (k近傍方、k-Nearest Neighbor Method)
- 決定木、ランダムフォレスト、GBDT (Gradient Boosted Decision Tree)
- ナイーブベイズ
- HMM (Hidden Markov Model)
ロジスティック回帰
ロジスティック回帰の特徴
- 出力とは別に、その出力のクラスに所属する確率値が出せる
- 学習はオンライン学習でもバッチ学習でも可能
- 予測性能はまずまず、学習速度は早い
- 過学習を防ぐ為の
正則化
項が加わっている
実践系の参考記事
ロジスティック回帰の決定境界
- 決定境界は直線
ロジスティック回帰の仕組み
活性化関数
はシグモイド関数
損失関数
は交差エントロピー誤差関数
シグモイド関数
- 入力が0の時は0.5をとる
- 値が小さくなるほど0に近づく
- 値が大きくなる程に1に近づく
シグモイド関数を記述するコード
def sigmoid(x):
return 1 / (1 + np.exp(-x))
出力yは y= sigmoid(np.dot(w, x))
と表すことが可能で、2値分類時の交差エントロピー誤差関数
は、N個のデータに対してyを出力、tを正解ラベル(正しい場合は1、間違っている場合は0とする)、logを底がeの自然対数とすると、次のような書式で表すことができる。
2値分類の時の交差エントロピー誤差関数をコードで書くと以下のようになる
def cross_entropy_error(y, t, eps = 1e-15):
y_clipped = np.clip(y, eps, 1 - eps)
return -1 * (sum(t * np.log(y_clipped) + (1- t) * np.log(1 - y_clipped)))
正則化
学習時にペナルティを与えることで境界をなめらかにする(過学習を防ぐ)SVM (Support Vector Machine)
SVMの特徴
マージン最大化
をすることで、なめらかな超平面を学習できるカーネル
と呼ばれる方法を使い、非線形なデータを分離できる- 線形カーネルなら次元数の多い疎なデータも学習可能
- バッチ学習でもオンライン学習でも可能
SVMの決定境界
SVMの仕組み
SVMの2つの大きな特徴
マージン最大化
マージンを最大化することで、正則化項と同じように過学習を抑えることができる。マージンの最大化とはマージンが最大になるような超平面の引き方を決めることで既知のデータに対してあそびがうまれる。すなわち、過学習を抑えることができる。カーネル
線形分離不可能なデータでも、カーネルと呼ばれる関数を使って特徴量を擬似的に追加してデータをより高次元のベクトルにすることで、線形分離可能にする方法 カーネルを使った決定境界の例ニューラルネットワーク
多層パーセプトロンとお呼ばれ、パーセプトロンを1つのノードとして階層上に重ねたもののことニューラルネットワークの特徴
ニューラルネットワークの決定境界
- 直線でない決定境界も取ることが可能
ニューラルネットワークの仕組み
- softmax関数
- 活性化関数
- 近年ではReLU(Rectified Linear Unit)がよく使われている
k-NN
未知の1個のデータが入力された時、そのデータのクラスを近くのk個の既知データの所属するクラスの多数決で決めるという、最近傍探索アルゴリズムの1つk-NNの特徴
- データを1つずつ逐次学習する
- 基本的に全データとの距離計算をする必要があるため、予測計算に時間がかかる
- kの数によるがそこそこの予測性能
k-NNの決定境界
- 直線でない決定境界も取ることが可能
k-NNの仕組み
多く用いられるのは2つの点を結んだ直線の長さであるユークリッド距離
だが、あるクラスのデータ郡の平均からの近さでなく、データの散らばる方向をこうりょすることができるマハラノビス距離
と呼ばれる距離が用いられることもある
マハラノビス距離
def euclidean_distance(a, b):
return np.sqrt(sum(x - y)**2 for (x, y) in zip(a, b))
決定木、ランダムフォレスト、GBDT
ツリー型アルゴリズムの代表である決定木の特徴
- 学習したモデルを人間が見て解釈しやすい
- 入力データの正則化がいらない
- カテゴリ変数やその欠損値(計測漏れなどで値が存在しない)などを入力しても内部で処理してくれる
- 特定の条件下では過学習しやすい傾向にある
- 非線形分離可能だが、線形分離可能な問題は不得意
- クラスごとのデータ数に偏りのあるデータは不得意
- データの小さな変化に対して結果が大きく変わりやすい
- 予測性能はまずまず
- バッチ学習でしか学習できない
決定木の決定境界
決定境界は直線にはならない決定木の仕組み
教師データから条件式を作り、予測の際には木の根から順番に条件分岐をたどっていき、葉に到達すると予測結果を返すアルゴリズム。不純度
と呼ばれる基準を使って、できるかぎり同じクラスがまとまるように条件分岐を学習していく。具体的には情報ゲイン
やジニ係数
などの基準を不純度として使い、不純度がさがるようにデータを分割する
線形回帰
教師あり学習の1つで、ある入力データから連続値を予測する。回帰について各アルゴリズムのおおよその傾向
それぞれの概要
- 線形回帰はデータを直線で、多項式回帰は曲線で近似したもの
- Ridge回帰は学習した重みの2乗を正則化項に、Lasso回帰は学習した重みの絶対値を正則化項に、Elastic Netはその両方を線形回帰に正則化項を追加したもの
- Lasso回帰やElastic Netは、L1正則化によりいくつかの重みが0になり、特徴を絞り込む性質がある
- 回帰木は決定木ベースの回帰で、非線形なデータに対してフィッティングできる
- SVRはSVMベースの回帰で、非線形なデータに対してもフィッティングできる