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
線形回帰の実装
Search
kaise
May 27, 2024
0
210
線形回帰の実装
単回帰から重回帰の実装,おまけとして多項式回帰についてまとめた.
kaise
May 27, 2024
Tweet
Share
More Decks by kaise
See All by kaise
ロジスティック回帰の実装
kai_ds04
0
72
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
790
Typedesign – Prime Four
hannesfritz
42
2.8k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
The Pragmatic Product Professional
lauravandoore
36
6.8k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
11
1.1k
Visualization
eitanlees
147
16k
Transcript
線形回帰の実装 ssklearnPJ [B1]Takahashi Kaisei @kai_ds04
Index 1. 改めて「学習」について 2. 線形回帰による単回帰 3. 線形回帰による重回帰 4. 多項式回帰
Index 1. 改めて「学習」について 2. 線形回帰による単回帰 3. 線形回帰による重回帰 4. 多項式回帰
1.1 「学習」について 学習: データから知識を抽出し,数理モデルにその知識を蓄積する作業. 帰納的な手法.パラメータを最適化することとも言える. 数理モデル: ある現象を数式で記述したもの.とりあえず関数と捉えてもいい. 機械学習モデル: 数理モデルの中で,パラメータを学習によって自動で求めるもの. 知識:情報から規則性や見解などを導出したもの.
パラメータ:モデルの振る舞いや出力を決定づける調整可能な数値.例:数理モデルの係数など.
Index 1. 改めて「学習」について 2. 線形回帰による単回帰 3. 線形回帰による重回帰 4. 多項式回帰
2.1 単回帰とは 単回帰(simple linear regression)とは, 1つの説明変数から1つの連続値を予測すること. 今回は単回帰を線形回帰で解く. (非線形な単回帰もある)
2.2 線形回帰(単回帰) 線形回帰とは, ある二つの変数の関係を一次式で表したもの. ※統計において,頭に^(hat)がつく記号は予測値を表す. xは説明変数で,yは目的変数である.
2.2 線形回帰(単回帰) ここで,aとbはパラメータである. これらを機械学習によって求めたい. Q:では,どんなa, bが良いだろうか?
2.3 学習の目標 A:モデルの出力(予測)が適切になるようなa, bがいい. 適切とは?→ 「正解」に近いこと. 正解との差(残差,損失)をできる限り小さくしたい.{それが近いということ そのような状態をまず図で理解しよう.
2.3 学習の目標 例として,気温とアイスの売り上げという 二つの変数について考える. データを集めたところ,図のようになった. この二つには線形な関係(直線, 一次式)が あると言えそう. →線形回帰でモデル化しよう.
2.3 学習の目標 線形回帰を学習させることは, この図に一本の直線を引くことを意味する. さて,どのような直線が良いだろう.
2.3 学習の目標 何となくこんなのがいいんじゃないかと思う. この何となくを明確にすると, 「残差が小さい」となる.
正解との差(の合計) グラフの点線が残差( )を表す. 点線の長さの合計(残差)を小さくすることで モデルの出力(予測)が適切になる. 2.4 残差とは は入力と実測値のペアを表す. は入力と予測値のペアを表す.
実際に残差を最小にするとこうなる. 2.4 残差とは
残差を最小にするという目的を数学的に記述する. 2.5 数学的に表す
と,その前に...
2.5.1 平均の表し方 数式の記述の前に,これから登場する平均の表記法について解説する. 例: のようにデータがある.(xの集合を表す) これは「i が1〜Nまでの を合計する」→ これは「 の合計を
の個数で割る」→ 要は平均と全く同じなのだ. 今後全く同じ式が出てきたら,平均を表しているのだと瞬時に理解しよう.
残差を として表す. e = じゃあこれを最小化しよう!といきたいのだけれど, これだとちょっと数学的に扱いづらいので,変更を加える. 2.5 数学的に表す
2.6 二乗残差和って? 残差の最小化に欠かせないのが二乗残差和である. これが二乗残差和の式 文字通り残差の二乗の和を表す, 二乗することで扱いやすくなる. このような残差を計測する関数を損失関数と言う.
一旦整理する 1. 我々は,モデルの出力(予測)が適切になるa, bが欲しい. 2. 適切である状態とは残差が最小である状態である. 3. 残差を最小にするa, bを求めよう.←イマココ ex
ここまでのまとめ
ということで,残差を最小化しよう. 今回の二乗残差和を最小化する方法は, 特別に最小二乗法と言ったりする. 2.7 最小二乗法
二乗残差和を最小化しよう. 二乗残差和の式,これをグラフに表す. 二乗残差和には二乗がついているので aについてもbについても二次式(下に凸) この点のときのa, bがわかれば良さそう. 2.7 最小二乗法 グラフで最小の点は一番下のところ を代入すると…
求めたいのはaとb. グラフの下の地点は接線の傾きが0になるから から式をaとbそれぞれについて偏微分して=0で解けば求まりそう. ※微分すると,グラフの接線の傾きの式になる. それを=0で解くと,接線の傾き=0のときのパラメータがわかる. 2.7 最小二乗法
2.7 最小二乗法 を代入 代bについて微分,=0で解く. Nで割る 次はaについて求めていこう.
2.7 最小二乗法 代入後の式 aについて偏微分,=0で解く Nで割る 得られた式にbを代入しよう.
2.7 最小二乗法 さっき得られた式 を代入 aについての式 ※
パラメータについての式がもとまったということは,これでもう単回帰を実装で きるはず. 2.8 実装してみよう モデル パラメータ (次スライドに答え)
答え. 2.8 実装してみよう class SimpleLinearRegression(): def fit(self, x, y): var_x,
cov = np.cov(x, y)[0] bar_x = x.mean() bar_y = y.mean() self.a = cov / var_x self.b = bar_y - self.a * bar_x def predict(self, x): y = self.a * x + self.b return y
Index 1. 改めて「学習」について 2. 線形回帰による単回帰 3. 線形回帰による重回帰 4. 多項式回帰
3.1 重回帰とは 重回帰(mlutiple linear regression)とは, 複数の説明変数から1つの連続値を予測すること. 単回帰との違い 今回は重回帰を線形回帰で解く.
3.2 説明変数, 目的変数の確認 複数の説明変数とはどういうことか. そして複数の説明変数を行列に表し, 目的変数をベクトルでおく.これもどういうことか確認しよう.
3.2.1 説明変数の確認 説明変数について赤枠の ような対応をイメージ. ※Xは行列である. ※今回id列は無視する.
3.2.2 目的変数の確認 目的変数について 赤枠のような対応をイメージ. ※yはベクトルである.
3.3 線形回帰(重回帰) 重回帰では,複数の変数の関係を以下のようにモデル化する. 説明変数がd次元に増えたのでそれに応じてパラメータも増えている. では,これをもっと美しく表記しよう.
bが一個だけ飛び出しているようで邪魔である,そして実はbがある とこの後の操作がやりづらい.よってbを のなかに納める. ※ 式の意味は変えることなく綺麗に表記できた. aは重み(weight)と呼ばれることが多いのでwに置き換えておく. 3.3 線形回帰(重回帰)
3.3 線形回帰(重回帰) さて,式がある程度綺麗になってきたが,できればもっと簡単に表記したい. の式をwとxを分けて考える. ※wもxもそれぞれd+1次元のベクトル.( を追加したので1次元増えて いる) このように分けて考えることができる.二つのベクトルを を用いて表すと と表記できる.
※ は内積を表す. 分けると
3.4 最小二乗法 予測値 が決まったので,単回帰のときと同様に残差を最小化することを考 える. 重回帰でも最小二乗法で適切な を求めることができる.
3.4 最小二乗法 二乗残差和を と表す. に先ほどの を代入 これもよいが,行列を用いるともっと簡潔に書くことができる.
3.5 って何者? おっと, ってなんだ? まず,この式全体の説明の前に について説明する.
まず,予測値を並べたベクトルとして を考える. と定義できる. 3.5 って何者? ※0列目の要素は全て1である.
はもう確認済み. この式は,サンプル一個ずつについて表している. もう一度確認しよう. 3.5 って何者? ※0列目の要素は全て1である.
二個目のサンプルに対しても同じ. 3.5 って何者? ※0列目の要素は全て1である.
3.5 って何者? N個目のサンプルに対しても同じ. いま各サンプルについて確認したが, サンプル全体を表そうとすると になる. ※0列目の要素は全て1である.
求めたい二乗残差和は, の各要素の二乗和である. 3.5 って何者?
ここで,ベクトルの各要素の二乗和はL2ノルムの二乗として表せる. L2ノルムは したがって,これを二乗することで二乗和となる. よって, のL2ノルムの二乗 が二乗残差和となる. 予測値を並べたベクトル. は で表せるため, となる.
3.5 って何者? 例:
3.6 最小二乗法 が最小になる を求める. 単回帰同様,各 について二次式なので微分して0になる点を求めることで 最小値が求められる. 単回帰同様, と各要素について偏微分してそれぞれを=0で解く. では解いていく.
3.6 最小二乗法 さっきの式をまず展開する. このように変形できる.そしてこの式を について偏微分していく.
3.6 最小二乗法 偏微分すると,以下のような式になる. この式を=0で解く. この式は正規方程式と呼んだりする.
解くための材料は揃った.解けるはず. モデル パラメータ 3.7 実装してみよう (次スライドに答え)
3.7 実装してみよう 答え. class LinearRegression(): def fit(self, X, y): X
= np.insert(X, 0, 1, axis=1) self.w = np.linalg.inv(X.T @ X) @ X.T @ y def predict(self, X): X = np.insert(X, 0, 1, axis=1) return X @ self.w
Index 1. 改めて「学習」について 2. 線形回帰による単回帰 3. 線形回帰による重回帰 4. 多項式回帰
4.1 多項式回帰とは 多項式回帰とは直線では表現しきれない変数の関係を多項式で表現する線形回帰 モデルである.
4.2 多項式での表現 説明変数一つの状況でも,累乗した項を新たな説明変数として加えて重回帰とし て解くことで以下のように表現できる. ↓説明変数を二乗した項を加えた ↓説明変数を三乗した項も加えた
どのようにしてこれを実現しているのだろうか?
4.3 式での多項式の表現 二次関数で表現するには説明変数を二乗したものを加えるだけでいい. 同様にして,三次関数で表現するには三乗した項も加える. もっと表現を広げたいなら以下のようにする. シグマを使うとこう
参考文献 岡崎直観, 機械学習帳, https://chokkan.github.io/mlnote/regression/01sra.html, ( 2024/4/26)