# 機器學習數位課程筆記
## 1. The milestones of AI
### The birth of AI
* John McCarthy將人工智慧與自動控制領域劃分,確立人工智慧領域的誕生
### The milestones of AI
#### Deep Blue
* 由IBM開發
* 1997年5月擊敗西洋棋世界棋王Kasparov,成為首個在標準比賽中擊敗西洋棋世界冠軍的電腦系統
#### Waston
* 由IBM開發
* 具備語音辨識、問答處理系統
* 在2011年參加Jeopardy,擊敗人類,贏得100萬獎金
#### AlphaGo
* 由Google DeepMind開發
* 在2015年10月,擊敗樊麾,成為第一個無需讓子在19路棋盤上擊敗圍棋職業棋士的電腦圍棋程式
* 在2016年5月,以4勝1敗的戰績擊敗南韓9段圍棋棋手李世乭,成為第一個不讓子且擊敗職業9段棋士的電腦程式
* 韓國棋院授予AlphaGo名譽職業9段
* 2017年5月,在烏鎮圍棋峰會以3:0戰績擊敗當時排名世界第一的棋士柯潔
* 在無人類對手後,Google便宣布將AlphaGo退役
#### AlphaGo-Master
* 2016年底,在網路上以帳號名Master,挑戰亞州好手。至2017年1月初,戰績60戰全勝
#### AlphaStar
* 由Google DeepMind開發
* 採強化式學習
* 將遊戲視為長序列建模學習工作,也可應用在天氣預測、語言理解等
* 2019年10月,DeepMind在《nature》雜誌上發布最新研究,相關數據顯示,AlphaStar已經超越99.8%的活躍玩家
#### AlphaFold
* 由Google DeepMind開發
* 採深度學習系統
* 蛋白質3D結構預測程式
* AlphaFold1在2018年12月第13屆CASP比賽,排名第一
* AlphaFold2在2020年11月第14屆CASP比賽獲得分數92.4,準確度遠高其他程式
#### AlphaCode
* 由Google DeepMind開發,在2022年二月發布
* 在Codeforces程式競賽中,取得前54%的成績,具有中等參賽者水準
#### Chatgpt
* 由OpenAI開發,在2022年11月發布
* 採強化式學習
* 具備人類對話能力的聊天機器人
## 2. What is machine learning
### What is machine learning?
讓電腦從資訊中學習的資訊科學
### The difference between human and machine
#### The learning model of human's brain

**人類透過生活經驗統整、歸納出規則**
**在遇到新問題時會根據規則做出判斷該如何執行**
---
#### The learning model of machines

**機器是透過資料訓練出模型**
**在遇到新資料時,會透過已訓練好的模型做出反應**
---
### The types of machine learning
#### 學習過程中是否有人類監督
:::spoiler Supervised learning
**監督式學習**
利用訓練資料集建立模型,用模型推測新案例的答案,通常有預設的Label(答案)
例如:利用CIFAR-10訓練新模型,在未來便可預測新資料的類別
:::
:::spoiler Unsupervised learning
**非監督式學習**
沒有事先標記過的資料集,自動對新輸入資料集進行分類或分群
最後根據資料分類(分組)的結果,說明發現
:::
:::spoiler Semi-supervised learning
**半監督式學習**
利用少量有標記的資料和大量無標記的資料來訓練模型,改善無標記的資料間的連結
:::
:::spoiler Reinforement learning
**強化式學習**
無法事先標記資料,在機器做出反應時,給予獎勵或處罰,從嘗試錯誤中學習
:::
#### 考慮能否從傳入的資料作增量學習
:::spoiler Batch learning
**批次學習**又稱為離線學習
Training phase:
在固定大小的數據集上做訓練,用以訓練的資料都是已經事先收集並固定的,模型在訓練期間不會接收到新的資料
Prediction phase:
將測試資料萃取出featrue後,放入訓練好的模型中,產生Predict label,最後得到預測的答案
:::
:::spoiler Online learning
**線上學習**
一筆資料重複訓練,得到更新模型的權重
:::
## 3. SDK Installation
### 顯卡型號及系統資訊
## 4. Neuron and Perceptron
### Neuron
#### 神經元
神經細胞會長出像樹枝狀的**樹突(Dendrites)**,而生長出去的是神經細胞的**軸突(Axons)**
樹突負責接收訊息
軸突負責傳遞訊息
在Dendrites和Axons中有**突觸(Synapse)** 負責傳動中的訊息

#### Neuronal computational model
1943年由Warren McCulloch, Walter Pitts所發表的模仿神經元的運算模式

### Perceptron
1957年由Frank Roserblatt提出用感知器實現神經元的模型

將所有輸入都算上權重後,再加上偏差值,在透過激活函數(Activation function),最後得到輸出
#### Perceptron learning algorithm
目標:透過資料訓練,調整權重,縮小錯誤

直到所有訓練資料都匯入
#### Nerual Network

由輸入層、隱藏層、輸出層組成
## 5. Multi Layer Perceptron
前饋式網路
網路媒層可包含各式獨立的神經元,同層中神經元彼此各式獨立,每層的神經元都會連接到下層的神經元
### Activation function
大多為非線性函數
主要作用是讓神經網路加入非線性因素,讓神經網路能夠解決更為複雜的問題
#### Commonly used activation functions
* Sigmoid
* tanh
* Rectified Linear Unit
* Softmax
### Sigmoid

* 適合用於輸出機率模型
* 在使用反向傳播調整權重時,會有梯度消失的問題
* 不適用於多層網路模型,層數越多,梯度消失問題越嚴重
### Tanh

* 主要使用於分類工作
* 也有梯度消失的問題
### Rectified Linear Unit(Relu)

* 具有類似生物神經元特性
* 沒有梯度消失的問題
* Dead Relu Problem:Input x<0, weights will no longer be changed
### Softmax

* 規劃指數函數
* 每個元素取指數次方加總放分母,分子則是每個元素的指數次方
* 適合用在多分類的機率模型
### Loss Function
#### Commonly used Loss function in deep learning
Let Y be a vector of n predictions, and Ŷ be the vector of actual values.
:::spoiler Mean_squared_error

:::
:::spoiler Mean_absolute_error

:::
:::spoiler Mean_absolute_percentage_error

:::
:::spoiler Mean_squared_logarithmic_error

:::
:::spoiler Binary_crossentropy

* 二分類
* 搭配Sigmoid activation function
* Ouptut必須經過one-hot encoded
:::
:::spoiler Categorical_crossentropy

* 多分類
* 搭配Softmax activation function
:::
### One-hot Encoding
用N個Bit代表狀態

## 6. Strategies for adjusting MLP weights
神經網路就像是函數

而神經網路的目的是要調整權重,使預測的誤差值縮小
### Methods for Improving the Efficieny of Multilayer Perceptron
### Backpropagation
**反向傳播法**
These gradients are then utilized to update the weights, aiming to minimize the value of the loss function

---
#### Factors Influencing the Gradient

#### Challenges of Backpropagation
* 問題:每次使用全部訓練集來計算損失函數的梯度,再更新權重,那麼收斂速度會非常慢
解法:用Stochastic Gradient Descent(SGD) to speed up
* 問題:梯度下降法沒辦法保證找到Global optimal solution
解法:用Momentum method去減少被困在Local minimum的機率
### Stochastic Gradient Descent
**隨機梯度下降法**
* 一種隨機梯度下降的優化方法
* 一次只跑一個樣本,跑完算一次梯度,並重新更權重
* 因為一次只跑一個樣本,所以耗時長
### Mini-Batch Gradient Descent
**小梯次梯度下降法**
* 將訓練資料拆成很多小份,每次有多筆資料進行訓練
* Compared with SGD:一個epoch執行速度比較快
Compared to GD:收斂的速度比較快
* Batch size often used 32,128,256,1024,2048
### Momentum
**動量法**
* 梯度下降的一個變形

## 7. Introduction to Tensorflow
### Tensor
* 單一資料型態的多維陣列
### Flow
* 一種資料流或資料運算
* 透過產生Data Flow Graphs進行運算,稱為Computation Graphs
* 點代表數學運算,邊代表關聯性
### Session
* 執行圖的架構
* 為運算做資源(CPU, GPU)分配
* 主控資源,決定要開啟或釋放資源
### Neuron operation

### Eager Execution
* 不需要定義計算圖
* 不需要初始化參數
* 不需要用tf.Session.run()就可以啟動運算
### Operation of 2D Tensor

### Keras
* 可以快速建造Tensorflow模型
* 高階API
### Sequential Model
方法一

**圖片大小為28x28轉成one-dimensional vector為784**
方法二

## 8. Classic Sample Dataset
## 9. Build MLP model
### Basic steps for training a model
1. Load Libraries
2. Parameter Configuration
:::spoiler batch size
**大batch size(64, 128):**
* 訓練速度快
* 適用有充足運算資源的大數據集
* 未必訓練的好
**小batch size(1~32):**
* 訓練速度慢
* 適用於小數據集
* 訓練結果較優
:::
:::spoiler num classes
因是訓練手寫數字模型,總共10類
:::
:::spoiler epochs
數據集被完整訓練過得次數
:::
3. Data Loading and Preprocessing
* 將資料reshape成一維
* Normalize資料,使其值介於0到1之間
* 因是訓練手寫辨識數字類別,所以最後須轉換成one-hot encoding
4. Build Model Architecture
:::spoiler Ex

* 512為神經元
* 第一層要先指定input_shape
:::
5. Model Training
* validation_spilt:抽出多少比例做驗證
6. Model Evaluation
7. Model Saving
### Basic steps for sample prediction
1. Load Libraries
2. Build Model Architecture
3. Load Model
4. Read Sample
5. Data Preprocessing
6. Sample prediction
## 10. Model Evaluation Metrics
### Confusion Matrix
* 又稱錯誤矩陣
* 可以將學習演算法的效率視覺化的呈現
| | True Yes | True No |
| ----------- | -------------- | -------------- |
| Predict Yes | True Positive | False Positive |
| Predict No | False Negative | True Negative |
### Accuracy
* Accuracy = ( TP + TN ) / Total
* 當TP的數量很少時,要注意是否有資料不平均的狀況
### Precision
* Precision = TP / ( TP + FP )
### Recall
* 又稱Sensitivity, TPR
* Recall = TP / ( TP + FN )
### Specificity
* Specificity = TN / ( FP + TN )
### F-measure
* F1 score = 2 / ( 1 / precision + 1 / recall )
* Fα = ( 1 + α^2 ) * precision * recall / ( α^2 * ( precision + recall ))
### ROC
* Receiver Operating Characteristic curve
* 受試者操作特徵曲線
* 表達不同模型真陽率對假陽率的關係
### AUC
* Area Under the Curve = Area of ROC
* AUC越大,代表分類做得越好
## 11. Image Convolution
也稱為image filtering(影像濾波器)
目的:選擇性強化影像中的某些特徵,消除不需要的特徵
### Common convolution effects:
* Sharpen
* Blur
* Edge Detection
* Edge Enhancement
* Noise Removal
### Convolution Operation
LLL
### Common Filters
:::spoiler Smoothing Filter
適用於模糊化和去除雜訊
Ex:Low pass filter
:::
:::spoiler Sharpening Filter
強化物件的邊緣位置
Ex:High pass filter
:::
:::spoiler Sobel Filter
主要使用於邊緣偵測
:::
:::spoiler Laplacian Filter
主要使用於邊緣偵測
:::
### Low Pass Filter
* 主要用於消除影像上高頻部分的變化,可使影像變得較均勻
* 可以消除高頻雜訊,使影像變得較平緩
* 可去除對比強烈的雜點
* 將每一個像素的臨近灰階值加總再以平均值取代該像素的灰階值
### High Pass Filter
* 保持高頻部分,減少或消除低頻部分
* 原始影像減去低通濾波的影像
### Sobel Filter
Filter Result

### Laplacian Filter
* 計算中心和臨近像素的總和

## 12. Convolutional Neural Networks
### Disadvantages of training MLP models
在操作MLP模型時會需要先將圖片轉為一維陣列,且輸入層和隱藏層間是全連接層
所以當圖檔很大時,權重會很多,對於模型訓練負擔很大
### Reducing the complexity of image training
* 只取重要特徵訓練
* 特徵是由相近的像素組成
### Convolution Operation
* 將每一個像素以及鄰近的像素由一個濾波器加權總後得到一個值
* 對每一個像素都做Convolution
### Convolutional Neural Network
* 由輸入層和隱藏層及輸出層組成
* 並非都為全連接層,其中包含了捲基層、池化層、激活層、平坦層和一些全連接層所組層

### Hyperparameters for Convolutional Layers
:::spoiler Zero-padding
將全周圍都補零,讓在邊緣或角落的像素可以做Convolution
:::
:::spoiler Stride
* 在做Convolution時會需要決定要跳多少格
* 當Stride設定很大時,Convolution後的影像會變小
:::
:::spoiler Depth
要套幾個Filter對圖片做Convolution
:::
### Pooling
* 減少圖片尺寸
* 降低權重大小

### Hyperparameter setting
* 影像大小要能夠被2整除,常見的有32, 64, 96, 224, 384, 512
* Convolutional layer filter size大部分為3x3,最大有到7x7
* stride≤(Wf-1)/2
* CNN model(16+ layers)通常使用 3x3 filter和 stride 1
## 13. Build CNN Model
### Basic steps for training a model
1. Load Library
2. Parameter Setting
3. Data Loading and Pre-processing
4. Build Model Architecture
* filters:卷積層使用卷積核的數量
* kernel_size:卷積核的大小
* padding:卷積層的輸出是否和輸入相同
5. Model Training
6. Model Evaluation
7. Model Saving
### Basic steps for sample prediction
1. Load Libraries
2. Build Model Architecture
3. Load Model
4. Load Sample
5. Sample Pre-precessing
6. Sample Prediction
## 14. Classic CNN Models
### CNN Classic Models
* LeNet
* AlexNet
* VGGNet
* ResNet
### LeNet
* 用於手寫數字、字母的辨識
1. 利用捲基層、池化層等操作提取特徵
2. 利用全連接層進行分類的訓練辨識

### AlexNet
* 使用非線性的激活函數:Relu
* 使用Data augmentation和Dropout防止Overfitting
* 使用mini-Batch SGD加速訓練

### VGGNet
* 有5層捲基層、3層全連接層
* 包含8個學習層,5個捲基層和3個全連接層和softmax輸出層
* 層與層之間使用MaxPooling
* Activation function:Relu
* 有多個捲基核是使用3x3,可以減少參數,也可以進行更多非線性的映射,增加網路的彌合能力
* Small pooling kernel(2x2)
* 第一層的通道數為64,每層都會加倍直到512,讓更多的特徵可以被提取出來
### ResNet
* 解決了在深層的網路梯度消失和精確度下降的問題

## 15.Data Augmentation
### CNN model building process
1. Data preprocessing
2. Determine the model architecture and parameters
3. Compile and train the model
4. Model Evaluation
5. Hyperparameters tuning
6. Repeat steps 2~5 until the model efficiency can no longer be improve
7. Predictions
### Data preprocessing
#### Data augmentation
* rotation
* shift
* zoom
* brightness
#### Import packages
## 16.Introduction to OpenCV
### OpenCV
Open Source Computer Vision Library
### Read image

* [filename]:圖片檔案的路徑
* GRAYSCALE:灰階
* COLOR:彩色
* UNCHANGE:與讀取的相同
### Saving image

### Slicing image

### Zoom out

## 17.Classic Datasets for Data Analysis
### Iris Dataset Introduction
* 三種不同種類的鳶尾花:
* Iris Setosa(山鳶尾)
* Iris Versicolor(變色鳶尾)
* Iris Virginica(維吉尼亞鳶尾)
* 四種不同特徵:
* Sepal length(花萼長度)
* Sepal width(花萼寬度)
* Petal length(花瓣長度)
* Petal width(花瓣寬度)
* 每一種鳶尾花有50個樣本
### Boston Housing Dataset Introduction
* 14種城鎮資料,506筆
* 平均犯罪率
* 占地25000平方英尺以上的住宅用地比例
* 城鎮非營授業比例
* 是否在查爾斯河旁
* 一氧化碳濃度
* 每個住宅平均房間數
* 1940年前建造的自有住宅比例
* 與5個波士頓行政中心的加權距離
* 高速公路通行性指數
* 財產稅率($10000)
* 城鎮師生比
* 黑人比例
* 人口地位較低的百分比
* 目前房價
### Breast Cancer Wisconsin
* 569種惡性和良性的細胞樣本:
* 每筆資料有十種屬性:
* Radius(半徑)
* Texture(細胞核紋路)
* Perimeter(腫瘤周長)
* Area(面積)
* Smoothness(平滑程度)
* Compactness(緊湊性 )
* Concavity(邊緣凹凸度)
* Concave points(凹凸點)
* Symmetry(對稱性)
* Fractal dimension(輪廓估計)
* 每個特徵有3種不同的值:平均值、標準差,最差值
* 資料集分為兩個類別:Benign(良性), Malignant(惡性)
* 良性的有357筆資料,惡性的有212筆
## 18.Data Processing
* Feature selection
* Data cleaning
* Dealing with missing data
* Convert data for non-numeric type
* Delete duplicate data
* Pick out the outliers
* Dealing with imbalance classes
* Increase speed and improve performance
* Standardization
* Normalization
* Training strategy
* Regression, Classification
### Feature selection
* Evaluate featuire's importance
* Filter out features that are irrelevant to the prediction target

### Dealing with missing data
* When the cloumn data is missing
* delete the feature
* Too many features missing
* Use the drop of pandas DataFrame to directly delete the column of the feature
* fill the gaps
* The filling method is usually 0 for the category type and the average orr median for the numeerical type
* Use pandas Series median(), mean() and fillna() to fill

### Convert data for non-numeric type
* Words: Arrange the words that will appear into a sequence and convert them into corresponding index values

* Category type data, np size relationship, converted to one-hot encoding
### Delete duplicate data
* If the duplicate data is not generated by some augmentation strategies, it should be removed

### Pick out the outliers
### Dealing with imbalanced classes
* Most data belonging to a certain class will cause overfitting
* Duplicate the data for the classes with fewer data, or through out some data from the classes with larger number of data

### Standradization
z = ( x - µ ) / σ
* x: an original score that needs to be normalized
* µ: population mean
* σ: population standard deviation
* 
### Normalization
* Compress the value of the data between 0 and 1, making it easier for the model to find appropriate weight
* The method of converting data-type data with size relationship into 0 to 1 is min-max normalization
* Convert class-type data into one-hot encoding
### Training strategy
* Regression is to directly predict the value
* Classification requires transfer one-hot endcoding for labels, but not for binary classification
## 19.Feature Selection
### Feature Selection-RFE
* Recursive Feature Elimination
使用一些基本的Model並根據feature的數量迭代的做選擇,在訓練後會將一些較不重要的feature剔除掉,在繼續執行下一輪的訓練直到達到目標feature的數量
* Implement
from sklearn.feature_selection import RFE
* Model Training and Evalution
### Feature Selection-Filter
* Filter
根據feature發散的程度(variance)和feature跟target間的相關性對各個feature進行評分
可以設定要選擇feature的個數或設定一個固定的閥值並留下評分在閥值裡面的feature
* filter method
* Remove features with low variance(變異數)
呼叫scikit-learn's VarianceThreshold package 將較不重要的feature移除掉
* Univariate Feature Selection
個別計算每個feature的統計指標,根據該指標判斷feature的重要性,剔除不重要的feature
## 20. Machine Learning Algorithms Decision Tree and Random Forest
### Decision Tree(決策樹)
* 用於分類(classification)和迴歸(regression)監督式學習方式
* 目標是創建一個模型,通過學習從數據特徵推斷出簡單決策規則來預測目標變量的值
* 樹的中間節點(non-leaf nodes)代表測試條件
* 樹的分支(branches)代表條件測試的結果
* 樹的葉節點(leaf nodes)代表分類後所的到的分類標記,也就是分類的結果
### 決策樹的產生程序與用途
#### 決策樹的產生程序
1. 建立樹狀結構
* 所有的訓練樣本都在根節點
* 依據選取的屬性,重複地將樣本分隔開
2. 修剪樹狀結構
* 辨識並移除導致雜訊或特例的分支
#### 決策樹的用途:分類未知的樣本
* 依據決策樹測試樣本的屬性值
### 決策樹推論演算法
#### 基本演算法
* 樹結構是由上而下,遞迴方式建立
* 無法處理連續性的數值,數值屬性必須先轉換
#### 運作方式
1. 所有樣本都在根節點
2. 屬性都是類別狀態(若是連續型數值,事先做離散化)
3. 依據選取的屬性,反覆地將樣本分隔開
4. 測試各屬性是否以統計性測量(如資訊獲利 information gain)為基礎而挑選出來
#### 停止分支的條件
* 當某個分支集合內的所有樣本都屬於同一個類別
* 所有屬性都用完了,用多數投票法以樣本數較多的類別來代表此業節點
* 選取某屬性後,產生的某分支完全沒有測試樣本
#### 建構決策樹
* 若節點順序改變,同樣的資料建構出的決策樹也會不同
* 決策樹決定節點特徵順序的3個常用演算法
* ID3演算法
使用資訊獲利(Information Gain)最大的特徵優先
* C4.5演算法
使用資訊獲利比最大的特徵優先
* CART演算法
使用基尼指數(Gini)最小的特徵優先
### 資訊獲利、資訊獲利比和基尼指數
* 資訊獲利(Information Gain)= 資訊熵-條件熵
指在一個條件下資訊不確定性減少的程度
* 資訊熵:樣本類別的複雜度

* 條件熵:在某一特徵下,樣本類別的複雜度

* 資訊獲利比 = 資訊獲利/資訊熵
* 基尼指數(Gini):
用來表示資料的不純度,基尼指數越大,表示資料越不平均
當資料中樣本的類別都一樣時,基尼指數為0
*公式:
D為資料全體樣本
p(xi)表示每個類別出現機率
### 決設樹的優缺點
#### 決策樹的優點
* 模擬人的直觀決策規則,訓練速度快
#### 決策樹的缺點
* 容易忽略資料集裡面屬性的相互關聯
* 若不進行一定的限制,如剪枝,會導致模型訓練很符合訓練資料卻不適用新的資料,造成過度學習(overfitting)
### 隨機森林
* 一個包含多個決策樹的分類器,其輸出的類別是依據個別決策樹輸出類別的眾數而定
* 本質屬於隨機學習的集成學習(Ensemble Learning)
#### 隨機森林演算法流程
1. 從資料庫中(有放回的)隨機採樣,選出n個樣本函示庫
2. 從所有特徵中隨機選擇k個特徵,對選出的樣本,利用這些特徵建立決策樹
3. 重複以上步驟m次,即生成m棵決策樹,形成隨機森林
4. 經過每棵決策樹,最後投票決定輸出類別
### 隨機森林的優缺點
#### 隨機森林的優點
* 能處理很高維度的資料,且不用做特徵選擇
* 可判斷出不同特徵之間的相互影響
* 可判斷特徵的重要程度
* 訓練速度快,容易做成並行化方法
* 有採樣過程的隨機性,不容易過度學習
#### 隨機森林的缺點
* 在某些噪音較大的分類或回歸問題上會過度學習
* 對於有不同取值屬性的數據,取值劃分較多的屬性會對隨機林產生較大的影響
## 21. Machine Learning Algorithms Linear Regression and Logistic Regression
### 迴歸分析
* 統計學上分析數據的方法,目的在於了解變數間是否相關(相關方向、相關程度),並建立數學模型以便觀察特定變數來預測研究者感興趣的變數
* 用自變數(independent variable)來預測應變數(dependent variable)
### 線性迴歸(Linear Regression)
* 利用線性迴歸方程式的最小平方函數對一個或多個自變數(independent variable)和應變數(dependent variable)之間關係進行建模的一種迴歸分析
* 給定一些點,找出一條直線方程式,使得所有點到直線的距離平方和最小
* 應變數(Y)通常為連續型變數
### 羅吉斯迴歸(Logistic Regression)
* 探討應變數和自變數之間的關係,其中自變數對應變數的影響是以指數的方式做變動
* 羅吉斯迴歸的應變數(Y)主要為類別變數,特別是分成兩類的變數(如:是或否、有或無)
### 羅吉斯迴歸 vs 線性迴歸
* 監督式學習中,常用的預測方法有
* 對連續性的資料使用迴歸模型進行資料預測
* 對離散的資料進行分類預測
### 羅吉斯迴歸的機制
* 羅吉斯迴歸與感知器的差異在於激活函數為Sigmoid Function,損失函數是交叉熵誤差函數(Cross entropy Error Function),具有正則化項(Regularization Term),或懲罰項(Penalty Term),避免過度學習
### 誤差函數
* 交叉熵誤差函數

* N:資料數
* yᵢ:預測數
* tᵢ:正確數
### 正則化(Regulation)
* 在學習時給予懲罰,讓決策分界線變得更平滑
* 加入正則化,目標函數=損失函數的總資料和+正則化項
* L2正則化:將權重參數的平方值當作損失函數的懲罰項

* L1正則化:將權重參數的絕對值當作損失函數的懲罰項
* 
### 羅吉斯迴歸的優缺點
#### 羅吉斯迴歸的優點
* 實現簡單,廣泛的應用在工業問題上
* 分類時計算量非常小,速度快,存儲資源低
* 方便於觀測樣本概率分數
* 計算代價不高,易於理解和實現
#### 羅吉斯迴歸的缺點
* 特徵空間很大時,性能不是很好
* 容易欠擬合,一般準確度不太高
* 不能很好地處理大量多特徵或變數
* 只能處理兩分類問題且必須線性可分
* 對於非線性特徵,需要進行轉換
## 22. Machine Learning Algorithms Support Vector Machine
### 支援向量機(Support Vector Machine)
* 可以用於分類或迴歸的監督式機器學習演算法
* 需事先定義分群的類型
* 一般線性分類器,主要用於二元分類的問題
* ==SVM能處理線性不可分的情形==
* SVM是將實例表示為空間的點,在高維度的空間中找一個超平面作為類別的分割,以確保最小的分類錯誤率
#### 支援向量機概念
* 找到一個決策邊界(Decision Boundry)讓兩類之間的邊界(Margins)最大化,使其可區隔開來

* 超平面對於每個類別的最近的元素,距離是最遠的

### 核函數
* 透過空間映射找到最佳分割超平面,解決線性不可分的情形
* 但這種維度轉換會增加計算成本,維度轉換可以使用向量機來進行計算,即核函數
* 使用低維度特徵空間上的計算,來避免在高維度特徵空間中向量內積的大量計算
#### 常用核函數
* 線性核函數(Linear Kernel)
* 函數:*K(x,z)=x·z*
* 用於線性可分SVM
* 多項式核函數(Polynomial Kernel)
* 函數:*K(x,z)=(y x-z+r)ᵈ*
* 是線性不可分SVM常用的核函數之一
* 高斯核函數(Gaussian Kernel)
* 也稱為徑向基核函數(Radial Basis Function, RBF)
* 函數:
* 是非線性分類SVM最主流的核函數
* Sigmoid核函數(Sigmoid Kernel)
* 函數:*K(x,z)=tanh(yx·z+r)*
### 多分類支援向量機
* 若要處理多類別分類,必須結合多個二分類法來達成多分類的目標
* SVM處理多分類的方法
* One-vs-Rest
* 處理k類別問題,會產生k個SVM
* 其中第i個SVM的訓練資料中,第i類標註為+1
其他類別資料都標註為-1
* One-vs-One
* 會處理k類別問題,每兩類資料都會產生一個SVM,
會產生k(k-1)/2個二分類SVM
### 支援向量機優缺點
#### 支援向量機優點
* 可解決高維問題,即大型特徵空間
* 解決小樣本機器學習問題
* 能夠處理非線性特徵的相互作用
#### 支援向量機缺點
* 一般SVM只支援二分類
* 當觀測樣本很多時,效率不高
* 對非線性問題沒有通用解決方案,有時候很難找到一個合適的核函數
## 23. Machine Learning Algorithms k Nearest Neighbor
### K-近鄰演算法
* k-Nearest Neighbor(KNN)
* 用於分類和迴歸的無母數統計方法
* 在k-NN分類中,一個物件的分類是由其鄰居**多數表決**的結果來決定
* k-NN就是由k個最近鄰居的分類結果決定該物件的類別
* k的數值影響預測效率
### K-近連演算法概念
* 在分類任務中,K=3,也就是取最接近的3個鄰居,並由這3個鄰居投票表決樣本的標籤

* 訓練樣本是多維特徵空間向量,其中每個訓練樣本帶有一個類別標籤
* 演算法的訓練階段包含訓練樣本的特徵向量和標籤
### K-近鄰演算法步驟
1. 決定k值
2. 計算每個測試樣本和所有訓練樣本之間的距離
3. 選擇k個近鄰集合
4. 統計此k近鄰所屬分類
5. 根據分類統計最多數的類別為此測試樣本的類別
6. 重複步驟2~5直到所有樣本分類完畢
### 距離函數
* 距離函數決定K-近鄰演算法中如何計算兩點間的距離
* 常見的距離函數
* 歐幾里得距離(Euclidean Distance)
* 曼哈頓距離(Manhatten Distance)
* 明可夫斯距離(Minkowski Distance)
* 歐幾里得距離(Euclidean Distance)
* 
* 曼哈頓距離(Manhatten Distance)
* 
* 明可夫斯距離(Minkowski Distance)
* 
* 當p=1時為曼哈頓距離
* 當p=2時為歐幾里得距離
### 尋找最近k點演算法- k-d Tree
* k-d樹是每個節點都為k維點的二元樹。所有非葉子節點可以視作用一個超平面把空間分割成兩個半空間

### 尋找最近k點演算法- Ball Tree
* Ball Tree將數據遞迴地劃分為由圓心C和半徑r定義的節點,使得節點中的每個點位於由r和C定義的hyper-sphere內

### K-近鄰演算法的優缺點
#### K-近鄰演算法的優點
* 簡單,易於理解,易於實現,無需估計參數,無需訓練
#### K-近鄰演算法的缺點
* KNN每一次分類都會重新進行一次全局運算,對於樣本數量大的數據集計算量較大
* 樣本不平衡時,預測偏差較大
* 對於類別數在3個(含)以上,經常會出現投票平局,平局要取預設值,這會讓K-NN損失精確度
## 24. Machine Learning Algorithms Naive Bayes Classifier
### 貝式分類器
* 單純貝氏分類器(Naive Bayes' Classifier)是假設特徵之間互相獨立,運用貝葉斯定理(Bayes' Theorem)為基礎的簡單機率分類器
* 貝是分類器在20世紀60年代初引入到資料檢索領域,目前仍是文件分類的一種熱門方法
* 文件分類是以詞頻為特徵判斷文件所屬類別或其他(如:垃圾郵件、合法性、體育或政治等)的問題
### 貝式定理
* 貝式定理(Bayes' theorem)描述在已知的一些條件下,某事件的發生機率
* P(A|B) = P(B|A) * P(A) / P(B)
* P(A)、P(B):是A、B的**先驗機率**
* P(A|B):已知B發生的情況下,A的條件機率。稱作A的**後驗機率**
* P(B|A):已知A發生的情況下,B的條件機率。稱作B的**後驗機率**
### 貝式分類器概念
* 根據一些屬性(Feature)將一些物件進行分類(Classes)
* 給定一組數性F,可計算具有數性F的物件O屬於類別C的機率,我們表示為P(C|F)
* 根據所有類別Ci的P(Ci|F),物件O就分類屬於那個P(Ci|F)值最高的類別
### 多分類貝式定理
* 假設給定n個兩兩不相交的類別C1, C2, ...Cn和一組屬性F
* 一個物件F具備屬性F,分類為Cj的機率
### 貝式分類器種類
* 當單純貝式分類器所給定的特徵是連續的數值,我們使用高斯貝式分類器(GaussianNB)
* 假設變數為常態分配的情況下,以樣本資料的標準差及變異數來計算機率

* 當資料為二元值,可採用伯努力(BernouliNB)分類器
* 在離散資料方面,也可採用多項式(MultinomialNB)分類器
### 貝式分類器優缺點
#### 貝式分類器優點
* 有堅實的數學基礎,及穩定的分類效率
* 對小規模的數據表現很好,能夠處理多分類任務,適合增量式訓練
* 對缺失數據不太敏感,算法也較簡單
#### 貝式分類器缺點
* 無法學習特徵間的相互作用
* 需要計算鮮先驗機率
## 25. Unsupervised Learning Algorithms K Means
### 非監督式學習
* 針對沒有事先標記過的資料,自動進行分類或群
* 非監督式學習的型態:
* 分群演算法(Clustering algorithm)
將資料分成不同群組,群組內的成員具有類似屬性
如:K-means演算法和DBSCAN演算法
* 非監督式轉換(Unsupervised transformation)
將原資料轉換為另一種表示方式,讓資料處理更為方便,如:降維(Dimension reeduction) 與特徵擷取(Feature extraction)
* 非監督式學習的特性
* 因為資料沒有輸出標籤,不易評估模型效率
* 常用來了解資料集的特性,當作監督式學習的預先處理步驟,透過預先的資料分析,讓之後的監督式學習效率更好
### K-means演算法
* K-means演算法會將資料根據給定的K值進行分群,K代表群組數
* K-means演算法的目標為最小化群組內資料和群中心的距離平方和:
* x:Si群內的資料點
* k:k群
* S:群的分類
* μi:Si群中所有點的均值

### 距離函數
* K-means演算法的距離函數計算
* 歐幾里得距離(Euclidean distance)
* 曼哈頓距離(Manhattan distance)
* 餘弦相似(Cos similarity)
### 餘弦相似(Cos similarity)
假設x=(x1, x2, ..., xn), y=(y1, y2, ..., yn)為兩個n維向量

> by歐幾里得點積公式:a.b = ||a|| x ||b|| x cosθ
### K-means演算法的步驟
1. 決定k值,隨意選取k個點當作群組中心
2. 將每一個點歸類於距離最近的群組中心
3. 重新計算分類後每個群組的中心
4. 重複步驟2、3直到群集不再變動或群組中心移動量小於設定的閥值
### K-means初始方法
* K-means++想法為讓每個初始群中心盡可能相距越遠越好
* 步驟
1. 從資料集中隨機選擇第一點
2. 計算已選擇的群中心中最遠的資料位置為新的群中心
3. 重複直到K個群中心產生
### 加速運算
* 在歸類資料所屬群中心時需要大量計算
* 傳統作法:每筆資料和每個群中心計算距離
* elkan
1. 預先計算各群中心的距離
2. 2倍資料點到群中心A的距離小於群中心A到群中心B的距離,則資料點到群中心B的距離一定比大於A的距離

### K-means演算法的優缺點
#### K-means演算法的優點
* 速度快
* 參數簡單
#### K-means演算法的缺點
* 無法區分噪點或離群點
* 不適用非凸資料分佈
* 資料不平均、各類變異不同
## 26. Unsupervised Learning Algorithms - DBSCAN
### DBSCAN演算法
* DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
* 分群演算法
* 分群依據為密度,不需要設定群組數,因此相較於K-Means能更好的找出不同形狀的資料群,且能找出離群點(最接近它的點也很遠)
* 有偵測距離與最少樣本數兩個參數
* 以某個資料點為中心,在其周圍的偵測距離內若有最少樣本數以上個資料點,則此區域稱為密集區(Dense region)
該資料點稱為核心樣本或核心點(Core samples, core points)
* 位於某資料點為中心的密集區但不符合樣本的資料點稱為邊界點(Boundary points)
* 不在任何密集區的資料點被歸類為雜訊(Noise),亦即不屬於任何群組
### DBSCAN演算法步驟
1. 挑選一個無標記的資料點v,如果是核心點,則給一個新的群組標記並進行下個步驟,否則標記為雜訊並重複此步驟
2. 拜訪此資料點的所有鄰居(距離小於偵測距離r),若尚無標記,則設定與v相同標記
3. 如果鄰居資料點也是核心點,以該鄰居資料點為中心重複步驟2,直到沒有其他核心點
4. 重複步驟1~3,直到所有資料點都處理完畢
### DBSCAN範例說明
* 從資料點中選一個未標記的點
* 如果是核心點,則把範圍內資料點標記同一群組
* 如果不是核心點,則設為雜訊,繼續搜尋

* 檢查所有鄰居,如果鄰居也是核心點,則重複直到沒有鄰居核心

* 重複步驟1~3,找到下一個未標記點,重新開始

* 直到掃描完所有點

### DBSCAN演算法的優缺點
#### DBSCAN演算法的優點
* 不用設定離群數
* 能找出離群點(噪點)
* 能適用比較複雜的資料狀態
#### DBSCAN演算法的缺點
* 參數設定不好會影響效果甚大
* 如果資料點有不同的密度,且差異很大,DBSCAN將無法提供一個好的分群結果
## 27. Introduction to AlphaGo
### AlphaGo演算法
* 蒙地卡羅樹搜尋(Monte Carlo based Tree Search, MCTS)
* 深層神經網路(Deep Neural Networks, DNN)
* 卷積神經網路(Convolutional Neural Networks, CNN)
* 強化學習(Reinforcement Learning, RL)
### 蒙地卡羅模擬搜尋(原始想法)
* 對於每一個可能的下一步,都進行大量的模擬,然後計算勝率,選擇最高勝率的著手落子
* 但由於隨機性太高,在一開始剛引進蒙地卡羅模擬的程式還沒辦法獲勝
### 解決策略
* 主要策略:保持==開發==和==探勘==的平衡
* Exploitation: 開發目前最好的步
* Exploration: 探勘其他步,看是否可以獲得更好的報酬
* 信賴上界(Upper Confidence Bound;UCB)

### 蒙地卡羅樹搜尋演法

### 策略網路(policy network)
* 為了降低遊戲樹的分支度,AlphaGo訓練一個策略網路(神經網路)來預測高手可能回應的著手
### 評估網路(value network)
* 為了讓自我模擬期局能更像高手的對弈,AlphaGo訓練一個評估網路(神經網路)來引導棋局的模擬
### 強化式學習
* 強化式學習的目的為代理人(Agent)對環境(Environment)進行一連串的動作,使得整個過程中可以獲得的累積獎勵(cumulative reward)最大化
### AlphaGO運作圖解

## 28. Introduction to Othello Contest Plateform
# 自然語言筆記
自然語言處理的目的是要讓電腦能夠處理人類的語言
#### Turing Test
如果一個人(代號A)使用自然語言透過終端機去詢問兩個他看不見的用戶端任意問題。
而用戶端中一個是正常思維的人(代號B)、一個是機器(代號C)。
如果經過若干詢問以後,A不能得出實質的區別來分辨B與C的不同,則此機器C通過圖靈測試。
## 自然語言常見處理任務
### 分詞/斷句
* 將文字語料(corpus)切分為單元詞彙(word)
* 英文透過空白、標點符合隔開單詞,但中文並非如此
Ex:邁向充滿希望的新世紀 ⭢ 邁向 充滿 希望 的 新 世紀
### 詞性標記
* 為每隔單詞指定相對應的詞型,詞性包含名詞(n)、形容詞(a)、副詞(d)、連接詞(c)、介系詞(p)、助詞(u)、時間詞(t)等
Ex:邁向 充滿 希望 的 新 世紀 ⭢ 邁向/v 充滿/v 希望/n 的/u 新/a 世紀/n
### 具名實體識別(NER, Named Entity Recognition)
* 從給定的文字或語料中辨識出一些實體(entity),也就是較長的專有名詞,如:人物、地點、機構名稱
Ex:[台灣/n 電腦/n 對局/v 學會/n] 將於/v 2022年/t 在/v 暨南大學/n 舉辦/v 比賽/n
### 消除單詞歧義(WSD, Word-Sense Disambiguation)
* 識別出單詞的正確意義
Ex:The dog **barked** at the mailman. 狗對郵差**吠**
Tree **bark** is sometimes used as a medicine. 樹**皮**有時被用作藥物
### 句子/摘要分類
* 將句子或摘要進行二元或多元分類
* 應用於垃圾信件偵測、新聞文章分類(財經、政治等類別、產品評價好壞(正、負評)等
### 語言生成
* 使用大量文件(語料庫)進行學習模型的訓練,再使用此模型產生新的文字
### 問題答覆
* 技術具商業價值,應用於客服聊天機器人、虛擬助理和智慧管家
* 需要資訊檢索,知識表達的技術配合
### 機器翻譯
* 將句子或一段文字從來源語言(source language)轉換成目標語言(target language)
* 語言間的轉換,單詞語單詞間的關係並非一對一轉換,需要單詞對齊(word alignment)
## 自然語言處理的派別
* 基於規則的專家系統
* 成功案例:1980馬丁波特所提出的波特詞幹演算法(Porter stemming algorithm),被廣泛應用在英語詞幹提取
* 每條規則是一系列的if, then
* 高度依賴專家知識
* 基於統計的學習方法
* 使用統計方法讓機器自動學習
* 降低對專家的依賴
## 傳統自然語言處理做法
* 傳統機器學習在自然語言處理
處理步驟:
1. 資料預處理階段:刪除不需要資料
2. 特徵工程階段:將文字資料轉換成數值表達方式
3. 學習階段:運用機器學習演算法進行模型訓練
4. 面對全新資料進行預測
* 傳統機器學習在自然語言處理流程

### 資料預處理
* 詞幹處理:例如將文字過去式改為原型
* 去除標點符號
### 特徵工程
* 單詞袋(BOW, Bag-of-Words)
* 將文章中所有的單詞收集成為詞彙集(vocabulary)並且統計各單詞出現的頻率,用以創建特徵向量
* 嚴重限制:沒有記住單詞出現的順序
Ex:
Bob went to the market to buy some flowers.
Bob bought the flowers to give to Mary.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ vocabulary
[“Bob”, “went”, “to”, “the”, “market”, “buy”, “some”, “flowers”, “bought”, “give”, “Mary”]
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ vectors
⠀⠀⠀⠀⠀⠀⠀⠀⠀ [1, 1, 2, 1, 1, 1, 1, 1, 0, 0, 0]
⠀⠀⠀⠀⠀⠀⠀⠀⠀ [1, 0, 2, 1, 0, 0, 0, 1, 1, 1, 1]
* N-gram
* 將文字分解成多個由N個字母(或單詞)組成的單元素,用以創建特徵向量
Ex:
Bob went to the market to buy some flowers.
Bob bought the flowers to give to Mary.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ 2-gram
[“# Bob”, “Bob went”, “went to”, “to the”, “the market”, “market to”, “to buy”, “buy
some”, “some flowers”, “flowers #”, “Bob bought”, “bought the”, “the flowers”,
“flowers to”, “to give”, “give to”, “to Mary”, “Mary #”]
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ vectors
⠀⠀⠀⠀⠀[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
⠀⠀⠀⠀⠀[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]
### 學習模型流程
* 隱馬可夫模型(HMM, Hidden Markov Model)
* 句子修正器(sentence planner)
* 通篇修正器(discourse planner)

### 學習模型範例
* 隱馬可夫模型會針對語料庫中的統計分機結果進行HMM模型訓練
* 利用句子修正器(結合文法規則庫)修正片語中可能出現的語言學錯誤(構詞型態、文法錯誤)
* 通篇修正器可以重新排列句子,建構出所要傳達的一組訊息
### 深度學習自然語言處理做法
* 循環神經網路(RNN, Recurrent Nerual Networks)
* 具備時間序列(記憶)功能的模型,可考慮文句前後文關係

* 長短期記憶(LSTM, Long Short-Term Memory)
* RNN的擴展,具備長期記憶功能

* Transformers
* 用於機器翻譯seq2seq
* Encoder-Decoder Model + Multi-Head Attention

* BERT(Bidirectional Encoder Representation from Transformers)
* Transformers中的Encoder,但有很多層
* Pre-train + fine tune
