以下內容為盧朓老師在B站進行的分享,可以作為學習參考:
在介紹廣義線性模型之前, 我們先看看常規(guī)線性回歸模型.
常規(guī)線性回歸(ConventionalLinear Regression),也稱為普通最小二乘法(Ordinary Least Squares, OLS)線性回歸,是統(tǒng)計學和機器學習中最基礎且廣泛應用的一種回歸分析技術。
這個可以參考北太天元科普:最小二乘法和線性回歸 - 嗶哩嗶哩 (bilibili.com)
常規(guī)線性回歸是一種用于分析兩個或多個變量之間線性關系的統(tǒng)計方法。它通過擬合一條直線(或超平面)來描述因變量(目標變量)與一個或多個自變量(預測變量)之間的關系。這種模型基于一個基本假設:自變量與因變量之間存在線性關系。
常規(guī)線性回歸的數(shù)學表達式為:
* 簡單線性回歸(單變量):
* 多元線性回歸(多變量):
其中,Y是因變量,X是自變量(在多元線性回歸中,X代表多個自變量X_1, X_2, ..., X_n),是截距項,
是回歸系數(shù),ε是誤差項,表示模型未能解釋的變異部分。
常規(guī)線性回歸通過最小二乘法來擬合模型。最小二乘法的目標是找到最佳的回歸系數(shù)β0, β1, ..., βn,使得實際觀測值與模型預測值之間的殘差平方和最小。殘差平方和的公式為:
RSS =
其中,是實際觀測值,
是模型預測值。
常規(guī)線性回歸的有效性基于以下假設條件:
* 線性關系:自變量與因變量之間存在線性關系。
* 獨立性:觀測值之間相互獨立。
* 同方差性:誤差項的方差恒定。
* 正態(tài)性:誤差項服從正態(tài)分布。
上面的自變量又被稱為協(xié)變量、預測變量、解釋變量, 是那些用于預測或解釋 因變量(響應變量)變化的變量。
線性回顧,我們假設因變量 , 我們的目的是尋找
也就是
, 我們假設
.
在廣義線性模型(GLM)中,這些自變量通過線性組合的方式影響因變量的分布,即使這種影響在最終模型中可能表現(xiàn)為非線性關系。因此,盡管模型可能包含非線性的元素,但它們仍然被視為“線性”的,因為自變量的影響是通過線性組合傳遞的, 并通過鏈接函數(shù)與線性預測器建立非線性關系。廣義線性模型(GLMs)是統(tǒng)計學中一類非常強大且靈活的回歸模型,它擴展了普通線性回歸模型的應用范圍。本文將對廣義線性模型進行詳細介紹,并清晰地闡述其數(shù)學基礎和應用場景。
一、背景與動機
普通線性回歸模型假設響應變量服從正態(tài)分布,且其均值是預測變量的線性函數(shù)。然而,在實際應用中,這一假設往往不成立。例如,在二分類問題中,響應變量通常服從二項分布;在計數(shù)數(shù)據(jù)中,響應變量可能服從泊松分布。為了處理這些非正態(tài)分布數(shù)據(jù),廣義線性模型應運而生。
二、廣義線性模型的基本概念
廣義線性模型包含三個主要組成部分:
隨機部分(random component):定義了響應變量的概率分布。例如,在線性回歸中, 遵循正態(tài)分布;而在二元邏輯回歸中, 遵循二項分布。這是模型中唯一的隨機元素,不包含單獨的誤差項。常見的分布類型包括正態(tài)分布、二項分布、泊松分布等。
系統(tǒng)部分(systematic component):描述了模型中的解釋變量 及其線性組合。具體來說,就是這些解釋變量的加權和,如 。
鏈接函數(shù)(Link function, 記作 η 或 g(μ)):它連接了模型的隨機部分(響應變量的分布)和系統(tǒng)部分(解釋變量的線性組合)。鏈接函數(shù) 或 是一個函數(shù),它將響應變量的期望值 與解釋變量的線性組合 聯(lián)系起來。通過鏈接函數(shù),我們可以將線性預測器 (解釋變量的線性組合)轉換為響應變量的期望值 。這允許我們使用線性模型來描述非線性的關系。在經(jīng)典回歸(即普通最小二乘回歸)中,鏈接函數(shù)是恒等函數(shù),即: 這里,鏈接函數(shù)沒有改變期望值的形式,因此線性預測器 直接等于響應變量的期望值 。 在邏輯回歸中,響應變量 通常是一個二值變量(例如,成功或失?。?,其期望值 代表成功的概率 。邏輯回歸使用logit鏈接函數(shù),定義為: 其中, 是成功的概率。 通過這個鏈接函數(shù),我們可以將線性預測器 轉換為成功的概率 。具體來說,我們有: 這是邏輯回歸中著名的sigmoid函數(shù),它將線性預測器映射到(0, 1)區(qū)間內的概率值。
在廣義線性模型(GLM)的框架中,假設響應變量 Y 的條件分布屬于指數(shù)分布族是一個基本的、必需的假設。這個假設是GLM理論構建的基礎,它允許我們使用一套系統(tǒng)的方法來處理不同類型的響應變量和預測變量之間的關系。
指數(shù)分布族包括了許多常見的分布,如正態(tài)分布、二項分布、泊松分布等,這些分布都可以通過GLM進行建模。在這個框架下,我們可以通過指定鏈接函數(shù)來連接線性預測器和響應變量的期望值,從而靈活地適應不同的數(shù)據(jù)特性和預測需求。
北太天元的用于廣義線性模型的擬合.
設響應變量 的條件分布屬于指數(shù)分布族,其概率密度函數(shù)(或概率質量函數(shù))可以表示為:
其中:
- 是自然參數(shù),決定了分布的具體形狀。
- 是尺度參數(shù),通常與分布的方差有關。
- 和
是已知函數(shù),用于確保概率密度函數(shù)或概率質量函數(shù)的積分(或求和)為1。
在廣義線性模型中,我們假設:
1. 分布假設:給定預測變量 ,響應變量
的條件分布屬于指數(shù)分布族。
2. 線性預測器與期望值的聯(lián)系:響應變量 的數(shù)學期望值
是線性預測器
的函數(shù),即
。這里
是鏈接函數(shù),它決定了線性預測器如何與響應變量的期望值相聯(lián)系。
3. 自然參數(shù)與線性預測器的關系:自然參數(shù) 是線性預測器
的函數(shù),即
。這進一步明確了線性預測器如何影響分布的具體形狀。
三、常見鏈接函數(shù)與分布類型
- 正態(tài)分布(Normal Distribution):
- 用途:通常用于連續(xù)數(shù)據(jù)的預測。
- 鏈接函數(shù):恒等函數(shù)(IdentityFunction),即 。因此,
。
- 二項分布(Binomial Distribution):
- 用途:用于二分類問題(如邏輯回歸)。
- 鏈接函數(shù):Logit 函數(shù)(對數(shù)幾率函數(shù)),即 。因此,
(即邏輯函數(shù))。
- 泊松分布(Poisson Distribution):
- 用途:用于計數(shù)數(shù)據(jù)的建模(如事件發(fā)生的次數(shù))。
- 鏈接函數(shù):自然對數(shù)函數(shù)(Natural LogarithmFunction),即 。因此,
。
- 多項分布(Multinomial Distribution):
- 用途:用于多分類問題。
- 鏈接函數(shù):Softmax 函數(shù),即對于每個類別 i,有 (在多類別情況下,鏈接函數(shù)應用于每個類別的線性預測器,并確保所有類別的概率之和為1)。
廣義線性模型通過指數(shù)分布族和鏈接函數(shù)提供了一種靈活的框架,用于建模各種類型的數(shù)據(jù)和響應變量。通過選擇合適的分布類型和鏈接函數(shù),我們可以構建適應不同數(shù)據(jù)特性和預測需求的模型。
四、函數(shù)擬合和廣義線性回歸
開普勒第三定律,也稱為行星運動定律,描述了行星繞太陽運動的軌道周期與其軌道半長軸之間的關系。具體來說,該定律指出:繞以太陽為焦點的橢圓軌道運行的所有行星,其各自橢圓軌道半長軸的立方與周期的平方之比是一個常量。用數(shù)學表達式表示即:a³/T²=k,其中a是軌道半長軸,T是軌道周期,k是一個與行星無關的常量,只與中心天體(在這里是太陽)的質量有關。這個關系實際上是一個非線性關系,因為它涉及到軌道半長軸的立方與周期的平方之比。在非線性關系中,變量之間的關系不是直線或平面,而是曲線或更復雜的形狀。開普勒第三定律中的這種非線性關系揭示了行星運動的一個基本規(guī)律,即行星的軌道周期與其軌道大小之間存在一個特定的比例關系。
對一系列觀測數(shù)據(jù)進行函數(shù)擬合在天文學、物理學、工程學等多個領域中非常常見,用于預測、解釋數(shù)據(jù)背后的物理規(guī)律或進行模型優(yōu)化。函數(shù)擬合的目標通常是找到一個數(shù)學函數(shù),該函數(shù)能夠盡可能準確地描述觀察的數(shù)據(jù)點。
在許多情況下,數(shù)據(jù)可能呈現(xiàn)出非線性關系,這使得直接擬合變得復雜。然而,通過對變量取對數(shù),可以將某些類型的非線性關系轉化為線性關系,從而簡化擬合過程。這種方法基于對數(shù)函數(shù)的特性,即對數(shù)函數(shù)可以將乘法關系轉化為加法關系。
具體來說,如果數(shù)據(jù)呈現(xiàn)出指數(shù)關系(例如,),則可以通過對 y 取對數(shù)來將其轉化為線性關系(我們舉得例子還kepler做得 T = 1/k * a^(3/2) 不太一樣,但是道理是類似的):
這樣,原本的非線性關系就變成了關于$ log(y) 和 x 的線性關系,可以使用線性回歸等簡單方法來進行擬合。
廣義線性模型(GLM)是線性模型的擴展,它允許因變量服從更廣泛的概率分布,并通過鏈接函數(shù)將線性預測器與因變量的期望值或分布聯(lián)系起來。在GLM的框架中,當因變量服從指數(shù)分布族(如泊松分布、伽馬分布等)時,通常會使用對數(shù)鏈接函數(shù)。
將對數(shù)轉換與GLM聯(lián)系起來的關鍵在于,對數(shù)轉換實際上是一種特殊形式的鏈接函數(shù)。在GLM中,鏈接函數(shù)用于將線性預測器(即自變量的線性組合)映射到因變量的期望值或分布上。對于指數(shù)分布族,對數(shù)鏈接函數(shù)是一種常用的選擇,因為它能夠保持因變量與自變量之間的非線性關系(在原始尺度上),同時在線性預測器的尺度上保持線性關系。
因此,當我們通過取對數(shù)來轉化非線性關系為線性關系并進行擬合時,實際上是在使用一種類似于GLM中的對數(shù)鏈接函數(shù)的方法。雖然很多時候我們可以采用更加直觀和簡單的方法(例如,直接對因變量和自變量單獨或者同時取對數(shù),然后使用線性回歸),但GLM提供了更嚴格的統(tǒng)計框架和更廣泛的適用性。下面我們用代碼給出 數(shù)據(jù)呈現(xiàn)出指數(shù)關系y = a*exp(bx),我們使用兩種方法來做數(shù)據(jù)擬合: 第一種方法是使用對y取對數(shù),然后使用線性回歸(或者說最小二乘法);第二種方法是使用GLM(特別是選擇泊松分布和對數(shù)鏈接函數(shù))。 第一種方法我們使用北太天元的 polyfit 函數(shù), 第二種方法,我們使用北太天元的 glmfit 函數(shù)。
% 生成模擬數(shù)據(jù) n = 30; % 數(shù)據(jù)點數(shù)量 x = linspace(0, 10, n)'; % 自變量 a = 2; % 指數(shù)函數(shù)參數(shù)a b = 0.5; % 指數(shù)函數(shù)參數(shù)b y = a * exp(b * x) + randn(n, 1) * 0.05; % 因變量,添加了一些噪聲 % Kepler的指數(shù)函數(shù)擬合(假設他已知是指數(shù)關系) % 對y取對數(shù),轉化為線性關系 log_y = log(y); % log_y = log(a) + b * x ; % 使用線性回歸擬合轉化后的數(shù)據(jù) p_kepler = polyfit(x, log_y, 1); % 這里polyfit只用于演示,實際上Kepler可能用其他方法 beta_kepler = [p_kepler(1), exp(p_kepler(2))]; % 注意,我們需要將截距項轉化回原始尺度 b = p_kepler(1), a = e^(p_kepler(2)) % 使用glmfit函數(shù)進行擬合 % 對于指數(shù)關系,我們使用'poisson'分布和對數(shù)鏈接函數(shù)(這是GLM中的標準設置) % 但是,注意MATLAB的glmfit默認不處理指數(shù)分布的截距項,因此我們需要手動添加一個常數(shù)項 X = [ones(n, 1), x]; % 添加常數(shù)項1到自變量中 beta_glm = glmfit(X, y, 'poisson', 'Link', 'log'); % 比較結果 disp('Kepler擬合結果:'); disp(beta_kepler); disp('GLM擬合結果:'); disp(beta_glm); % 繪制結果比較 % 原始數(shù)據(jù) figure; scatter(x, y, 'b', 'filled'); hold on; % Kepler擬合曲線 y_kepler = beta_kepler(2) * exp(beta_kepler(1) * x); %y_kepler = exp(p_kepler(2)+p_kepler(1) * x); plot(x, y_kepler, 'r-', 'LineWidth', 2); % GLM擬合曲線 % 注意,glmfit返回的是對數(shù)尺度上的參數(shù),我們需要轉化回原始尺度 % 對于泊松分布,GLM的擬合結果是log(mu),所以我們需要使用exp函數(shù) y_glm = exp([ones(size(X,1),1), X] * beta_glm); plot(x, y_glm, 'g--', 'LineWidth', 2); legend('原始數(shù)據(jù)', 'Kepler擬合', 'GLM擬合'); xlabel('x'); ylabel('y'); title('北太天元: Kepler擬合與GLM擬合比較'); hold off;
五、應用場景
廣義線性模型在各個領域都有廣泛的應用,包括但不限于: - 醫(yī)學:用于疾病診斷、治療效果評估等。 - 生物學:用于基因表達數(shù)據(jù)分析、種群動態(tài)模型等。 - 經(jīng)濟學:用于需求分析、風險評估等。 - 社會學:用于投票行為分析、犯罪率預測等。
六、glm的鏈接函數(shù)和神經(jīng)網(wǎng)絡的激活函數(shù)
廣義線性模型(GLM)的鏈接函數(shù)和神經(jīng)網(wǎng)絡的激活函數(shù)在作用上有一定的相似性,它們都是為了引入非線性因素,使得模型能夠捕捉到數(shù)據(jù)中的復雜關系。然而,盡管它們在功能上有所重疊,但在發(fā)展背景、理論基礎以及應用靈活性上確實存在一些差異。
GLM的鏈接函數(shù)起源于統(tǒng)計學的廣義線性模型框架,這一框架是在對經(jīng)典線性回歸模型進行擴展的基礎上發(fā)展起來的。鏈接函數(shù)的主要作用是將線性預測器(即自變量的線性組合)與響應變量的期望值或分布聯(lián)系起來。由于GLM的理論基礎較為堅實,鏈接函數(shù)的選擇通常受到嚴格的數(shù)學和統(tǒng)計理論的約束,以確保模型的合理性和可解釋性。因此,在GLM中,鏈接函數(shù)的選擇往往比較有限,且需要滿足一定的數(shù)學性質,如單調性和可逆性。
相比之下,神經(jīng)網(wǎng)絡的激活函數(shù)則更加靈活多樣。神經(jīng)網(wǎng)絡作為一種機器學習算法,其目標是通過對大量數(shù)據(jù)進行訓練,學習到數(shù)據(jù)中的復雜模式和規(guī)律。激活函數(shù)在神經(jīng)網(wǎng)絡中扮演著至關重要的角色,它們通過引入非線性因素,使得神經(jīng)網(wǎng)絡能夠逼近更加復雜的函數(shù)或映射。與GLM的鏈接函數(shù)相比,神經(jīng)網(wǎng)絡的激活函數(shù)沒有嚴格的數(shù)學和統(tǒng)計理論約束,因此可以選擇更加多樣化和靈活的函數(shù)形式。此外,隨著深度學習的發(fā)展,人們還不斷提出新的激活函數(shù),以適應不同任務和數(shù)據(jù)的需求。
總的來說,雖然GLM的鏈接函數(shù)和神經(jīng)網(wǎng)絡的激活函數(shù)在作用上相似,但它們在發(fā)展背景、理論基礎以及應用靈活性上存在差異。GLM的鏈接函數(shù)更加注重理論分析和可解釋性,而神經(jīng)網(wǎng)絡的激活函數(shù)則更加靈活多樣,能夠適應不同任務和數(shù)據(jù)的需求。在實際應用中,需要根據(jù)具體問題和數(shù)據(jù)特點選擇合適的模型和方法。
七、結論
廣義線性模型通過放寬普通線性回歸模型的假設,擴展了其應用范圍,使其能夠處理各種類型的數(shù)據(jù)和響應變量。通過選擇合適的鏈接函數(shù)和分布類型,廣義線性模型能夠靈活地適應不同的實際問題,為統(tǒng)計分析和數(shù)據(jù)挖掘提供了強大的工具。
再給出北太天元一個使用glmfit 的例子, 代碼如下:
% 生成示例數(shù)據(jù) N = 100; % 樣本大小 X = randn(N, 2); % 生成兩個服從正態(tài)分布的預測變量 % 添加常數(shù)項(截距項) X = [ones(N, 1), X]; % 生成二項響應變量(0 或 1) % 這里我們使用一個邏輯回歸模型來生成響應變量,但使用不同的系數(shù) true_beta = [0.5; -0.3; 0.2]; % 真正的回歸系數(shù) p = 1 ./ (1 + exp(-X * true_beta)); % 計算響應變量的概率 y = rand(N, 1) < p; % 生成響應變量 % 使用 glmfit 進行邏輯回歸 % 指定響應變量分布為 'binomial' beta_hat = glmfit(X(:,2:3), y, 'binomial'); % 注意:這里我們排除了常數(shù)項列 % 輸出估計的回歸系數(shù) disp('Estimated coefficients:'); disp(beta_hat); % 計算預測的概率 p_hat = 1 ./ (1 + exp(-X * beta_hat)); % 注意:這里我們添加了常數(shù)項1 % 評估模型性能 % 例如,可以計算準確率、精確率、召回率等,但這里我們僅計算準確率作為示例 predicted_y = p_hat > 0.5; % 使用 0.5 作為閾值進行預測 accuracy = mean(predicted_y == y); disp(['Accuracy: ', num2str(accuracy)]);