Posts

Showing posts from February, 2021

Michaelis-Menten酵素動力學一般解:Lambert W function

Image
Michaelis-Menten速率積分式 在描述一個酵素催化反應的速率時最典型的方法就是使用Michaelis-Menten表達式 $$\frac{d[A]}{dt} =- \frac{V_{max}[A]}{[A]+K_{M}} $$ 其中在基質濃度$[A]$很大的時候A的消耗速率能達到最大值$V_{max}$ 而$K_{M}$則表達了要多高的濃度 $[A]$才可以達到最大消耗速率的一半 $\frac{V_{max}}{2}$ 在學習基本的化學動力學時我們都聽過零級,一級,以及二級反應 利用積分的方式我們可以得到 $[A]$隨著時間t消耗的關係式 這樣我們便能藉由動力學實驗配合積分速率式得到相應的速率常數 然而我們能夠用同樣的方式處理Michaelis-Menten速率式嗎? 答案是肯定的 首先我們需要將 $[A]$和時間項t分開至等號兩側並積分 $$\int_{[A]_{0}}^{[A]} 1+ \frac{K_{M}}{[A]} d[A] =  -\int_0^t V_{max}dt $$ 積分後整理可以得到  $$ln([A])+ \frac{[A]}{K_{M}} =ln([A]_{0})+ \frac{[A]_{0}-V_{max}t}{K_{M}} $$ 如果想得到 $[A](t)$的解析解 乍看之下難以辦到 我們這時需要引入 Lambert W function 的概念 Lambert W function (朗伯W函數) Lambert W function (或稱為Omega function)有以下的定義: $$y e^{y}=x \Longleftrightarrow y=W(x) $$ 注意在一般實數應用裡$x \geq  -\frac{1}{e} $函數才會有定義 這個特殊函數可以被來在解許多指數方程式 只要能夠化成 $ ye^{y}=x$  的形式 在原先的問題中為了得到指數項 只需要將非對數項用$z=ln( e^{z}) $表示即可 $$ln([A] e^{\frac{[A]}{K_{M}}}) =ln([A]_{0} e^{\frac{[A]_{0}-V_{max}t}{K_{M}}} ) $$ 將兩邊自然對數拿掉可得 $$[A] e^{\frac{[A]}{K_{M}}} =[A]_{0} e^{\frac{[A]_{0}-V

波士頓房價數據分析(2)

Image
傳統線性迴歸的問題 我在上一篇簡介如何使用線性迴歸來分析波士頓房價數據 線性迴歸會遇到的一個問題是拿來建模型所考慮的各種因素不一定都會對想預測的東西有貢獻 比方說如果想預測今天有多少人會來教室不翹課 學生的身高可能就不是一個很好的考慮因素 如果這時候把這種因素也考慮進來 在傳統線性迴歸的模型(Ax = b)中A矩陣就會是一個"ill-conditioned"的矩陣 在找尋係數x向量的時候任何b的不準都會因為A在取pseudo-inverse時被放大 若使用這種模型做預測 準確性會大大下降 完全體現“簡單或許比複雜還好”的“ 奧坎剃刀 ”法則 LASSO:增強版線性迴歸 我們的目標是能夠讓 係數x向量中越多0越好 如此一來不重要的因素就不會影響預測了 其實早在90年代末期Robert Tibshirani發明了Least absolute shrinkage and selection operator ( LASSO )便解決了傳統線性迴歸的缺陷 傳統線性迴歸不過是找尋以下的解 $$argmin_{x}  \| \mathbf{Ax-b} \|_{2} $$ 其中  $$\|\mathbf{x}\|_{2}= (\frac{1}{n}  \sum_{i=1}^n   |  x_{i}  | ^{2} ) ^{ \frac{1}{2} }$$ LASSO在以上的最佳化過程中加入了一個 $l_{1}$ norm的項(就是絕對值的意思) $$argmin_{x}  \| \mathbf{Ax-b} \|_{2} +  \lambda  \| \mathbf{x} \|_{1}$$ 其中  $$\| \mathbf{x} \|_{1}= \frac{1}{n}  \sum_{i=1}^n   |  x_{i}  |$$ 這個絕對值項 非常特別因為它可以使最後x向量變得稀疏(有很多0出現) 而且有不易被極端值影響的特性 MATLAB實作 在MATLAB裡面程式碼非常直接 由於 $ \lambda $是一個需要調整的參數 lasso函數會嘗試不同的$\lambda$值並將所有迴歸的結果儲存起來 甚至也可以使用交互確認(cross-validation)來增強模型預測的準確性 下圖即顯示不同$\lambda$對誤差MSE的影響 % LASSO [x_las

波士頓房價數據分析 (1)

Image
數據描述 作為一個剛接觸數據科學的化工學生 本篇算是一個學習過程的小練習 我會提到如何使用MATLAB作簡單的 線性迴歸分析 以及如何將高維度的數據“降維”以直觀解釋數據的內在結構 我使用現在機器學習領域很熱門的經典 波士頓房價數據(Boston housing dataset) 集做分析 這個數據集的用意是統計各種環境以及人為因素對房價的影響 總共有例如房間數,房屋稅率等總共13項影響 房價中位數(MEDV) 的因素 CRIM :每人平均犯罪率 ZN :居住區中高於25000平方英尺的停車場所佔土地比例 INDUS :非零售企業佔地英畝數 CHAS :查爾斯河亞變數(1代表包圍河,0代表沒有) NOX :氧化氮濃度(單位為千萬分之一) RM :平均房間數 AGE : 1940年前建造之房東自用比例(屋齡) DIS :到五個波士頓工作中心的加權平均距離(上班通勤難易度) RAD :到達放射狀高速公路的難易程度(城內移動的難易度) TAX :房屋稅 PTRATIO :學生與教師比例(學區好壞) B :與黑人占比呈正相關的數字(種族因素) LSTAT :低端人口比例 MEDV :房價中位數 線性迴歸分析 在數據分析之前往往都要考慮拿到的數據集有沒有缺項或混亂的狀況 但是這套數據很完善故可跳過整理的步驟 如果我們想建立一個可以預測房價的數學模型 最簡單的就是線性迴歸了 如果我們將所有因素影響力以矩陣A表示並將房價以向量b表示 我們只需要找到關係式 Ax = b 中的係數矩陣x 在MATLAB中x可以透過簡單的 regress函數 達成 然而為了避免關係式中出現“非零截距” 可以在A矩陣的最後一列(column)後面加上所有元素為1的列 %% Import the Boston housing dataset close all;clc;clear all; Data = readtable('Boston.csv'); % The median value of owner-occupied homes b = table2array(Data(:,14)); % Other variables A = table2array(Data(:,1:13)); A = [A ones(size(A,1),1)]; 一般來說機器學習(其實粗略來說就是某種迴歸