# 各機器學習方法發展與介紹
## 時間序列
### 時間序列的應用主要分為以下兩種:
* **預測:** 基於過去的時間序列來**預測**未來的時間序列,
若中間序列有缺失,也能利用方法對缺失值進行補遺。
**如: 自回歸滑動平均(Autoregressive moving average, ARMA)**

* **分析:** 將整個時間序列基於季節性、趨勢、雜訊進行分離,
借此觀察時間序列有無趨勢或混波現象,也能夠用於濾除雜訊。
**如: 奇異譜分析(Singular Spectrum Analysis, SSA)**


## 分類方法
### 分類方法主要分為以下五種:
* **關聯性方法:**
*計算樣本間的距離(如:歐式距離、曼哈頓距離等...),將距離較近的樣本分類為同類別。
**如:最近鄰居法(K-Nearest Neighbors, KNN)**

* **線性模型:**
**樸素貝氏分類(Naive Bayes, NB)** 假設特徵間彼此不相關,並計算每個樣本的類別先驗機率,將最高機率的類別標記給樣本。

**支援向量機(Support Vector Machine, SVM)** 利用樣本間的距離,將樣本利用核函數投影至高維度,並建立超平面區分樣本,使超平面盡可能區分更多樣本。

* **樹模型:**
**ID3:** 基於信息熵計算信息增益,利用信息增益最多的特徵分裂樹節點。
**C4.5:** 改進ID3的版本,增加信息增益率改善ID3容易將分裂點給予特徵類別較多的特徵
**CART:** 能夠進行分類與迴歸的二元樹模型,基於基尼係數(Gini index)使計算更有效率,是許多集成模型的基本單位。

* **集成模型:** 利用多個弱分類器(如:CART)組合而成進行分類,最後結果通常由所有弱分類器投票所得。
**如:梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)**

* **神經網路模型:** 多個神經元組合成神經網路,利用反向傳播更新神經元權重,神經元具有一定程度的特徵選取能力。
**CNN:** 通常應用於影像辨識,利用卷積層或池化對圖片進行降維後,在最後接上全連接層進行影像分類。(CNN的概念更早就被提出,圖裡面懶得改)

**DNN:** 使用多層全連接層進行訓練,通常應用於數據資料分類。

**LSTM:** 常應用於與時間有相關性的項目,對影片、音樂、時間序列分類與處理均有較佳的表現,與一般神經網路差別是LSTM的神經元具有記憶能力,因此相同的輸入也會有不同的輸出。


## 分群方法
### 分群方法主要分為以下四種:
(以下分群GIF均為二維,高維度的情況無法可視化也容易造成維度災難。)
**階層式:** 先將每個樣本都當成一個群體,之後對周遭的群體開始合併,直到群的數量達到設定的數。(凝聚式) **如: AGNES**

**密度式:** 根據樣本間的密度合併資料,需要設定距離與樣本數,如果在距離內的樣本數大於或等於設定的樣本數,則將其分為一群,具有剔除離群點的功能,也能夠自動判斷有幾個群聚。 **如: DBSCAN**

**切割式:** 需要設定起始中心點的位置與中心點數量,計算樣本與中心點的距離,與該中心點距離最近的樣本則為該群,中心點更新方式則是使用隸屬值來移動中心點。 **如: K-means**
(如果圖不會動就F5)

**格子式:** 無須設定中心點即可判斷有幾個群聚的方法,二維的情況下對樣本周圍生成座標點,在判斷最近的樣本核心來更新座標點,直到所有座標點均收歛至各樣本群核心點時停止,最後與該座標點最近的樣本則為同一群。**如: STING**

分群方法屬於無監督式學習,也較少優劣之分,應用則需要都嘗試看看。
(下面這張圖是威翔做的)

## 優化算法
### 優化算法主要分為...有點多 懶得寫了
優化算法是拿來解決最佳化問題(如:背包問題,TSP問題)用的,在機器學習上通常用來尋找參數或特徵選取,藉由最後所產生的目標函數來改變輸入數值藉此最小化(或最大化)目標函數的方法。
**PSO:** 優化算法介紹都很麻煩 自己找(粒子群演算法)
(下圖為尋找二維向量中的最低點)

**GA:** 交叉、變異等方法來最佳化。(基因演算法)
(下圖為TSP問題,尋找最短路徑)

優化算法發展圖

有趣的是PSO到現在還很多人用 1991~2001那邊
之前用2016年的鯨群演算法(WOA),然後對兩個測試函數進行測試
分別為Sphere函數與Restrigin函數(測試時為30維),結果如下:
(下圖表示兩種方法對函數的收歛速度)

可以發現,WOA收歛速度比PSO快非常多。

在運行時間與收歛值上也是WOA更佳。
# 迴歸方法(有空在補)