【機器學習】1. 廣義線性模型

来源:https://www.cnblogs.com/jy333/archive/2023/03/10/ML_1.html
-Advertisement-
Play Games

1. 廣義線性模型 1.1 從簡單線性回歸開始 機器學習的任務是從已知的數據中提取知識, 從而完成對新數據的識別與預測, 即應用知識. 但是, 數據本身不會給予研究者想要的答案, 大多數時候人們很難通過觀察或者簡單的計算提取有用的結論. 為了從歷史數據中整合知識, 人們提出了"模型"這一概念, 認為 ...


1. 廣義線性模型

1.1 從簡單線性回歸開始

機器學習的任務是從已知的數據中提取知識, 從而完成對新數據的識別與預測, 即應用知識. 但是, 數據本身不會給予研究者想要的答案, 大多數時候人們很難通過觀察或者簡單的計算提取有用的結論. 為了從歷史數據中整合知識, 人們提出了"模型"這一概念, 認為數據是從模型中生成的, 遵循一定的規律, 如果規律是可知的, 那麼機器從數據中學習規律就是可能的.

由於數據不會說話, 最初的模型由人們假設(assumption)而來. 下麵用大家熟知的簡單線性回歸為例, 描述一個數據生成的過程. 假設數據為\(\{(y_i,x_i)\}_{i=1}^{n}\), 其中\(x_i\)是一個向量, 描述樣本點\(i\)的特征(features). 簡單線性回歸假設所有的樣本點由下麵的模型生成:

\[y=\theta^Tx+\epsilon \]

這裡\(\theta\)是一個與\(x\)同型的向量, 代表了模型的可知部分, \(\epsilon\)是一個不可知的正態零均值隨機誤差, 方差為\(\sigma^2\). 上述模型也可以寫成下麵的概率分佈形式:

\[y\sim N(\theta^Tx,\sigma^2). \]

我們獲得了從這個模型中生成的數據集\(\{(y_i,x_i)\}_{i=1}^{n}\), 希望從中學習到關於可知部分\(\theta\)的知識, 因為知道了\(\theta\), 就可以找到數據生成的過程, 從而對任何新觀測的特征\(x_{n+1}\), 即使不能知道對應的隨機誤差, 也能夠大概瞭解標簽\(y_{n+1}\)的期望\(\mathrm{E}[y_{n+1}]\), 這就是把從歷史數據中學到的知識應用於新數據的場景.

現在的目標是儘可能準確地估計一個\(\theta\)的值\(\hat{\theta}\)得到估計模型, 因為真實的\(\theta\)是不會直接呈現給我們的, 只能從歷史數據中估計. 對於每一個估計的\(\hat{\theta}\), 得到一個估計的概率分佈\(N(\hat{\theta}^Tx,\sigma^2)\), 即我們視為數據集是從這個分佈中產生的, 在期望意義下, \(h_{\hat\theta}(x)=\mathrm{E}[N(\hat{\theta}^Tx,\sigma^2)]=\hat{\theta}^Tx\)是從這個概率分佈中抽樣最應該出現的值.

如果模型準確, \(h_\hat{\theta}(x)\)和真實數據\(y\)的差異肯定儘可能小, 因此只需要想辦法刻畫模型結果和真實數據的差異並最小化之. 對兩個在\(\mathbb{R}^{n}\)上取值的向量, 衡量其差異的方法有很多, 選擇均方誤差作為其差異的度量, 要最小化兩個向量之間的均方誤差, 意味著我們的目標(objective)是

\[\hat\theta=\min_{\hat\theta}(h_\hat\theta(x)-y)^T(h_{\hat\theta}(x)-y). \]

優化不屬於我們討論的範疇, 我們只需要知道梯度下降法可以優化這個目標函數, 得到一個\(\hat\theta\)即可. 這樣, 我們就得到了估計模型.

但是, 簡單線性回歸模型顯得過於簡單了. 如果我們想獲得一個更加有應用價值的模型, 至少有下麵幾點是可以考慮的:

  • 在數據生成機制上, 沒有任何的非線性運算元使得數據的生成機制被我們描述得過於理想化, 但過多的非線性也會增大估計難度. 因此可以考慮保留核心的線性生成部分\(\theta^Tx\), 但對結果施加一個非線性函數.
  • 模型可能不由正態分佈所生成, 可以嘗試其他分佈.
  • 我們也許感興趣的不是隨機數\(y\)本身, 而是其某種變換\(T(y)\).

考慮以上三點, 就從簡單線性回歸模型進入了廣義線性模型.

1.2 指數族

現在先考慮前兩點, 嘗試某種其他的分佈\(\mathrm{Distribution}(\eta)\), 其中核心未知參數是\(\theta^Tx\)的某個變換, 即

\[y\sim \mathrm{Distribution}(a(\theta^Tx)). \]

假定我們知道分佈的具體形式, 也獲得了數據集\((y,x)\), 那麼對於任何\(\hat{\theta}\), 如果數據來源於模型\(\mathrm{Distribution}(a(\hat\theta^Tx))\), 那麼此分佈的期望和真實數據\(y\)必定差異較小(這裡我們用"距離"來表示, 以區別於一般的作差), 也就是說我們的目標依然是

\[\min_{\hat{\theta}} \mathrm{Distance}(y,\mathrm{E}[\mathrm{Distribution}(a(\hat\theta^Tx))]). \]

在簡單線性回歸中, 距離函數被我們選擇為均方差, 現在我們且不論距離的選擇. 現在擺在面前的問題是如何計算分佈的期望, 如果有可能的話, 最簡單的期望形式必然是\(a(\theta^Tx)\)的某個映射, 這讓我們不能對所選分佈太過隨意. 有一類特殊的分佈滿足我們的需求: 指數族(exponential family). 由於指數族定義不依賴於模型, 先用\(\eta\)代替\(\theta^Tx\).

如果某個參數分佈族的密度函數滿足下麵的形式:

\[p(y;\eta)=b(y)\exp(\eta T(y)-a(\eta)), \]

就稱此分佈族是指數分佈族, 這裡\(a(\cdot)\), \(b(\cdot)\)\(T(\cdot)\)都是可微函數. 我們關註它的期望:

\[\mathrm{E}[p(y;\eta)]=\int_{\mathbb{R}}yp(y;\eta)\mathrm{d}y=\int_{\mathbb{R}} yb(y)\exp(\eta T(y)-a(\eta))\mathrm{d}y, \]

直接求期望較困難, 註意到對分佈族中的任意概率分佈, 密度函數的積分為\(1\), 因此我們可以嘗試將指數族密度函數的積分對參數\(\eta\)求導, 其導數值應恆為\(0\). 指數族積分和求導可交換, 為計算提供了便利([2]中給出了不使用可交換性條件下的證明):

\[\begin{aligned} \frac{\partial }{\partial \eta}\int_{\mathbb{R}} p(y;\eta)\mathrm{d}y&=\int_{\mathbb{R}}\frac{\partial b(y)\exp(\eta T(y)-a(\eta))}{\partial \eta}\mathrm{d}y\\ &=\int_{\mathbb{R}}(T(y)-a'(\eta))b(y)\exp(\eta T(y)-a(\eta))\mathrm{d}y\\ &=T(\mathrm{E}[p(y;\eta)])-a'(\eta)\\ &=0, \end{aligned} \]

這樣我們求出了\(\mathrm{E}[p(y;\eta)]\)的一個變換的值, 如果\(T(\cdot)\)是可逆函數, 那麼\(\mathrm{E}[p(y;\eta)]=T^{-1}(a'(\eta))\); 特別地如果\(T(\cdot)\)是恆等變換, 那麼\(\mathrm{E}[p(y;\eta)]=a'(\eta)\). 這裡我們得到了指數族的期望, 證明指數族正是我們所關註的分佈族.

現在回到機器學習任務上, 假如我們選擇的分佈是指數族分佈\(\mathrm{ExponentialFamily}(\theta^Tx)\), 並取\(T(\cdot)\)為恆等映射, 那麼根據在簡單線性回歸一節中所討論的, 我們只需要:

  • 對每一個估計的\({\theta}\), 代入指數族中, 得到期望觀測向量\(a'(\theta^Tx)\).
  • 選擇一個合適的距離函數, 最小化\(\mathrm{Distance}(a'(\theta^Tx),y)\).
  • 如果最小化由迭代完成, 就重覆上述兩個步驟; 否則用其他方式最小化.

1.3 廣義線性回歸實例

現在回顧簡單線性回歸模型, 由\(N(\theta^Tx,\sigma^2)\)也就是\(N(\eta,\sigma^2)\)生成, 我們考慮將正態分佈化為指數族的形式:

\[p(y;\eta)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{y^2-2\eta y+\eta^2}{2\sigma^2} \right)=\frac{\exp(-\frac{y^2}{2\sigma^2})}{\sqrt{2\pi\sigma^2}}\cdot\exp\left(\frac{\eta\cdot y-\eta^2}{\sigma^2} \right), \]

這裡存在另一個參數\(\sigma^2\), 這關係到指數族一個更廣泛的形式:

\[p(y;\eta,\tau)=b(y,\tau)\exp\left(\frac{\eta^TT(y)-a(\eta)}{c(\tau)} \right). \]

這裡\(\eta=\theta^Tx\)是向量, \(\theta\)是參數矩陣, \(T(y)\)是一個向量函數, 這種表述下文還會提到. 上式中\(\tau\)稱為擴散繫數, 也就是正態分佈中的\(\sigma^2\). 另外, 指數分佈族中包含眾多分佈: 正態分佈, 兩點分佈, 二項分佈, 泊松分佈, Gamma分佈等.

以兩點分佈\(B(1,p)\)為例, 它常常被視為二分類任務的生成模型. 要註意不能直接用\(\eta\)替換\(p\), 至少因為\(p\)的取值範圍只有\([0,1]\)\(\eta=\theta^Tx\in\mathbb{R}\), 具體\(\eta\)應該如何表現還應當先將兩點分佈的概率函數(在這裡為分佈列)改寫為指數族的形式.

\[p(y;p)=p^{y}(1-p)^{1-y}=\exp\left(y\log p+(1-y)\log(1-p) \right)=\exp\left(y\cdot\log\frac{p}{1-p}+\log(1-p) \right). \]

這個密度形式與指數族的標準形式不同, 但只要施加變換

\[\eta=\log\frac{p}{1-p}, \]

同時有

\[p=\frac{e^{\eta}}{1+e^\eta}, \]

就可以把密度變為

\[p(y;p)=\tilde p(y;\eta)=\exp\left(y\cdot\eta-\log(1+e^{\eta}) \right), \]

變成指數族標準形式, 且\(a(\eta)=\log(1+e^{\eta})\). 對比前面給出的結論, 從\(B(1,p)\)中抽出的樣本\(y\)應當與\(a'(\eta)\)一致, 即最小化

\[\mathrm{Distance}(y,a'(\eta))=\mathrm{Distance}\left(y,\frac{e^{\theta^Tx}}{1+e^{\theta^Tx}} \right)=\mathrm{Distance}\left(y,\mathrm{sigmoid}(\theta^Tx) \right). \]

這就是二分類器中, 用線性函數sigmoid變換作概率估計的由來. 同時, 對分類問題, 儘管均方差用作距離函數依然是可行的, 但梯度下降中均方差表現不好, 因此我們往往使用交叉熵函數作距離度量(原因這裡不談):

\[\mathrm{CrossEntropy}(y,\hat y)=-\sum_{i=1}^{n}y_i\log_2 \hat{y}_i. \]

最後, 回到上文我們提到的\(\theta\)為參數矩陣的情況, 此時對應的分佈族是多項分佈\(B(1;p)\), 其中\(p=(p_1,\cdots,p_k)'\), 每次生成一個單位向量\(y=(y_1,\cdots,y_k)\)其中有且僅有一個分量\(y_i=1\)(以概率\(p_i\)), 其餘分量為\(0\), , 它常常被認為是多分類任務的生成模型.

嘗試寫出多項分佈的概率函數, 註意, 一個生成\(k\)維向量的多項分佈中, 未知參數只有\(k-1\)個, 這是因為\(\sum_ip_i=1\)\(\sum_iy_i=1\).

\[\begin{aligned} p(y;p)&=p_1^{y_1}p_2^{y_2}\cdots p_k^{y_k} \\ &=\exp\left(\sum_{i=1}^{k-1}y_i\ln p_i+\left(1-\sum_{i=1}^{k-1}y_i \right)\ln\left(1-\sum_{i=1}^{k-1}p_i \right) \right)\\ &=\exp \left(\sum_{i=1}^{k-1}y_i\ln\frac{p_i}{1-\sum_{i=1}^{k-1}p_i}+\ln\left(1-\sum_{i=1}^{k-1}p_i \right) \right) \end{aligned} \]

至此, 令

\[\eta=\left(\ln\frac{p_1}{p_k},\cdots,\ln\frac{p_{k-1}}{p_k},0 \right), \]

可得\(p_i=p_ke^{\eta}(i=1,\cdots,k-1)\), 結合\(\sum_ip_i=1\)可得

\[p=\left(\frac{e^{\eta_1}}{1+\sum_{i=1}^{k-1}e^{\eta_i}},\cdots,\frac{e^{\eta_{k-1}}}{1+\sum_{i=1}^{k-1}e^{\eta_i}},\frac{1}{1+\sum_{i=1}^{k-1}e^{\eta_i}} \right), \]

上面兩個繁瑣的式子實際上就是\(\eta_i=\ln(p_{k-1}/p_k)\)以及\(p_i=e^{\eta_i}/\sum_je^{\eta_j}\). 此時密度函數為

\[p(y;p)=\tilde p(y;\eta)=\exp\left(y^T\eta-\ln \left(\frac{e^{\eta_k}}{\sum_{i=1}^{k}e^{\eta_i}} \right)\right):=\exp(y^T\eta-a(\eta)) \]

這裡\(a'(\eta)\)就是對其每個分量求導, 即

\[a'(\eta)=\begin{bmatrix} \frac{e^{\eta_1}}{\sum_i e^{\eta_i}} \\ \vdots \\ \frac{e^{\eta_k}}{\sum_{i}e^{\eta_k}} \end{bmatrix}=\begin{bmatrix} \frac{\exp(\theta_1^Tx)}{\sum_i\exp(\theta_i^Tx)}\\ \vdots \\ \frac{\exp(\theta_k^Tx)}{\sum_i\exp(\theta_i^Tx)} \end{bmatrix}. \]

此時\(\theta\)是參數矩陣, \(\theta_i\)代表矩陣的第\(i\)列.

1.4 廣義線性模型代碼

statsmodels庫中提供了單參數指數族對應的廣義線性模型. 以下假設我們有一個從泊松分佈中生成的模型, 這裡先驗證泊松分佈族是指數族.

\[p(y;\lambda)=\frac{\lambda^y}{y!}e^{-\lambda}=\frac{1}{y!}\exp(y\log \lambda-\lambda)\xlongequal{\eta=\log\lambda}\frac{1}{y!}\exp(y\eta-e^{\eta}), \]

也即數據從\(P(e^{\theta^Tx})\)中生成, 生成數據的期望為\(a'(\eta)=e^{\eta}=e^{\theta^Tx}\). 現在我們先生成數據. 假設\(x\)是三維數據, \(\theta=(1, 2, 5)^T\).

import numpy as np
import statsmodels.api as sm
np.random.seed(2000)

## Generate data from poisson distribution

theta = np.array([1, 2, 5])
x = np.random.normal(size=(100, 3))
y = np.random.poisson(lam=np.exp(np.dot(x, theta))) + np.random.normal(scale=1, size=(100,))

註意, GLM()函數是不會自己添加截距項的, 這裡簡化處理, 我們也認為模型不含截距項. 因為是泊松分佈族生成的數據, 因此要選擇分佈族為Poisson().

glm = sm.GLM(y, x, family = sm.families.Poisson())
res = glm.fit()
print(res.summary())

得到的結果為\(\hat{\theta}=(0.9964,1.9946,5.0010)'\), 非常接近真實值.

GLM()函數中可以設定聯結函數(link function), 每一個分佈族會自帶預設的聯結函數, 這個函數就是連接分佈參數\(\lambda\)和自然參數\(\eta=\theta^Tx\)的函數, 本例中為\(\log\), 因為\(\eta=\log\lambda\). 有關聯結函數的更多信息, 可參考[3].

Reference

[1] https://cs229.stanford.edu/notes2021fall/cs229-notes1.pdf

[2] https://xg1990.com/blog/archives/304

[3] https://www.statsmodels.org/stable/glm.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2.HelloSpring 思考問題? Hello對象是誰創建的? Hello對象是由Spring設置的 Hello 對象的屬性是怎麼設置的? Hello 對象的屬性是Spring容器設置的 這個過程就叫控制反轉 控制:誰來控制對象的創建,傳統應用程式的對象是由程式本身控制創建的,使用Spring後 ...
  • 哈嘍大家好 今天給大家分享一個用Python開發一款飛翔的小鳥游戲。 飛翔的小鳥(游戲英文名:Flappy Bird) 一款由越南獨立開發者開發的手機游戲,是之前非常流行的一款手機游戲 小游戲目標:讓小鳥穿過管子,不要碰到任何物體,挑戰更遠距離 今天,就讓我們一起用python來複刻一下這款游戲吧! ...
  • SpringBoot 文件上傳+攔截器 文件上傳原理 表單的enctype屬性規定在發送到伺服器之前應該如何對錶單數據進行編碼。 當表單的enctype="application/x-www-form-urlencoded"(預設)時,form表單中的數據格式為:key=value&key=valu ...
  • 我可以明確地回答.我們之所以選擇Postgres,是因為它在操作上比MySQL更可靠,而當時公司的創始人相信SQL資料庫的可移植性. 隨著年份的發展,我們發現了這一點,我們發現基本上,Postgres是Rough中的這款鑽石,它具有一系列功能和一個開發社區,這是我們見過的最不可思議的開源項目之一,並 ...
  • Lua語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入Lua語言代碼,點擊運行,可線上編譯運行Lua語言,Lua語言代碼線上運行調試,Lua語言線上編譯,可快速線上測試您的Lua語言代碼,線上編譯Lua語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提 ...
  • 3.0版本以前listener中拋出的所有異常都會被easyexcel捕獲,並且包裝成ExcelAnalysisException,寫法如下: private void parseXmlSource(InputStream inputStream, ContentHandler handler) { ...
  • 直觀的界面、出色的計算功能和圖表工具,使Excel成為最流行的個人電腦數據處理軟體。在獨立的數據包含的信息量太少,而過多的數據又難以理清頭緒時,製作成表格是數據管理的最有效手段之一。這樣不僅可以方便整理數據,還可以方便我們查找和應用數據。後期我們還可以對具有相似表格框架,相同性質的數據進行合併彙總... ...
  • 作者:張飛洪 來源:www.cnblogs.com/jackyfei/p/13862607.html 離職的心態 人們在辭退或者被辭退都會對原公司抱有意見,因為疫情,公司業務告急,工資發不出來,我也失去了工作。雖然情緒上難免會有波動,但是轉念一想,我應該用開心的心態來看待這次辭職,並希望能快速翻過這 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...