Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Linear Algebra behind Statistical Modeling
Search
Akira Takezawa
December 10, 2020
Programming
0
510
Linear Algebra behind Statistical Modeling
2020/12/11(金)に開催された、LIFULL数学部での発表資料です
Akira Takezawa
December 10, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
コードレビューと私の過去と未来
jxmtst
0
150
PHPを書く理由、PHPを書いていて良い理由 / Reasons to write PHP and why it is good to write PHP
seike460
PRO
5
270
モジュラモノリス、その前に / Modular monolith, before that
euglena1215
3
390
RemixとCloudflare Stack におけるFile Upload
ossamoon
1
120
Iteratorでページネーションを実現する
sonatard
3
700
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
5
210
M5Stack に色々な M5ユニットをつないで扱う為の新たなアプローチ
gob
0
200
Kubernetes上でOracle_Databaseの運用を楽にするOraOperatorの紹介
nnaka2992
0
140
NANIMACHI
naokiito
0
930
ROS 2のZenoh対応とZenohのROS 2対応
takasehideki
2
240
RDBの世界をぬりかえていくモデルグラフDB〜truncus graphによるモデルファースト開発〜
jurabi
0
150
型付きで行うVSCode拡張機能開発 / VSCode Meetup #31
mazrean
0
210
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
48k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Automating Front-end Workflow
addyosmani
1365
200k
Making the Leap to Tech Lead
cromwellryan
130
8.8k
The Pragmatic Product Professional
lauravandoore
31
6.2k
Producing Creativity
orderedlist
PRO
341
39k
Debugging Ruby Performance
tmm1
73
12k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
From Idea to $5000 a Month in 5 Months
shpigford
380
46k
The Power of CSS Pseudo Elements
geoffreycrofte
71
5.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
1
230
Transcript
Linear Algebra behind Statistical Modeling Akira Takezawa @LIFULL Co., Ltd.
December 11th, 2020
本⽇のコンテンツ 1.線形回帰モデル︓共分散⾏列の逆⾏列で求める回帰係数 2.⼀般化線形回帰モデル︓⾮線形写像とロジスティック回帰 3.カーネル法︓グラム⾏列(特徴写像)と関数空間(特徴空間) 4.多重共線性︓⾏列のランク落ちとベクトルの1次独⽴・1次従属 5.主成分分析︓固有値・固有ベクトルとスペクトル分解
はじめに 本発表は個⼈の⾒解であり、所属する組織の公式⾒解ではありません。 また⼀部数学的に厳密ではない、あるいは誤った記載がある可能性があるの で、その際はご指摘いただけると幸いです。
線形回帰モデル︓統計学における「線形」には、空間と写像の2つの対象が存在する 多重線形回帰モデル = 「⼊⼒空間」が線形 + 「写像」が線形 なモデリング Euclidean Space Linear
Mapping 始集合/定義域(Domain) 終集合/値域(Range) ! " # 0 線形写像 (スカラー倍と和) = Χ + = ! " # ∞ Multiple Linear Regression -∞ ⼊⼒空間ℝ! 出⼒空間ℝ"
線形回帰モデル︓最⼩⼆乗法における回帰係数の推定は、⾏列計算のみで求めることができる Χ!Χ ⃗ = Χ!Y ⃗ = Χ!Χ "# Χ!Y
回帰係数ベクトルは、の分散共分散⾏列の逆⾏列とYの共分散ベクトルの内積で求められる ※説明変数の計画⾏列(データをそのまま並べた⾏列)とその転置⾏列の積と、分散共分散⾏列が同値になる 導出は、発⾒(理解)することができませんでした の共分散ベクトル の分散共分散⾏列の逆⾏列 予測誤差に対する最⼩⼆乗法から、最終的に以下の式が導出される ⃗ = Χ, Χ "# * Χ, 詳しくは、Qiitaに書きました↓ の分散共分散⾏列の逆⾏列 の計画⾏列 の列ベクトル
線形回帰モデル︓最⼩⼆乗法における回帰係数の推定は、⾏列計算で⾏うことができる Design Matrix 説明変数の計画⾏列から最⼩⼆乗法の⽅程式を導出して変形すると、先ほどの形になる Ordinal Least Square ②誤差の⽅程式に変形 ③⼆乗誤差(誤差同⼠の内積)を求める ④パラメータ
" で偏微分して0となるのが最⼩誤差 ①データの⾏列と列ベクトルで並べる ※ # 関する下に凸の2次関数のグラフ ⑤パラメータ " を左辺にとる正規⽅程式に変換する ↑ が、先ほどの分散共分散⾏列を使った " の導出と同値になるとのこと ⃗ = Χ, Χ '( ) Χ,
線形回帰モデル︓実際に⾏列計算で回帰係数を求めてみる ←Numpyによる⾏列を使って求めた回帰係数 ←Scikit-learnのLR関数で求めた回帰係数 ←⽬的変数に家賃、説明変数に敷地⾯積などを持つデータ Boston House Priceにおいて、共分散⾏列を使って回帰係数を求める
⼀般化線形回帰モデル︓⾮線形写像とロジスティック回帰(シグモイド関数の活⽤) ロジスティック回帰分析 = 「⼊⼒空間」が線形 + 「写像」が⾮線形 なモデリング ! " #
0 0 リンク関数 (シグモイド関数) 1 log( 1 − ) = Χ + 始集合/定義域(Domain) 終集合/値域(Range) Euclidean Space Non-Linear Mapping = ! !$%&'( + ロジット関数 ⼊⼒空間ℝ! 出⼒空間ℝ"
⼀般化線形回帰モデル︓オッズ(確率)からシグモイド関数の導出する ():= 1 1+(−) (−∞<<∞) L():=log( & !'& ) (0<<1)
• ロジット︓オッズを(⾃然)対数変換したもの(対数オッズ) Odds (p):= 1 − • オッズ︓事象Aの⽣起率のは確率とオッズの2通りの⽅法がある • 定義域︓Odds(p)は正の実数の範囲(0<Odds(p)<∞)を取りうる • シグモイド関数︓ロジットの逆関数(y=x に関して対称なグラフを逆関数と呼ぶ) • 定義域︓シグモイド関数は実数全体 [∞,∞]を確率の定義域 [0,1]へ変換する • ソフトマックス関数︓2クラス以上の分類に使われる写像 オッズ 対数オッズ シグモイド関数
ロジスティック回帰モデル︓スカラー場で定義した対数損失関数のパラメータを、勾配降下法で最適化する ←タイタニック号の⽣存(バイナリ)データ 勾配降下法で回帰係数を求める→
カーネル法︓カーネル関数を成分とする⾏列で、実ベクトル空間でない関数空間(特徴空間)へ写像する カーネル法 = 「⼊⼒空間」が線形 + 「写像」が⾮線形 + 「出⼒空間」が⾮線形* ! "
# 0 特徴写像 始集合/定義域(Domain) 終集合/値域(Range) ⾼次元特徴空間 (関数空間) 例: カーネルトリック (線形分離可能) Euclidean Space Non-Linear Mapping Functional Space データを⾼次元の複雑な空間において、単純な位置関係に並び変える (カーネル関数をij成分とするグラム⾏列) ϕ ! を陽に求めずに ", " を直接求める 関数を成分に持つ⾏列を写像として利⽤することで、 ⾮線形な回帰を実現することができる *関数を基底に持つ = ! , ! ⋯ ! , " ⋮ ⋱ ⋮ ! , # ⋯ # , " ! , ! = ϕ $ %ϕ & ! , ! = exp − $ − & 例えばガウスカーネルだと.. x# 実数空間ℝ! 関数空間ℍ! Kernel Method
多重共線性︓説明変数同⼠の相関が⾼いまたは完全相関であるとき、回帰係数が不安定になる現象 多重共線性とは、ランク落ち、つまり説明変数空間の基底ベクトルが互いに線型独⽴でないこと ! " # 0 ! " # 0
# = ! + " ある基底ベクトルが他の基底ベクトルの和とスカラー倍で表わせられる状態 モデリングする⼈の期待(仮定)︓モデルの説明変数同⼠は互いに線形独⽴である ⼊⼒空間ℝ! = = ⼊⼒空間ℝ! = = − 1 ▶計画⾏列Χがランク落ちの時、Χ/Χ(共分散⾏列)は⾏列式が0、つまり逆⾏列を持たないため、回帰係数を求めらない Multicollinearity 実際は… また、説明変数データのサンプルサイズが次元 よりも⼩さい場合も、分散共分散⾏列の逆⾏ 列は存在しないのでマルチコが起こる
多重共線性︓【おさらい】 ⾏列のランクは⾏列の基本変形によって求められる > rankA 【⾏列の基本変形の定義】ある⾏列について.. • ある⾏をk倍する(k≠0) • ある⾏のk倍を別の⾏に加える •
ある⾏と別の⾏を⼊れ替える = 1 2 2 1 1 1 0 2 2 = 1 2 2 0 −1 −1 0 2 2 = 1 2 2 0 −1 −1 0 0 0 rankA=2 dimA=3 • ランクの別の定義である「⾏列の基本変形によって作られた階段⾏列の主成分の数」 と上の「ランク=⼀次独⽴な列ベクトルの最⼤本数」という定義が対応する 階段⾏列を作ることによって、1次独⽴な基底(主成分)の数を求める ▶⾏列のランクの定義の1つ︓ランクとは⾏列Aにおいて、⼀次独⽴な列ベクトル(説明変数空間ℝ0の基底)の最⼤本数 1⾏⽬の–1倍を2⾏⽬に加える 2⾏⽬の2倍を3⾏⽬に加える ! " # 0 主成分を持つ列ベクトル=基底同⼠が⼀次独⽴ ⼀次従属 勉強会では、主成分が全て1、同列のその他の成分が全て0である簡約階段⾏列も扱った
多重共線性︓実際に計画⾏列がランク落ちの時、回帰係数が求まらないか確認する ! !, " ", ! " ! " =
!, ", ! " !" !" " " ! " = !, ", ! "" " − !" " = ! "" " 1 − " ∵ = (12 (1(2 ! "" " 1 − " = 0 説明変数の分散共分散⾏列 説明変数の分散共分散⾏列の⾏列式 ランク落ちの時、逆⾏列は持たないので⾏列式=0となる 相関係数 ▪2×2⾏列(説明変数が2つの線形回帰)での証明(回帰係数βはΧの分散共分散⾏列の逆⾏列を使って求める) ▶相関係数 = ±1 のとき、説明変数の共分散⾏列の逆⾏列が存在しないので、回帰係数が求まらない 参照︓https://mathwords.net/tajukyosensei 【完全相関でない場合】 また、相関係数 =±1ではなくても±1に近いとき、 ⾏列式の値の絶対値が0に近くなる この時、逆⾏列の各成分(の絶対値)が⾮常に⼤きくなっ てしまい、回帰係数の推定値 " が不安定になる つまり、 " の標準誤差が⼤きくなり、t値が⼩さくなる 分散共分散⾏列をσで表す
主成分分析︓多変量の⼊⼒データ空間に隠れた低次元空間の構造を発⾒する、次元削除*の⼿法 始集合/定義域(Domain) 終集合/値域(Range) ! " # 0 = !! +
"" + ## ! " # 0 = !! + "" ! " 座標変換と次元削除︓固有値・固有ベクトルを⽤いて基底を取り直し、かつ次元も下げる ▶スペクトル分解で求める︓説明変数Xの分散共分散⾏列を、固有値と固有ベクトルを成分に持つ⾏列に分解する 基底変換 (無相関化) ベクトルの集合が存在する部分空間を張る直交座標系⾒つける、 つまり新たに基底を取り直すことで、より低次元の空間でデータを取り扱う ⼊⼒空間ℝ! ⼊⼒空間#
主成分分析︓【おさらい】 固有値・固有ベクトルについて Α = 8 1 4 5 8 −
1 4 5 − = 0 8 − 5 − − 4 = 0 " −13 +36= 0 − 4 − 9 = 0 =4 , 9 ! =4 8 − 4 1 4 5 − 4 ! " = 0 0 4! + 1" = 0 ! = 1, " = −4 ⾏列Αの固有値・固有ベクトルを求める 各々の固有値に対応する固有ベクトル を求める は実数 1 −4 ! =4 固有値 のとき、固有ベクトルは " =9 1 1 ! " 0 ⃗ 固有ベクトル ⃗ 固有値 (による定数倍) 固有ベクトル ⃗ に対する、⾏列Αによる線形変換と固有値による定数倍が同値 Α ⃗ = ⃗ ⾏列Α(による線形変換) ※Ιは単位⾏列 【定義】 正⽅⾏列Α、ベクトル ⃗ 、スカラーの間に以下の関係が成り⽴つ時、 ⃗ をΑの固有ベクトル、 をΑの固有値と⾔う。 また上の式変形から、特性⽅程式(固有⽅程式)ができる。 Α ⃗ = ⃗ det Α − Ι = 0 Α − Ι ⃗ = 0より 【幾何的な解釈】 【例題】 det Α − Ι = 0より、固有値を求める 同様に ' のときの固有ベクトルを求めると… 固有値 のとき、固有ベクトルは
主成分分析︓スペクトル分解と⾏列の対⾓化 Σ = > ⋯ > , ? ⋮ ⋱
⋮ >, 0 ⋯ 0 Σ = > , … , @ > ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ @ > , … , @ / ▶主成分分析においては、説明変数の分散共分散⾏列を、 固有ベクトルと固有値λを対⾓成分に持つ対⾓⾏列にスペクトル分解する = $! $! = % = % = H &'! ( & & & % &) = & & & % ⾏列の成分$& 説明変数の分散共分散⾏列 固有値λを対⾓成分に持つ対⾓⾏列 $ $ %は、正規直交性を持ち、内積は0、ノルムは1 固有ベクトルを横に並べた⾏列 【スペクトル分解の定義】 実対称⾏列は、直⾏⾏列によって対⾓化可能(対⾓⾏列の⽣成ができる)という性質を使って、 実対称⾏列を、「固有ベクトルを横に並べた⾏列とその転置⾏列」と「固有値を対⾓成分に持つ対⾓⾏列」に分解すること Spectral Decomposition $! = 実対称⾏列は、直⾏⾏列によって対⾓化可能という性質 は対⾓成分以外の成分は0である対⾓⾏列 は直交⾏列なので逆⾏列と転置⾏列が同値 主成分分析では、共分散⾏列を固有値と固有ベクトルの⾏列に分解する これがスペクトル分解 import numpy as np cov_mat = np.cov(X) eigen_values , eigen_vectors = np.linalg.eigh(cov_mat) Pythonなどプログラミング⾔語を使う際は、固有値・固有ベクトルの計算は⼀⾏で求まる
主成分分析︓⾏列のトレースを使った寄与率の計算とデータの基底変換(と次元削除) = H &'! ( & 寄与率 = A /
【寄与率による固有値・固有ベクトルの選定】 元のデータの情報量を◦%以上保持するために累積寄与率に閾値を設け、固有値(主成分)を⼤きい順から個選ぶ。 選択した固有値に対応する固有ベクトルを横に並べた⾏列Bを、元の計画⾏列Xに左から掛けた積を取る。 すると、次元削除及び基底変換された、新たな説明変数ベクトルが⼿に⼊る。 (100×4)⾏列 ・(4×2)⾏列 =(100×2)⾏列 ここから固有値(主成分)を⼤きい順からいくつか選択する。 元のデータの次元 > 選択する固有値の数 の場合は、次元削除。 元のデータの次元 = 選択する固有値の数 の場合は、基底の変換。 Σ = ! , … , * ! ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ * ! , … , * % トレース は固有値の和 例えば上から固有値を2つ選ぶ(このとき寄与率の和は90%と仮定) " , … , # 5 3 2 7 1 5 5 9 3 8 4 1 選択した固有値と対応する、固有ベクトルのみが横に並んだ⾏列を作る 例えば.. 4次元の説明変数の共分散⾏列の固有値は最⼤4つ、ここから個の固有値を選ぶ 説明変数の⾏列 (100サンプル×4次元) 固有ベクトル( の⾏列 (4×2) 基底変換後の⾏列 (100×2) 次元が選んだ固有値(主成分)の数に削減された +
主成分分析︓前述の⼿順で実際にnumpyとscikit-learnの実装を⽐較してみる numpy scikit-learn 150×4⾏列が、150×2⾏列に次元削除 sklearnの次元削除後の⾏列の値と⼀致している* *1列⽬の符号が逆転している苦笑
参考⽂献 • OLS in Matrix Form • Multivariate Regression Model
in Matrix Form • 回帰分析 (2) - 重回帰分析 • 固有値分解と座標変換 • 線形変換(無相関化と次元削減) • 直交⾏列とスペクトル分解