【ラビットチャレンジ】機械学習:その3 ロジスティック回帰モデル
ロジスティック回帰
分類問題(ウラス分類)
- 入力
- m次元のベクトル
- 出力
- 0 or 1
シグモイド関数
- 入力ドメインは実数空間
- 出力は必ず 0 〜 1の値になる
- パラメータが変わるとシグモイド関数の形が変わる
- シグモイド関数の微分は、シグモイド関数自身で表現することが可能
- MSEの尤度関数で利用する場合など、最小値を求めるときに有利
ロジスティック回帰モデル
- 分類問題を解くため教師あり機械学習モデル (教師データから学習 )
- 入力とm次元パラメータ線形結合をシグモイド関数に入力
- 出力y=1になる確率値になる
- データYは確率が0.5以上なら1・未満なら0と予測
尤度関数
- 尤度とは、あるデータを得たときに分布のパラメータが特定の値であることがどれほどありえそうかを表現したもの
- 確率はパラメータを固定してデータが変化
- 尤度はデータを固定してパラメータが変化
- ベルヌーイ分布に従う
- モデルの出力Yが1となる確率とYが0になる確率を以下で表記
- P(Y = 1 | x) = p
- P(Y = 0 | x) = 1 - P(Y = 1 | x) = 1 - p
- 確率変数Yはベルヌーイ施行に従う
同時確率
- 学習データ・セットが同時に得られる確率を計算
- 観測されたデータ(学習データ)を発生させる尤もらしい確率分布を求める
- 尤度関数を最大にするパラメータを推定パラメータとする
対数尤度関数の最大化
- 尤度関数を最大化するよりも、対数尤度関数を最大化する方が楽
- 咳が和、指数が積の演算に変換出来る
- 対数尤度関数が最大になる点と尤度関数が最大になる点は同じ
- 平均二乗誤差は最小化、尤度関数は最大化はややこしいので、対数尤度関数にマイナスを掛けて「最小化」で統一
勾配降下法
- Gradient descent
- 反復学習によりパラメータを逐次的に更新するアプローチの一つ
ηは学習率と呼ばれるハイパーパラメータでモデルの収束しやすさを調整
パラメータが更新されなくなった場合、それ勾配が0になったということ。少なくと も反復学習で探索した範囲では最適な解がもとめられたことになる
- 勾配降下法では、パラメータを更新するにN個全てデータに対する和を求める 必要がある。
※ 確率的勾配降下法(SDG)はDeep Learningで利用することが多いので、そちらでも学習してみてね
動画による説明(SDG)
- Deep Learningでのサンプルを想定
- 尤度が高いところへ収束していっている
- サンプルでは山が2つ
- 学習率が大きくなると、動画での尤度探索の移動量が増えるイメージ
- 最初は大きくても良いが、最尤近くになったら小さくしたい
※ ガウス型基底の話は試験に出てくる? → 優先度は高くないが、現場では一般的に出てくる ただし、理解するにはかなり複雜そう
モデルの評価
混同行列
- True Positive
- False Positive
- False Negative
- True Negative
- True/False 予測の成否
- Positive/Negative 予測の結果
正解率
- (TP + TN) / (TP + FN + FP + TN)
- 正解した数と予測した全データ数の割合
- データに偏りがあった場合に問題になることがある
- 単純な正解率はあまり意味をなさない
適合率
- TP / (TP + FP)
- 誤りが覆うてもヌケモレを少なくしたい
- メールのスパム判定の例としては、スパムがすり抜けて届く方がベター
再現率
- TP / (TP + FN)
- 見逃しが多くても、正確な予想をしたい
- 病気の陽性判定の例、再度検査をすればよいため
F値
- 適合率と再現率はトレードオフの関係にあるため、2つの調和平均を取る
- バランスを取りたい場合に利用
ハンズオン(タイタニック号データ)
欠損値があるデータ
- 無視する
- 欠損値が無い情報で補完する
- 回帰を使って補完する
処理の進め方
- 2変量に絞る
- Ageが欠損しているので、AgeFillカラムを追加
- Ageカラムのnullを中央値で補完
- 元のAgeカラムは残しておく
※ Pythonの実行でエラーが出ても結果は出ているみたい(LogisticRegression().fit)
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
ハンズオン2 (2変数から生死を判別)
※ pythonのオープンソースを使うとかなり簡単に実現出来る。難しい微分とかは出てこない バックエンドはパッと書いてしまって、フロントにこだわるのもあり。REST APIとか
※ 図示化して表示してあげると色々な人を説得しやすい
ハンズオン3(混同行列とクロスバリデーション)
※ ヒートマップも上司に喜ばれるかも
※ きれいな図を書くなら、Seabornがおすすめ matplotlibのラッパー。もう少しきれいに書ける
スクリーンショット
【ラビットチャレンジ】機械学習:その2 非線形回帰モデル
非線形回帰モデル
正則化
過学習と未学習 学習データに対して、十分小さな誤差が得られない:未学習 小さな誤差は得られたけど、テスト集合誤差との差が大きい場合:過学習
汎化性能(Generalization)
- 学習に使用した入力だけでなく、これまで見たことのない新たな入力に対する予測性能
正則化法
Ridgeはなるべく原点に近づけるように推定しようとする → 縮小推定 Lassoはパラメータが0になりやすい、予測に関係しないパラメータを無視できる → スパース推定
※ 成約の幾何学図が何を意味しているのか? → 複雜なモデルでは、バリアンスが高い状態になってしまう → 縮小推定をするとバリアンスを下げる
※ 線形回帰についても過学習が発生する可能性はある → パラメータが複数ある場合にモデル選択に失敗する可能性がある
モデル選択
ホールドアウト法
- 手元のデータを2つに分割して学習用とテスト用に使い予測精度や誤り率を推定するために使用する方法
- 有限のデータだと分割データ数が足りない
- データが大量にないと厳しい
クロスバリデーション(交差検証)
- データを学習用とテスト用に分割するセットを複数回繰り返す
- 少ないデータでも精度を上げることが可能
※ ML08での正則化の質問は何回か見て理解したいかもしれない
【ラビットチャレンジ】機械学習:その1 線形回帰モデル
機械学習モデリングプロセス
線形回帰とロジスティック回帰でモデリングプロセスを体験
※感想 機械学習をあえて使う必要が無いというのは大事 運用者への配慮はコモディティ化が進むとあるような、もっとハードルが下がるような… どっちだろう
※SVMについて 資料にはあるので、そちらで学習ヨロ
環境について
- Anacondaがあれば大丈夫
ルールベースモデルと機械学習モデル
回帰問題
- ある入力(数値)から出力(連続値)を予想する問題
- 回帰で扱うデータ
- 入力はm次元のベクトル(m=1の場合はスカラ)
線形回帰モデル
- 教師あり学習(正解付きデータから学習)
- ある条件から、物件の価格を出すなどに使える
- 部屋数、築年数、駅からの距離など
線形結合
- 入力ベクトルと道野パラメータの各要素を掛け算し足し合わせたもの
- 入力ベクトルとの線形結合に加え、切片も足し合わせる
- 出力は1次元
- パラメータ
- 特徴量が予測値に対してどのように影響を与えるかを選定する重みの就業
- 未知パラメータは最小二乗法により推定
※ハットについて(データYの上についていたもの)。予測値を表す場合には統計のせかいなどで「ハット」を使う
線形単(m=1)回帰モデル
データは回帰直線に誤差が加わり観測されていると過程
※εは正規分布と考えてよいか? → 最小二乗法の場合は考えなくて良い 最尤法の場合は正規分布で考えた方が詳細な分析が出来る。後で最尤法は出てくる
データ分割
- データがn個ある場合に、全部を学習に使うことはしない
- 学習用と評価用に分ける(80%が学習、20%を評価みたいなイメージ)
- 学習 = train, 評価 = test
パラメータの推定
※線形回帰はデータからパラメータを数学で推定出来るのが良いところ
ハンズオン(線形回帰モデル)
ボストンの住宅価格の予測
- Scikit-learnを利用
- Pandas
- Numpy
jupiter notebookを使ってやる 1変量の単回帰から 2変量の重回帰もやる
model.coef : 回帰係数 model.intercept:切片
※ 犯罪率が上がると家賃が下がりがちなので… みたいな説明を数学的に出来る
スクリーンショット
【ラビットチャレンジ】応用数学:第2章 確率・統計
頻度確率(客観確率)
発生する頻度。10本のくじをひいて当たりが出る確率など
ベイズ確率(主観確率)
信念の度合い。例:医者の診断。インフルエンザっぽさ40%とか
条件付き確率
ある事象X=xが与えられた下で、Y=yとなる確率
独立な事象の同時確率
P(X=x, Y=y) = P(X=x)P(Y=y) = P(Y=y, X=x)
ベイズ則
ある複数の事象について、条件付き確率なのか独立な事象の同時確率なのかを組み合わせて計算する法則
例
ある街の子どもたちは毎日1/4の確率で飴玉をもらうことができ、飴玉をもらうと1/2で笑顔になるという。 また、1/3は笑顔な子どもたちであるという。 笑顔な子供が、飴玉をもらっている確率は?
確率変数と確率分布
- 確率変数
- 事象と結び付けられた数値
- 確率分布
- 事象の発生する確率の分布
- 期待値
- その分布における、確率変数の平均の値 or 「ありえそう」な値
分散と共分散
- 分散
- データの散らばり具合
- 期待値からそれぞれどれくらいずれているかを求めて平均を取ったもの
- 共分散
- 2つのデータ系列の傾向の違い
確率分布
補習
平均の線形性
分散
共分散
【ラビットチャレンジ】応用数学: 第1章 線形代数
基礎
スカラー
普通の数、ベクトル係数ベクトル
大きさと「向き」を持つ行列
ベクトルの「変換」
行列の積
横と縦の要素をかけて足し合わすイメージ
固有値、固有ベクトル
※重要
ある行列Aに対して、特殊なベクトルXと、右辺の係数λがある
AX = λX
行列Aと特殊なベクトルXの積は、ただのスカラーの数λと特殊なベクトルXとの積と同じ値になる
この特殊なベクトルXとその係数λを、行列Aに対する
X = 固有ベクトル
λ = 固有値
求めかた
以下の2×2の行列に対して固有ベクトルを求める
1, 4 2, 3
2次方程式に展開してλを求める。λが求まったのち、固有ベクトルを算出する
単位行列と逆行列
単位行列・・・n×nの正方行列において、左上から右下にかかる斜めの箇所のみ1でそれ以外は0の行列I。n×nの任意の行列Aと積をとってもXになるようなもの(AX = X)
逆行列・・・任意の行列Aと掛け合わせたら単位行列になるような行列
行列式
大きな正方行列を小さく分解可能
固有値分解
固有値を「対角線上に並べた行列と、それに対応する固有ベクトルを並べた行列を用意したとき変形を実施すると、3つの行列の積に変換することが可能である。
これが固有値分解
※ うまみ:特定成分を無視したり、着目したりしやすくなる
特異値分解
正方行列以外では固有値分解は出来ないのか? → 似たようなことが出来る(特異値分解)
求め方としては、ある行列Mに対して転置行列を掛け合わし、正方行列を2つ作成する。(M×M転とM転×M)
作成した正方行列を固有値分解して左特異ベクトルと特異値の2乗が求められる
補習
逆行列の簡単な求め方
ラビットチャレンジ挑戦中
ラビットチャレンジというものに挑戦している
JDLAのE資格を受けるためにクリアしておく認定講座なのだが、破格で受講出来るが、自習ベースで期限までにレポートなどの課題が出来てないと即終了するというもの
なかなか自分を追い込んでいるが、8月のE資格試験に向けて精進していきたい