---
# System prepended metadata

title: 機器學習筆記-1

---

# 機器學習筆記-1

> <零基礎入門的機器學習圖鑑>
[ALL 範例程式碼](https://www.shoeisha.co.jp/book/download/9784798155654)

:star2: **參數**：模型根據數據自動學習出的變量

:star2: **超參數**：用來確定模型的一些參數，超參數不同，模型不同，一般根據經驗給定

## 1.監督式學習(Supervised Learning)

|演算法名稱|分類|回歸|
|--------|---|---|
|線性迴歸   |:x:|:o:|
|多項式迴歸  |:x:|:o:|
|正則化     |:x:|:o:|
|羅吉斯迴歸 |:o:|:x:|
|支持向量機 |:o:|:o:|
|支持向量機(Kernel法)|:o:|:o:|
|單純貝式分類器 |:o:|:x:|
|LDA (**應為監督式**)|:o:|:x:|
|隨機森林      |:o:|:o:|
|類神經網路    |:o:|:o:|
|KNN         |:o:|:o:|

>[HackMD 使用教學](https://hackmd.io/c/tutorials-tw/%2Fs%2Ftutorials-tw)
[快速打出 Emoji](https://github.com/ikatyang/emoji-cheat-sheet)

### 1. 線性迴歸

>[LinearRegression with scikit learn](https://github.com/niancigao/python_class_notes/blob/main/LinearRegression-2022with-scikit-learn.ipynb)
>[LinearRegression from scratch](https://github.com/niancigao/python_class_notes/blob/main/LinearRegression-2022from-scratch.ipynb)
>[Regression **(R)**](https://github.com/niancigao/R-_-/tree/main/unit10_Regression)

:pushpin: 應先進行資料視覺化，看資料是否 
+ 偏曲線 :arrow_right: 使用多項式迴歸
+ 出現離群值 :arrow_right: 預處理排除、採其他較不易受離群值影響方法

### 補充 Generlize linear regression

#### Poisson Regression

情況 : 目標沒明確定義且為非負整數，如，預測每小時單車租借數量

分類(Logistic) : 明確分類
連續(Regression) : 有正有負

**On the Bikeshare Data**

假如以線性回歸預測會發現為**異質變異數、有負值** !
mean 大 $\to$ Var 大，取 Log 校正 $\to$ **1.** 如何解釋 ? **2.** 沒 0 狀況，資料不能用

:biohazard_sign: 有時候你覺得顯著的變數不顯著可能是模型假設錯or不好

[Poisson Regression (PPT p.50)](https://phonchi.github.io/nsysu-math524//static_files/presentations/04_Classification.pdf)

$Poisson :$
$$Pr(Y=k) = \frac{e^{-\lambda}\lambda^k}{k !}，k = 0,1,2,...$$

$\lambda > 0，\lambda=E(Y)=Var(Y)$

==Model==

For the mean $\;\;\lambda = E(Y|X)$

$Y|X = Poisson(\lambda)$

:pushpin: 估計 $\lambda$ 避免負數出現 : 取 Log，**$\eta=\log(\mu) : link\;function$**

$log(\lambda(X_1,...,X_p)) = \beta_0+\beta_1X_1+...+\beta_pX_p$

:pushpin: MLE 求 $\beta_0,\beta_1,...\beta_p$ 但沒 closed form

$l(\beta_0,\beta_1,...\beta_p) = \prod^n_{i=1}\frac{e^{-\lambda(x_i)}\lambda(x_i)^{y_i}}{y_i !}$

[Poisson Regression](https://dafriedman97.github.io/mlbook/content/c2/s1/GLMs.html#example-poisson-regression)

==Generalized Linear Models (GLM)==

:low_brightness: 通常假設 exponential family (因為理論、運算接近)，如 : Poisson、高斯、Bernoulli 等

**原始 :**

$E(Y|X_1...X_p) = \beta_0+\beta_1X_1+...+\beta_pX_p$

最直接就線性，但不一定符合參數假設、範圍

:pushpin: **$link\;function = \eta()$** : 讓參數符合假設、範圍

$\eta(E(Y|X_1...X_p)) = \beta_0+\beta_1X_1+...+\beta_pX_p$

:::info
==Model (**都是估 Mean**)==

1. **高斯** : Linear Regression，$\eta(\mu)=\mu，估\;N(\mu,\sigma^2)$
$E(Y|X_1...X_p) = \beta_0+\beta_1X_1+...+\beta_pX_p$
2. **Bernoulli** : Logistic Regression，$\eta(\mu)=\log(\frac{\mu}{1-\mu})，估\;0\le P(x) \le 1$
$E(Y|X_1...X_p) = \frac{e^{\beta_0+\beta_1X_1+...+\beta_pX_p}}{1\;+\;e^{\beta_0+\beta_1X_1+...+\beta_pX_p}}$
3. **Poisson** : Poisson Regression，$\eta(\mu)=\log(\mu)，估\;\lambda>0$
$E(Y|X_1...X_p) = e^{\beta_0+\beta_1X_1+...+\beta_pX_p}$
:::

### 2. 多項式迴歸

>[PolynomialRegression with scikit learn](https://github.com/niancigao/python_class_notes/blob/main/PolynomialRegression-2022with-scikit-learn.ipynb)
>[PolynomialRegression from scratch](https://github.com/niancigao/python_class_notes/blob/main/PolynomialRegression-2022Qfrom-scratch.ipynb)

:pushpin: 簡單迴歸 : $y=W_0\;+W_1\;x_1$
:pushpin: 複(多元)迴歸 : $y=W_0\;+W_1\;x_1\;+W_2\;x_2$
:pushpin: 多項式迴歸 : $y=W_0\;+W_1\;x_1\;+W_2\;x_1^2$

### 3. 正則化(Regularization)

+ 防止過擬合的方法之一，常與線性迴歸等演算法併用。
+ 在損失函數加上懲罰項,便能制約模型, 提升其一般化能力(Generalization Ability)。

>[Power Averaging & 標準化/歸一化 & L1/L2](https://github.com/niancigao/Kaggle_Tabular-Playground-Series---Sep-2021/blob/main/kaggle.5.ipynb)

:::success
**脊迴歸 (Ridge Regression、L2)**
:::
$$R(w)=\sum_{i=1}^{n}\;\;[\;y_i-(w_0 + w_1 x_i + w_2 x_i^2)\;]^2 +\;a(w_1^2 + w_2^2)$$

第 1 項 $\sum_{i=1}^{n}\;\;[\;y_i-(w_0 + w_1 x_i + w_2 x_i^2)\;]^2$ 為線性迴歸的損失函數

第 2 項 $\;a(w_1^2 + w_2^2)$ 則稱為懲罰項(或正則化項)，是模型參數的平方和

:pushpin: 截距一般不會包含在懲罰項裡

a( ≥ 0) 為控制正則化強度的參數

a 愈大，抑制就愈大 ; a 愈小，訓練資料就會愈完整反映在模型參數上

:low_brightness: 懲罰項利用 ==**當模型參數的絕對值變大，整體損失函數也會變大**== 來抑制模型參數

>[2-2 範例程式碼](https://www.shoeisha.co.jp/book/download/9784798155654)

```python=
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error

train_size = 20
test_size = 12

train_X = np.random.uniform(low=0, high=1.2, size=train_size)
test_X = np.random.uniform(low=0.1, high=1.3, size=test_size)
train_y = np.sin(train_X * 2 * np.pi) + np.random.normal(0, 0.2, train_size)
test_y = np.sin(test_X * 2 * np.pi) + np.random.normal(0, 0.2, test_size)

poly = PolynomialFeatures(6) # 次数は6
train_poly_X = poly.fit_transform(train_X.reshape(train_size, 1))
test_poly_X = poly.fit_transform(test_X.reshape(test_size, 1))

model = Ridge(alpha=1.0)     # a( ≥ 0) 控制正則化強度的(超)參數
model.fit(train_poly_X, train_y)
train_pred_y = model.predict(train_poly_X)
test_pred_y = model.predict(test_poly_X)

print(mean_squared_error(train_pred_y, train_y))
print(mean_squared_error(test_pred_y, test_y))

```
```
0.15407373868365992   # 原: 0.024
0.33814496857384646   # 原: 3.472
```

:::success
**脊迴歸 (L2) 與 Lasso 迴歸 (L1)**
:::
脊迴歸中，損失函數的懲罰項是模型參數的平方和，若將懲罰項改成其他形式，便能進行不同性質的正則化，較具代表性的正則化方法，除了脊迴歸，還包括 Lasso 迴歸

Lasso 迴歸的損失函數 :

$$R(w)=\sum_{i=1}^{n}\;\;[\;y_i-(w_0 + w_1 x_i + w_2 x_i^2)\;]^2 +\;a(|w_1| + |w_2|)$$

不同的地方，在於 Lasso 迴歸的懲罰項是模型參數絕對值的和

![](https://i.imgur.com/wUXqlGA.png)

```
藍色表損失函數(中心為優化前最佳解)，紅色表與懲罰項相關的函數，脊迴歸(左)；Lasso(右)
```
> [L1、L2正則化原理與L1正則化原理](https://roger010620.medium.com/l1-l2-regularization-%E5%8E%9F%E7%90%86-5beb1b68b955)

:pushpin: 黃色的部分是 L2 和 L1 正則項約束後的解空間

:pushpin: 多邊形的解空間更容易在尖角處與等高線碰撞出稀疏解

:star2: **稀疏解** : 說白了就是模型有很多參數是 0，相當於對模型進行了一次特徵選擇

原始函數(損失函數)和這些函數(懲罰項相關函數)相接的點，就是經過正則化之損失函數的最佳解，左圖中的脊迴歸因為加入了懲罰項，而使得模型參數受到抑制；而右圖的 Lasso 迴歸中，儘管模型參數與脊迴歸一樣受到抑制，但 w 的模型參數為 0

+ Lasso 迴歸計算的是與四角形函數相接的點，因此模型參數有較易變成 0 的特質
+ 故可以利用 Lasso 迴歸來選擇特徵，如此不但能提升一般化能力，更有助於解釋模型

:low_brightness: L1：有可能導致零權重，因刪除更多特徵而使模型稀疏

:low_brightness: L2：會對更大的權重值造成更大的影響，將使權重值保持較小

### 4. 羅吉斯迴歸
> [KFOLD範例 / Logistic regression / CART](https://github.com/niancigao/Kaggle_Tabular-Playground-Series---Sep-2021/blob/main/kaggle.3.ipynb)
[KNN、Logistic](https://github.com/niancigao/2021_python_getting-Started/blob/main/Untitled12(KNN%E3%80%81Logistic).ipynb)
[LogisticReg **(R)**](https://github.com/niancigao/R-_-/tree/main/unit11_LogisticReg)

:pushpin: 羅吉斯迴歸雖為二元分類演算法，但也可以運用於 3 種以上的多元分類問題

:pushpin: 透過計算出資料屬於各類別的機率，來進行分類

:star2: **Sigmoid 函數** : $\frac{1}{(1\;+\;exp(-f(x)))}$，讓輸出範圍限制在 0~1 之間

:pushpin: 各係數的正負號，得知其對機率產生的影響為正或負

:::success
**EX : 模型、係數與效果**
:::
模型：

$Pr[y = 1] = 1/(1+exp(-f(x)))$

$Logit = f（x） = b_0 + b_1 x_1 + b_2 x_2 \;\;(1)$

$Logit = f（x） = -2.6461 + 0.0821 \times OfficeVisits + 0.0763 \times Narcotics \;\;(2)$

係數：

$Odd_0 = Exp（b_0 + b_1 x_1）\;\;(3)$

$Odd_1 = Exp[b_0 + b_1（x_1+1）] = Exp（b_0 + b_1 x_1 + b_1） = Exp（b_0 + b_1 x_1） \times Exp（b_1） \;(4)$

$Odd_1 = Odd_0 \times Exp（b_1） \;\:(5)$

$\frac{Odd_1}{Odd_0} = Exp（b_1）\;\:(6)\;\;(勝率比)$

==係數的指數是 y = 1 的勝率增加的倍數==

![](https://i.imgur.com/UJYU9Lv.png)

更多細節來自這幾個 R 或 HTML 檔 :arrow_heading_down:
> [LogisticReg **(R)**](https://github.com/niancigao/R-_-/tree/main/unit11_LogisticReg)

![](https://i.imgur.com/4OL6kS1.png)

:pushpin: 利用梯度下降法找到適合的參數

:biohazard_sign: $L(\beta_0,\beta_1)$ 沒 close form 的解，MLE 背後分布為 Bernoulli(p(x))

:pushpin: 決策邊界為 **線性(分類)**

:biohazard_sign: 因為 $log(odd)=\beta_0+\beta_1x_1$ 為線性

:biohazard_sign: 當分類資料分很開(Well-separated)，斜率會趨近無窮(最佳化傾向)，無法收斂

> [邏輯回歸的損失函數怎麼理解？ (更多進階)](https://www.zhihu.com/question/272058718)

>[2-3 範例程式碼(資料不同結果不同)](https://www.shoeisha.co.jp/book/download/9784798155654)
```python=
import numpy as np
from sklearn.linear_model import LogisticRegression

X_train = np.r_[np.random.normal(3, 1, size=50), np.random.normal(-1, 1, size=50)].reshape((100, -1))
y_train = np.r_[np.ones(50), np.zeros(50)]
model = LogisticRegression()
model.fit(X_train, y_train)
model.predict_proba([[0], [1], [2]])[:, 1]

```
```
array([0.16900431, 0.65298748, 0.94568425])
```

### 5. (線性)支持向量機((L)SVM)

:low_brightness: 以間距最大化作為目標，學習與資料相距最遠之決策邊界

:star2: **間距** : 資料中最接近決策邊界的點與決策邊界之間的距離

:star2: **硬性間距(Hard-Margin)** : 不容許資料落在間距範圍內

:star2: **軟性間距(Soft-Margin)** : 容許一部分資料落在間距範圍內

![](https://i.imgur.com/R2kXVU5.png)

> [機器學習-支撐向量機(support vector machine, SVM)詳細推導](https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E6%94%AF%E6%92%90%E5%90%91%E9%87%8F%E6%A9%9F-support-vector-machine-svm-%E8%A9%B3%E7%B4%B0%E6%8E%A8%E5%B0%8E-c320098a3d2e)

:star2: **支持向量** : 位在間距邊緣上與間距內的資料

:pushpin: 決策邊界與羅吉斯迴歸一樣呈線性，但有時 SVM 可以得到更為「理想」的結果

:pushpin: 若採用軟體間距，即使是無法線性分割的資料，也可以進行學習

>[2-4 範例程式碼](https://www.shoeisha.co.jp/book/download/9784798155654)

```python=
# 使用線性支持向量機進行二元分類

from sklearn.svm import LinearSVC
from sklearn.datasets import make_blobs   # 生成數據集的
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# データ生成
centers = [(-1, -0.125), (0.5, 0.5)]
X, y = make_blobs(n_samples=50, n_features=2, centers=centers, cluster_std=0.3)

# data, label = make_blobs(n_features=2, n_samples=100, centers=3, cluster_std=[0.8, 2, 5])
# n_features 表示每一個樣本有多少特徵值
# n_samples 樣本的個數
# centers 聚類中心點的個數，可以理解為label的種類數
# cluster_std 每個類別的方差

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = LinearSVC() 
model.fit(X_train, y_train) # 学習
y_pred = model.predict(X_test) 
accuracy_score(y_pred, y_test) # 評価
```
```
1.0
```
可將訓練資料分為 3 種類型

1. 間距外的資料 : 資料與決策邊界之間的距離大於間距
2. 間距邊緣上的資料 : 資料與決策邊界之間的距離等於間距
3. 間距內的資料 : 資料距離決策邊界較近，或分類錯誤

:pushpin: 支持向量是決定決策邊界的重要資料，至於間距外的資料，則對決策邊界的形狀毫無影響

:pushpin: 硬性間距決策邊界易被離群值拉走 ; 軟性間距較不易受離群值影響

採用軟性間距時，要允許多少程度的資料落在間距內，會依超參數而定，與其他演算法相同，在決定超參數時，必須透過格點(Grid)搜尋或隨機(Random)搜尋等方法來嘗試錯誤

> [Grid SearchCV（網格搜尋）與RandomizedSearchCV （隨機搜尋）](https://tw511.com/a/01/8581.html)

:::success
**格點(Grid)搜尋 或 隨機(Random)搜尋**
:::

:star2: **格點(Grid)搜尋** : 

==啓發式搜尋方法、窮舉搜尋==，在所有候選的參數選擇中，通過回圈遍歷，嘗試每一種可能性，表現最好的參數就是最終的結果，主要缺點是比較耗時！

適用於三四個（或者更少）的超參數，使用者列出一個較小的超參數值域，這些超參數的笛卡爾積（排列組合）爲一組組超參數

:pushpin: 超參數的數量增長時，網格搜尋的計算複雜度會呈現**指數**增長，這時候使用隨機搜尋佳

:pushpin: 網格搜尋演算法使用每組超參數訓練模型並挑選驗證集誤差最小的超參數組合

EX : 對 rbf kernel SVM 進行訓練，超參數有 C 與 gamma，這兩個超參數有不同的 list，並一一組合進行訓練及評估，最終呼叫 GridSearchCV 的 best_params_ 獲得最好的超參數組合

:star2: **隨機(Random)搜尋** :

隨機在超參數空間中搜尋幾十幾百個點，其中就有可能有比較小的值，這種做法比網格做法快，而且實驗證明，隨機搜尋法結果比稀疏網格法稍好

RandomizedSearchCV 使用方法和 GridSearchCV 相似，但他不是嘗試所有可能的組合，而是通過選擇每一個超參數的一個隨機值的特定數量的隨機組合

EX : 如果隨機搜尋執行 1000 次，它會探索每個超參數的 1000 個不同的值

:pushpin: 可以方便的通過設定搜尋次數，控制超參數搜尋的計算量

### 6. 支持向量機(Kernel法)

線性支持向量機能夠藉由間距最大化，找出距離資料最遠的決策邊界，但由於決策邊界一定呈直線，因此不適合用於分類各標籤的界線呈現曲線的資料，而支持向量機只要使用 Kernel 法，便能學習複雜的決策邊界

:pushpin: 將 Kernel 法這種技巧運用在支持向量機，便可處理複雜的資料，無須透過人力決定特徵

:star2: **Kernel 法** : 將資料移動至其他特徵空間 (Feature Space) 後，再進行線性迴歸

首先假設有一個維度比訓練資料更高的空間存在，訓練資料的每一個點都各自對應到此高維度空間的某個點

在高維度空間中，對應到訓練資料的點是可以線性分割的，而實際的訓練資料則是來自此高維度空間的映射，只要能創造出這樣的空間，便能在此高維度空間裡使用支持向量機來學習決策邊界

最後再將高維度的決策邊界映射回由原始特徵構成的向量空間，便能求得決策邊界

![](https://i.imgur.com/DKwD49P.png)

>[人工智慧-SVM 支援向量機](https://www.796t.com/content/1546752198.html)

具體打造可線性分割的高維度空間有其難度，但在 Kernel 法中，利用Kernel 函數，便能使用在高維度空間學習完成的決策邊界，而不必具體構築一個可線性分割的高維度空間

>[2-5 範例程式碼](https://www.shoeisha.co.jp/book/download/9784798155654)
> [sklearn.datasets.make_gaussian_quantiles](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_gaussian_quantiles.html)

```python=
from sklearn.svm import SVC
from sklearn.datasets import make_gaussian_quantiles   
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# データ生成

X, y = make_gaussian_quantiles(n_features=2, n_classes=2, n_samples=300)
# 圓形分布的資料
# 通過採用多維標準正態分佈並定義由嵌套的同心多維球體分隔的類來構建

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

model = SVC()   
# 預設 : RBF (Radial Basis Function，徑向基底函數) Kernel

model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy_score(y_pred, y_test)
```
```
0.9666666666666667
```

:::success
**不同 Kernel 函數造成的學習結果差異** (針對同一份資料)
:::

四種最具代表性的 Kernel 函數 :

(a ) **線性 Kernel : 與線性支持向量機等價**
(b ) Sigmoid Kernel : 呈曲線的決策邊界
(c ) 多項式 Kernel : 圓形的決策邊界
(d ) RBF Kernel : 更複雜的決策邊界

![](https://i.imgur.com/cu0eock.png)

將 RBF Kernel 的超參數 $\gamma$ 設為 3.0 時的狀況 :arrow_heading_down:
將 $\gamma$ 值 提高，便能從資料中學習更複雜的決策邊界

![](https://i.imgur.com/XqpNUTi.png)

:pushpin: 一旦使用 Kernel 法，便無法明確掌握支持向量機使用的特徵為何

:pushpin: Kernel 法較適合要求精準的狀況，而非用於解釋特徵

:pushpin: 並非所有資料都能學習出清楚易懂的決策邊界

:pushpin: 使用支持向量機時，應避免一開始就使用 Kernel 函數

:low_brightness: 應先使用線性 Kernel 進行分析，掌握資料的概況後，再使用 Kernel 函數進行學習

### 7. 單純貝式分類器

:pushpin: 基於機率的分類器，並假設各個特徵間相互獨立

:biohazard_sign: 一般估計 $f_k(x)$ 的 covariate mtx 要 $\frac{p(p+1)}{2}$ 個參數 (上三角加對角線)

:biohazard_sign: QDA 估計 $f_k(x)$ 的 covariate mtx 要 $K\times\frac{p(p+1)}{2}$ 個參數 (上三角加對角線乘類別) 

:biohazard_sign: $X_j|Y=k\sim N(\mu_{kj},\sigma_{kj}^2)$ 或利用直方圖，因為獨立，所以不用考慮 $f_k(x)$ 的 covariate mtx

:low_brightness: 不用估 covariate mtx ，直接對每一個變數做 modeling

:low_brightness: EX:直方圖、高斯、kernel distribution 等等

得到後驗機率 :
$$Pr(Y=k|X=x)=\frac{\pi_k\times f_{k1}(x_1)\times f_{k2}(x_2)\times ...\times f_{kp}(x_p)}{\sum^k_{l=1}\pi_l\times f_{l1}(x_1)\times f_{l2}(x_2)\times ...\times f_{lp}(x_p)}$$

:::success
**貝氏定理**
:::
在一些已知的條件下，某件事情發生的機率
$$P(A|B)\;=\;\frac{P(B|A)P(A)}{P(B)}$$

:star2: **事前機率** : 事件發生前，我們對事件會有一個基本的機率判斷，$P(A)、P(B)$

:star2: **事後機率** : 事件發生後，我們會對另一事件發生的機率，重新評估，$P(A|B)、P(B|A)$

>[貝氏分類器 Bayesian Classifier](https://pyecontech.com/2020/02/27/bayesian_classifier/)

:low_brightness: 目標 : 找到給定資料後事件發生機率最高的假設， $Max\; P(假設|資料)$

:pushpin: 模型中假設所有的特徵都是獨立的

 
目標 : 
$$Max\;P(y_i|X_i)\:裡的\:y_i，令\:y^*= y_i\;為最終判定結果$$ 
$$X_i=<x_1,x_2,x_3,...,x_n> 為各個特徵$$ $$y_i\:代表所有結果中的其中一種$$

+ 

+ 

![](https://i.imgur.com/puAxq9E.png)

![](https://i.imgur.com/hfQOb38.png)

### 8. LDA (**為監督式**)

:::warning
LDA 應被歸類為**監督式**學習
:::
:pushpin: 降維，最大化(保留)各個群(分類)中心點的(馬氏)距離 (v.s. PCA)

:biohazard_sign: 可解決 Logistic 分類資料 well-separated 的問題

:biohazard_sign: 高斯分布假設、closed form 解 : $\delta_k(x)$

:biohazard_sign: 處理多個變數的關係、線性分類(因為 $\delta_k(x)$)

:biohazard_sign: 可降維:維數災難、變數挑選丟掉雜訊、增加速度

==模型，when$\;p=1$==

高斯分布 :  
$$f(x)=\frac{1}{\sqrt{2\pi}\sigma_k} e^{\frac{-1}{2}(\frac{x-\mu}{\sigma_k})^2}$$

:pushpin: all $\sigma_k=\sigma$ are the same (QDA 則是 $N_k(\mu_k,\sigma_k^2)$)

:biohazard_sign: QDA 會得到 quadratic(二次) 邊界

:biohazard_sign: 如果加上，每個 class 裡，features 都是 independent 的話，f(x) 高斯分布，等價 Naive Bayes

[統計學習_分類3，25分](https://www.youtube.com/watch?v=S4YG97EZunY&list=PLHNZtBNWQ-87uOhT09zEO-wQkUMrI-YaQ&index=3)
[PPT，P33](https://phonchi.github.io/nsysu-math524//static_files/presentations/04_Classification.pdf)


:pushpin: By Bayes' formula，$p_k(x)=Pr(Y=k|X=x)$

$$p_k(x)=\frac{\pi_k\frac{1}{\sqrt{2\pi}\sigma} e^{\frac{-1}{2}(\frac{x-\mu_k}{\sigma})^2}}{\sum^k_{l=1}\pi_l\frac{1}{\sqrt{2\pi}\sigma} e^{\frac{-1}{2}(\frac{x-\mu_l}{\sigma})^2}}$$

[習題4.2有作化簡](https://botlnec.github.io/islp/)
得到 discriminant (判別) function
$$\delta_k(x)=x\times\frac{\mu_k}{\sigma^2}-\frac{\mu_k^2}{2\sigma^2}+log(\pi_k)$$

:pushpin: $\delta_k(x)$ is a linear fcn of x and ==$argmax_kp_k(x)=argmax_k\delta_k(x)$==

EX : 如果 K=2，$\pi_1=\pi_2=0.5$，(帶入)辦別界線將會得到
$$x=\frac{\mu_1+\mu_2}{2}$$

==估計==

先驗知識 $\hat\pi_k=\frac{n_k}{n}$ (屬於k類的點/總資料)

$\hat\mu_k=\frac{1}{n_k}\sum_{i:y_i=k}x_i$ (每類的算術平均)

$\hat\sigma^2=\frac{1}{n-K}\sum^K_{k=1}\sum_{i:y_i=k}(x_i-\hat\mu_k)^2=\sum^K_{k=1}\frac{n_k-1}{n-K}\hat\sigma_k^2$
(每類先做組內 var 再加總再除 n-K (unbiased)，可看作各組 $\sigma^2$ 的加權平均)

where $\hat\sigma_k^2=\frac{1}{n_k-1}\sum_{i:y_i=k}(x_i-\hat\mu_k)^2$

$\hat\delta_k(x)=x\times\frac{\hat\mu_k}{\hat\sigma^2}-\frac{\hat\mu_k^2}{2\hat\sigma^2}+log(\hat\pi_k)$

[Week4 P.21](https://phonchi.github.io/nsysu-math524//static_files/presentations/04_Classification.pdf)

:low_brightness: **分類準則** : 資料點跟各個質心間的馬氏(Mahalanobis)距離，加入先驗知識考量，給出最佳分類

==From $\delta_k(x)$ to probabilities==

$$\hat{Pr}(Y=k|X=x)=\frac{e^{\hat\delta_k(x)}}{\sum^K_{l=1}e^{\hat\delta_l(x)}}$$

:::info
LDA 跟 Fisher LDA 關係

[线性判别分析（LDA）与Fisher判别分析（FDA）降维原理](https://blog.csdn.net/weixin_44333889/article/details/119563997)
[統計學習_分類2，40分](https://www.youtube.com/watch?v=9kM31TpE3_s&list=PLHNZtBNWQ-87uOhT09zEO-wQkUMrI-YaQ&index=2)
[PPT，P25](https://phonchi.github.io/nsysu-math524//static_files/presentations/04_Classification.pdf)
::: 

:::danger
**LDA vs QDA vs Logistic & Naive Bayes**

取 log(odds)
1. LDA 跟 Logistic 都是線性的
2. QDA 多一個 x 的二次項
3. NB 則是 x 的 nonlinear fcn，像 Generalize aditive model
4. LDA 是 QDA 的一個特例
5. 只要有線性決策邊界的都可視為 NB 的特例
6. NB + 高斯 + 同質變異數 = LDA
7. QDA 放交互項；NB 放非線性/線性項，兩者不可互相涵蓋、包容

[PPT，P38-40](https://phonchi.github.io/nsysu-math524//static_files/presentations/04_Classification.pdf)

:::
### 9. 隨機森林
### 10. 類神經網路
### 11. KNN
:biohazard_sign: 在P=1時，KNN隨著K的調整，在線性或非線性皆擬合的不錯，幾乎優於簡單線性

:biohazard_sign: 但在P=4以上，就算背後是非線性，線性模型還是提供更好MSE、解釋等。



 











































## 2.非監督式學習(Un-supervised Learning)

|演算法名稱|降維|分群|
|--------|---|---|
|PCA     |:o:|:x:|
|LSA     |:o:|:x:|
|NMF     |:o:|:x:|
|k-means    |:x:|:o:|
|高斯混和分布 |:x:|:o:|
|LLE        |:o:|:x:|
|t-SNE      |:o:|:x:|

### 12. PCA
:pushpin: 降維，保留 data variacce 最大的方向 (v.s. LDA)


### 13. LSA
### 14. NMF

### 15. k-means 
### 16. 高斯混和分布
### 17. LLE
### 18. t-SNE
### 19. 正則化(Regularization)
### 20. 正則化(Regularization)
### 21. 正則化(Regularization)






## 3.強化學習(Reinforcement Learning)

:pushpin: 強調如何基於環境而行動，以取得最大化的預期利益

:pushpin: 強化學習是除了監督學習和非監督學習之外的第三種基本的機器學習方法

:pushpin: 不需要帶標籤的輸入輸出，同時也無需對非最優解的精確地糾正

以遊戲舉例，
反覆學習玩家(智慧代理人)在遊戲(環境)中的 行動與遊戲結果,逐漸學會最有效益的行動。
