# Introduction
邏輯回歸(Logistic Regression)由線性迴歸變化而來的,它是一種分類的模型。其目標是要找出一條直線能夠將所有數據清楚地分開並做分類,我們又可以稱迴歸的線性分類器。
## 線性回歸:
假設有d個維度的資料, $\beta_i$是回歸係數
$y_i = \beta_0 + \beta_1+ \dots +\beta_dx_d = \begin{bmatrix} \beta_0\\ \beta_1 \\ \vdots \\ \beta_d \end{bmatrix}^\top\begin{bmatrix} 1 \\ x_1 \\ \vdots \\ x_d \end{bmatrix} =\beta^\top x_i$
## logistic(sigmoid) function
Logistic Regression 名字的由來是因為用到 logistic函數(sigmoid)表達式如下
$$h_\theta(x) = {1 \over 1 + e^{\theta^{\top}x} }$$

> 維基百科
稍後會再繼續介紹為何是使用sigmoid function來映射
## posterior probability
給定樣本$x$下,判給$w_i$這個類別的機率(條件機率)
$p(w_i|x)= {p(w_i)p(x|w_i) \over p(x)}$
- $p(x|w_i)$ likelihood function(給定樣本$w_i$的資料下,$x$屬於$w_i$這個類別的機率)
- $p(w_i)$ prior prabability
- $p(x)$ probability of data
## linear vs logistic
從圖上來看,線性回歸跟羅吉斯回歸公式是一樣的

| | linear | logistic|
| -------- | -------- | -------- |
| Response Variable| 連續| 連續 / 離散|
| core concept |預測一個連續的值 | 分類 |
| equation used | 單純將 $feature*w+b$,output 可以是任何值 | 有通過 $sigmoid function$,output 的值介於 0~1 |
| 分佈 |高斯分佈 | bernoulli |
| Method Used to Fit Equation |OLS |MLE |
| ontput |continouos values | probability values |
linear 加上一個 sigmoid 即變成 logistic
## 總結
邏輯迴歸是一個最基本的二元線性分類器。首先假设我们有两个class:C1 和 C2,并且给出一个sample x,目標是求屬於C1 的機率是多少。
所以我們要找一個機率 (posterior probability) 當機率 $P(C1|x)$ 大於 0.5 時則輸出預測 Class 1,反之機率小於 0.5 則輸出 Class 2。如果我們假設資料是 Gaussian 機率分佈,我們可以說這個 posterior probability 就是 $\sigma(z)$。
其中 z=w*x+b,x 為輸入特徵,而 w 與 b 分別為權重(weight)與偏權值(bias) 他們是透過訓練得到的一組參數。

Input $x_1$ 到 $x_d$ 分別乘上 weight $w_1$ 到 $w_d$ (內積),再加上 bias, $b$,即為 $z$

- 偏誤(Bias)測量預測正確值的偏離,在於描述不是由隨機性所產生的系統誤差
# Why sigmoid?
Sigmoid 的輸出介於0~1,可以視為一種機率分布。具有非線性、連續可微分、單調,並具有固定的輸出範圍。那為什麼不用其他連續可微的函數?因為logistic regression 假設應變量服從 bernoulli distribution
## 推導
### Exponential Family
Exponential Family of Distributions:$p(x;\theta) = h(x) e^{\theta^{\top}T(x)−A(\theta)}$
where:
- h : $R \to R$ is a function that depends only on x;
- $\theta$ is vector of parameters;
- $T(X)$ vector of sufficient statistic
- $A(\theta)$ cumulant generating function
:::info
logistic regression 主要是做二分類問題,這時候羅吉斯回歸的輸出有兩個,所以跟Bernoulli distribution的pmf一樣
Bernoulli:$f(x) = p^x(1-p)^{1-x}$
:::
Since Bernoulli is in exponential family
$p(x;\theta) = h(x) e^{\theta^{\top}T(x)−A(\theta)}$
A Bernoulli random variable X assigns probability measure $\pi$ to the point x = 1 and probability measure $1 − \pi$ to x = 0.
$p(x;\pi) = \pi^x(1−\pi)^{1−x}$
= $exp({log(\pi^x(1−\pi)^{1−x})})$
= $exp{(log{\pi \over 1−\pi}x + log{(1−x)})}$
Thus we see that the Bernoulli distribution is an exponential family distribution with
$e^{\theta} = {\pi \over (1 − \pi)}$
T(x) = x (T(x) is sufficient)
$A(\theta) = − log(1 − \pi)$
h(x) = 1
Note moreover that the relationship between $theta$ and $\pi$ is invertible. So we have:
$\pi = {1 \over 1+e^{-\theta}}$ which is the link function:鏈接函數連接的是線性預測方程和其期待值 (均值) 之間的關係
- sufficient stastic $P(\{X_i\}|T=t;\theta)=P(\{X_i\}|T=t)$即在給定$T(X)=t$的情況下,$\{x_i\}$的條件聯合分佈與未知參數$\theta$ 無關
# Information entropy
## Information
「訊息」是用來表達某事件之各種可能結果可能性大小。當事件越明確時,關於此事件所能訊息量越小。而當事件越模糊(機率接近0.5或1/n,均勻分配)時,提供一件可供判斷的參考就含有較多的訊息。
訊息的多寡跟機率很有關係。對一個機率很小的事件所作的觀察、敘述,可以提供越多的訊息。所以:事件的訊息量是該事件機率的函數。
用科學公式性的方法去量化一段文字有多少資訊的想法,最早是由哈萊特(RVL Hartley)在1928年首先提出。消息數的對數(log)定義為訊息量(information gain)。若信源有m種消息,且每個消息是以相等的可能性產生的,該信源的訊息量可表示如下:$$I = \log_2 m$$
在日常生活中,極少發生的事情一旦發生了,才是容易引起大家關注的,而司空見慣的事件反而較不會引起注意。也就是說,極少見的事件一旦發生了所帶來的訊息量大。用統計的術語來描述,就是出現機率小的事件訊息量大,因此事件出現的機率越小訊息量越大。即訊息量多少與事件發生機率大小恰好相反,於是可以定義一公式如下:
$$H(X_i) = -\log_2 p$$
- 另外從數學上可以發現,為何這個公式前面要帶一個負號?因為P為0~1範圍的機率值,而對這個引數的值取log皆為負數
# entropy
「熵」是熱力學的概念,由德國物理學家克勞修斯(Rudolf Clausius)在1864年提出。「熵」的被用來度量一個混亂、不確定系統,其混亂或不確定的程度。熵是對某個系統之不確定性或混亂程度的度量方法
- $\Delta S = \int_i^f {dQ \over T}$
## informaton entropy
資訊熵用白話來描述可為資訊雜亂程度的量化描述,直接寫出公式如下:
$$H(\alpha) = -\sum_i^n P(x_i)log_2 P(x_i)$$
x可當成一個向量,就是若干個xi產生的機率乘以該可能性的訊息量,然後各項作加總。
當機率越平均時,也就是個事件機率越均勻(意謂:越無法預測,也越模糊),「不確定性」(uncertainty)最高,訊息熵最大。所以一條資訊的信息量大小和它的不確定性有直接的關係。
- 資訊越確定,越單一,資訊熵越小
- 資訊越不確定,越混亂,資訊熵越大
### cross entropy
Cross entropy 可在ML中作為 loss function,p 表示真實標記的分佈,q 則為訓練後的模型的預測標記分佈。交叉熵損失函數可以衡量 p 與 q 的相似性,公式為$$H(p,q) = -\sum_i p(i)log_2 q(x_i)$$
# cost(loss) function
機器學習大部分的算法都有希望最大化 / 最小化一個函數 / 指標,這個函數被稱為「目標函數(Object function)」不同的演算法用到的假設都不太一樣,所以目標函數都不一樣(基本上都是「損失函數(loss function)」)。損失函數基本上可以分成兩個面向(分類和回歸),基本上都是希望最小化損失函數。
預測出來的東西基本上跟實際值都會有落差,這個落差在統計上稱為「殘差(residual)」loss/residual越小越好(最小化),這樣代表的就是模型好。
## 回歸: MSE 和 MAE
線性回歸是預測一個數字,所以我們會希望這個預測值和目標值越接近越好,所以可以利用最小化平均絕對誤差(Mean Absolute Error, MAE)或是平均平方誤差(Mean Square Error, MSE)來求解。
### MSE
最常被用在回歸上的損失函數就是MSE
假設有m筆資料
$MSE = {1 \over m} \sum_{i=1}^m (y_i - \hat y_i)^2$
- $\hat y_i$預估值
### MAE
$MAE = {1 \over m} \sum_{i=1}^m |y_i - \hat y_i|$
如果用MSE來推估模型時,因為模型在學習基本上目的就是要消除(最小化)residual,所以一定先拿residual最大的開刀,因此Outlier的權重基本上會比其他的大,所以參數在更新(深度學習)會往Outlier誤差的方向去更新,更容易造成模型performance變差。
但MAE在梯度學習部分存在一個問題,更新參數時,MAE的梯度始終相同,所以當loss很小的時候,梯度一樣很大,這樣在學習時,容易在快學習到最佳解時,更新的解進不到最佳的地方。
### 小結
MAE對outlier比較有用,但因為微分不連續(剛剛的例子在x=0時,MAE函數就不可以微分),因此可能在執行時容易出錯,MSE對outlier較敏感,但在求解時,比較容易找到穩定的解。
## 分類
但在分類的問題中,我們不會直接拿分類錯誤率當作損失函數進行最佳化,因為
1. 單看錯誤率比較不出此兩模型的差異
2. 後續模型學習時,比較難得到較好的學習方向,因為用錯誤率得到只知道此筆資料判別錯誤,但模型不會知道現在的模型錯的很多還是很少,這樣模型在學習時根本不知道最佳的模型在那的方向,也不知道要更新多少。
所以,在logistic regression最常用的cost function 是 cross-entropy,cross-entropy越小,代表模型越好。
$J(\theta) = -{1 \over m} \sum_{i=1}^m (y^{(i)}logh_\theta(x^{(i)})+1-y^{(i)}log(1-h_\theta(x^{(i)}))$
- $h_\theta(x)$:用参数$\theta$和x預測出来的y值
### 推導
#### pmf
$\begin{eqnarray}p(x)=
\begin{cases}
h_\theta(x) & if y=1 \\
1-h_\theta(x) & if y=0 \\
\end{cases}
\end{eqnarray}$,where $h_\theta(x) = {1 \over 1 + e^{\theta^{\top}x} }$
$=>p(y|x;\theta) = (h_\theta(x))^y(1-h_\theta(x))^{1-y}$
#### likelihood function
$L(\theta) = \prod_{i=1}^n h_\theta(x_i)^{y_i}(1-h_\theta(x_i))^{1-y_i}$
#### logloss
$\ell (\theta)= -\log L(\theta) = -\log (\prod_{i=1}^n h_\theta(x_i)^{y_i}(1-h_\theta(x_i))^{1-y_i})$
$=-\sum_{i=1}^n \log ( h_\theta(x_i)^{y_i}(1-h_\theta(x_i))^{1-y_i})$
$=-\sum_{i=1}^n ( {y_i}\log ({h_\theta(x_i) \over 1-h_\theta(x_i)})+ \log (1-h_\theta(x_i)))$
#### cross-entropy
$p \in \{y,1-y\}, q \in \{h_\theta(x),1-h_\theta(x)\}$
$H(p,q)=-\sum_i^n p_ilog_2 q_i$
$=-\sum_{i=1}^n (y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))$
所以邏輯回歸的cost function 就是 cross-entropy
#### 對應及簡化
$h_\theta(x) = \sigma (f(x)) = {1 \over 1 + e^{\theta^{\top}x} }$
$\log ({h_\theta(x) \over 1-h_\theta(x)}) = \theta^{\top}x$
$(1-h_\theta(x)) = \log (1+exp\{\theta^{\top}x\})$
$\ell (\theta)= \sum_{i=1}^n (\log(1+exp\{\theta^{\top}x_i\})-y_i\theta^{\top}x_i)$
#### cost function
$Cost(h_\theta,y)=\begin{eqnarray}
\begin{cases}
-log(h_\theta(x)) & if y=1 \\
-log(1-h_\theta(x)) & if y=0 \\
\end{cases}
\end{eqnarray}$

通過取平均值來形成與上面相同的成本函數:
$J(\theta) = {1 \over n} \sum_{i=1}^n Cost(h_\theta,y)= -{1 \over n} \sum_{i=1}^n (y_ilog(h_\theta(x_i))+(1-y_i)log(1-h_\theta(x_i))$
接下來就是用MLE和Gradient Descent找出最小的找出最小的cross function
# Find the best function
# MLE
找到其中一種分布參數($\theta$),在此參數下,各個樣本的機率乘積最大,經過偏微分,可以找最大值
${\partial \ell (\theta) \over \partial \theta} = {\partial \sum_{i=1}^n (\log(1+exp\{\theta^{\top}x_i\})-y_i\theta^{\top}x_i) \over \partial \theta}$
$=\sum_{i=1}^n \{h_\theta(x_i)x_i - y_ix_i\}$
$=\sum_{i=1}^n \{h_\theta(x_i) - y_i\}x_i$
# Gradient Descent

- $p_{n+1} = p_n - \alpha \nabla f(p_n)$
所以寫成梯度求解如下:
$w_{i+1} \gets w_i - \alpha {\partial \ell (\theta) \over \partial \theta} = w_{i} + \alpha \sum_{i=1}^n \{h_\theta(x_i) - y_i\}x_i$
- $\alpha$ 為 learning rate 步長
# 程式實作
## 邏輯迴歸 (分類器)
### 參數設定
[](https://)https://www.3chy2.com.tw/3c資訊/通俗地說邏輯回歸【logistic-regression】算法(二)sklearn邏輯回歸/
```javascript
X=
y=
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=, random_state=)
```
```javascript
from sklearn.linear_model import LogisticRegression
# 建立Logistic模型
logisticModel = LogisticRegression(random_state=)
# 使用訓練資料訓練模型
logisticModel.fit(X_train, y_train)
# 使用訓練資料預測分類
predicted = logisticModel.predict(X_train)
```
```javascript
# 預測成功的比例
print('訓練集: ',logisticModel.score(X_train,y_train))
print('測試集: ',logisticModel.score(X_test,y_test))
```
# learning rate
一般大家都依照經驗去設置初始learning rate,0.01-0.001,但這也沒有一定哪個比較好。
learning rate設置過小時,會導致模型學習收斂較慢,且容易過擬合。而設置過大時,會容易導致模型學習過快,無法收斂,容易震盪甚至發散。如下圖。

# overfitting
## regularization
overfitting 是機器學習常見的一種現象,指的一個模型在對「訓練數據集」時有很好的效能,但是面對「測試數據集」時,卻效能不佳。如果該模型有overfittin現象,也代表著有高 variance 其產生的原因可能是使用「過多的特徵」,而相反的underfitting則代表有著高 bias,其模型在訓練樣本時無法訓練出適合的模式,而在面對「未知的數據」時,通常也不會有好的效能。
透過正規化,來調整模型的複雜度。防止overfitting的觀念是不要無條件的求得最低 error,犧牲一點精準度來換取一個更泛化的模型,給這些權重解加一點條件,常用的方式為L1 and L2
#### L2 Penalty
${\lambda \over 2}|w|^2 = {\lambda \over 2} \sum_{i=1}^n w_j^2$
削弱所有權重(但仍保留),讓所有權重與神經元都處於活動狀態。
#### L1 Penalty
${\lambda \over 2}|w| = {\lambda \over 2} \sum_{i=1}^n| w_j|$
將沒有用的權重設為0,留下模型認為重要的權重。
- λ稱之為正規化參數(regularization parameter)
要運用正規化,只需要將正規項加入成本函數,用它來縮小邏輯斯迴歸的加權,如下:
$J(\theta) = {1 \over n} \sum_{i=1}^n Cost(h_\theta,y) + bias= -{1 \over n} \sum_{i=1}^n (y_ilog(h_\theta(x_i))+(1-y_i)log(1-h_\theta(x_i)) + {\lambda \over 2}|w|^2$
藉由正規化參數(regularization parameter)λ,我們可以讓加權保持很小。

[](https://)https://ithelp.ithome.com.tw/articles/10219648
## K-fold Cross-Validation
用於評估機器學習模型並驗證模型對獨立測試數據集的泛化能力(適應性)。
將其中 K-1 份的資料當作訓練集,剩下來的那份做為驗證集

## Feature Transformation
將原來的 $x_1, x_2$ 做一些轉化後,找到一個較好的 feature space,轉化成 $x_{1}^{'},x_{2}^{'}$ 讓 Logistic Regression 可以處理
舉例
# 驗證指標 validation index
怎麼評估我們訓練出來的模型,成效(performance)好不好,依據應用分為「分類指標」和「回歸指標」。
「分類」: 二元相關(二元混淆矩陣和相對應驗證指標、ROC曲線、AUC)和多元相關(多元混淆矩陣和相對應驗證指標)。
## Confusion Matrix

### Accuracy
整體模型表現裡正確分類的比例是多少
(Accuracy) = (TP+TN)/(TP+FP+FN+TN)
- 例如: 某類數量佔很多的時候,直接把該類分到一邊,準確度就會大幅提高,但其實根本沒分到類,最常見的例子就是信用卡盜刷
### Precision
所有被預測為正確的樣本中,有多少比例是實際正確的。
(Precision) = TP/(TP+FP)
### Recall
所有實際正確的樣本中,有多少比例是被預測為正確的。
(Recall) = TP/(TP+FN)
### F1-Score
綜合考量precision與recall
(f1-score) = $2 \over {1\over percision}+{1\over recall}$
## ROC
TPR(Sensitivity) = TP/(TP+FN),等同recall
FPR(Specificity) = FP/(FP+TN)

## 多分類模型
避免當單一類別的數量超大的時候,直接把分類的結果分為該類就會達到很高的正確率。
$k = {{p_0-p_c} \over {1-p_c}}$
$p_0$對角線元素相加。
$p_c$把每類別做加總。(實際第i類別的總和乘上預測第i類別的總和)
- Kappa的值介於-1~1之間,值正的愈大,模型愈好。
# reference
[](https[://)https://dysonma.github.io/2021/01/27/機器學習-正規化-Regularization/
[](https://)https://ithelp.ithome.com.tw/articles/10219648
[](https://)https://allen108108.github.io/blog/2019/10/22/L1%20,%20L2%20Regularization%20到底正則化了什麼%20_/
[](https://)https://towardsdatascience.com/logistic-regression-detailed-overview-46c4da4303bc
https://dataaspirant.com/how-logistic-regression-model-works/
https://researcher20.com/2010/06/02/解讀-logistic-regression/
https://wenwu53.com/r-logistic-regression/
https://zhuanlan.zhihu.com/p/28408516
https://zhuanlan.zhihu.com/p/28415991
https://medium.com/@ken90242/machine-learning%E5%AD%B8%E7%BF%92%E6%97%A5%E8%A8%98-coursera%E7%AF%87-week-3-2-cost-2e7aa00e8c4a
https://smallcollation.blogspot.com/2013/08/linear-regression.html#gsc.tab=0
https://medium.com/@ken90242/machine-learning%E5%AD%B8%E7%BF%92%E6%97%A5%E8%A8%98-coursera%E7%AF%87-week-3-2-cost-2e7aa00e8c4a
https://arbu00.blogspot.com/2018/01/10.html
https://zhuanlan.zhihu.com/p/108641430
https://blog.csdn.net/qq_35719435/article/details/104432265
https://ycc.idv.tw/ml-course-foundations_4.html
{"title":"Logistic Regression","description":"邏輯回歸(Logistic Regression)由線性迴歸變化而來的,它是一種分類的模型。其目標是要找出一條直線能夠將所有數據清楚地分開並做分類,我們又可以稱迴歸的線性分類器。","contributors":"[{\"id\":\"4c5fdf00-3f3d-42e5-aaf3-b4223e696805\",\"add\":18117,\"del\":6390}]"}