機械学習の定義
プログラムはタスクT(アプリケーションにさせたいこと)を性能指標Pで測定し、
その性能は経験E(データ)により改善される場合タスクT及び性能指標Pに関して経験E
から学習するといわれている。(トム・ミッチェル 1997)
回帰問題:ある入力から出力を予測する問題
・直線で予測→線形回帰
・曲線で予測→非線形回帰 という。
線形回帰モデル
入力とm次元パラメータの線形結合を出力するモデル。
線形結合は、パラメータベクトルと説明変数の内積で求めることが可能。結合した値は1次元の数になる。
線形結合で求めた予測値(目的変数)は「ハット」^を文字の上に書いて区別する。
パラメータは最小二乗法で推定する。
データの分割
データは学習用データと検証データに分割する。
・学習用データ:機械学習モデルの学習に利用するデータ
・検証用データ:学習済モデルの精度を検証するためのデータ
得たいデータは、未知のデータに対してどれだけ精度良い予測をできるかどうか。
そのため、学習用データでモデルを学習させ、検証用データ(未知のデータ)で精度を測る。
パラメータの判定法
線形回帰モデルは最小二乗法を用いて学習データの精度を確認する。
・最小二乗法:平均二乗誤差が0になるパラメータを算出する方法。
平均二乗誤差を偏微分した値が0になるように計算していく。
ハンズオン
非線形回帰モデル
線形で表すことが難しい(複雑な)構造では、非線形回帰モデルと捉えてパラメータ推定を進めていく。
回帰関数:基底展開法
既知の非線形関数とパラメータベクトルの線形結合を使用する。
基底関数:多項式関数、ガウス型関数、スプライン関数/Bスプライン関数がある。
未学習と過学習
・未学習:学習データに対して、十分小さな誤差が得られないモデルのこと。
・過学習:学習データに対して、十分小さな誤差が得られたが、テスト用データに対して小さな誤差が得られないモデルのこと。
二つの対策として、主に下記の3つが挙げられる。
1.学習データ数を増やす。
2.不要な基底関数を削除する。
3.正則化法を用いる。
正則化法
過学習に至らないように正則項(罰則項)を課す。形状によっていくつかの種類がある。
リッジ推定:L1ノルムを利用。パラメータを0に近づけるように推定(円形のイメージ)。縮小推定
ラッソ推定:L2ノルムを利用。いくつかのパラメータを完全に0になるように推定(ダイアモンド形のイメージ)。スパース推定
過学習や未学習にならないように適切なモデルは交差検証法で決定する。
・ホールドアウト法:有限データを学習用と検証用の2つに分ける。
デメリット
・データを分けるので十分なデータ数でないと精度良い結果が得られない。
・分け方の偏りが発生した場合、精度良い結果が得られない。
上記のデメリットを解消する方法として交差検証法(クロスバリデーション)を用いる。
交差検証法
イテレータに分割しそれぞれで検証を行い、cv値が最も小さい結果を選択する。
ただし、各イテレータでの学習・検証データは重複しないようにすること。
ロジスティック回帰モデル
分類問題を解くための教師あり機械学習モデル。名前は回帰だが分類問題を解くタスクに注意。
分類問題:ある入力からクラスに分類(分ける)問題。
入力データとパラメータベクトルを線形結合し、それをシグモイド関数に入力する。
シグモイド関数に入力することで出力値範囲が0~1になり確率の値に変形できる。
シグモイド関数で0~1の値が0.5未満なら0、以上なら1と分類推定する。
使用する確率分布はベルヌーイ分布
ベルヌーイ分布:確率pが1、確率1-pが0をとる、離散型確率分布である。
パラメータpが既知である場合、その値によって生成されるデータは異なる。
あるデータからそのデータを形成するにあたり尤もらしいパラメータp(分布)を推定することを
最尤推定という。
最尤推定
最尤推定を行うことは尤度関数を最大化させるパラメータを選ぶこと。
尤度関数を求めるための条件として同時確率でなければならない。
勾配降下法
反復学習をさせることでパラメータを逐次的に更新していく方法
パラメータ更新が終了すると勾配が0(誤差最小)となり、反復学習範囲で最も最適な解となる。
勾配降下法はパラメータを更新するのにN個全データに対する和を求める必要がある。
これは、N個が大きくなるほどメモリ量が増え、計算時間が増加してしまう。
その問題を解決する方法として確率的勾配降下法がある。
確率的勾配降下法
データをランダムに1つ選択しパラメータを更新する。それをN回繰り返す。
勾配降下法でパラメータを1回更新する(データの和求める)ことと同じ計算量でN回パラメータを更新
することができるため、効率的に解の推測が可能。
モデルの評価
上記でパラメータを推定できたので、そのモデルを評価する指標
・正解率:正解数/全データ数で表す。よく使用されるが、データに偏りがあると正しく良いわけではない。
・再現率:誤りが多少多くても抜け漏れを少なくしたいときに使用する。例:病気の検診
・適合率:見逃しが多少多くても正確な予測をしたいときに使用する。例:迷惑メールの判別
・F値:再現率と適合率はトレードオフの関係にあるため、再現率と適合率の平均。高いほど
再現率と適合率が高いと評価できる。
ハンズオン(タイタニックデータ)
モジュールのインポート及びデータファイルの読み込み。
csvファイルはpandasのread_csvで読み込みが可能。
読み込んだデータから予測に不要なデータを削除するには、df.dropを用いる。
今回の予測では、年齢及び運賃から生存者を分類するので乗客IDなど削除する。
選択したデータ内に欠損の有無があるか確認する。
ハンズオンでは年齢に欠損が見られた。欠損を補う方法は多々あるが今回は
年齢値の中央値で補う。
新しくAgeFillというカラムを作成し年齢値の中央値を入力している。
チケット運賃から生死判別を行う。
ロジスティック回帰はLogisticRegressionを用いる。
preadictで生存しているかどうかの判別が可能。
preadict_probaで生存確率とそうでない確率(死亡確率)を確認できる。
上記では、運賃62ドルでは生存確率0.499(49.9%)、死亡確率0.500(50.0%)と分析できる。
次に、年齢による分類を行う。
当時の状況を踏まえ、レディファースト文化や貴族が優先的に救助されるであろう仮説を立て
性別を01に分類するgenderを作成し、それとpclassを足した特徴量を作成。
女性かつ社会階級が高いと値は小さくなるような特徴量。
作成した、特徴量pclass_genderを縦軸、年齢AgeFill(上記で補った特徴量)を横軸にして図示した。
図より、女性かつ社会階級が高い(pclass_gender=0)はほぼ生存していて、男性かつ社会階級が低い
(pclass_gender=4)は多く亡くなっていることがわかる。また、年齢が若いほど生存していて、高齢者
は亡くなっていることもわかる。
上記のように特徴量を作成することで分類の決定境界が決定しやすくなる。
主成分分析
次元削減で、多変量データを小数量データに圧縮する。
データを圧縮することで、データを要約している。
要約ができることでデータの特徴を把握でき分類に応用ができる。
乳がん患者データからロジスティック回帰を行うと97%の精度で判別できることがわかる。
ただ32次元データでの予測のため可視化はできない。
そこで主成分分析で次元削除を実施する。
barで各次元の主成分の割合を表示している。上記の棒グラフでは第1,2成分で約60%のデータ量であることがわかる。
2次元まで圧縮し図示するとそのままロジスティック回帰を行ったとき(97%)より決定境界がやや曖昧になっているが可視化
かつ判別できていることがわかる。
k近傍法
最近傍のデータをk個取り、そのデータが最も所属しているクラスに分類する方法。
→k個数が変化すると結果も変わる。kが大きいと決定境界は滑らかになっていく。
k-平均法
与えられたデータをk個のクラスタに分類する。
→k個数が変化すると結果も変わる。最初のk個の初期値が離散しているとうまくクラスタリング可能だが
初期値が近傍であるとうまくクラスタリングできない。k-means++など初期値をきめる方法がある。
サポートベクタマシン
2クラス分類のための機械学習方法。線形モデルの正負によって2値分類する。
決定境界である線形判別関数と最も近いデータ点との距離をマージンといい、マージンが最大となる線形判別関数を
求める。
ソフトマージンサポートベクタマシン
サンプルデータが線形分類できない場合、誤差に対してペナルティを与える。
カーネルトリック
高次元ベクトルの内積をスカラー関数で表現することて高次元でも計算量をおさえることができる。