Binary Classification
二元分類問題。例如:判斷某張圖片是不是貓的照片。
在處理圖片時,彩色圖片通常會將 RGB 拉成一維當作輸入特徵。例如: 64*64 大小的圖片,其 x 之維度將為 12288*1 。
Notation
m :資料數量(可能是 training set or testing set or all)。
nx:樣本特徵大小。
x :單一樣本的特徵,通常為 nx*1 維。
X :所有樣本的特徵,通常為 nx*m 維。
y :單一樣本的答案,在 Binary Classification 為 1*1 維。
Y :所有樣本的答案,在 Binary Classification 為 1*m 維。
Logistic Regression
一般的線性迴歸的式子為 w1x1+w2x2+…+wnxn+b ,求解 W 與 b 後,即可用此式回答迴歸問題。
而在 Logistic Regression 中為回答二元分類問題,其輸出結果會在 0 和 1 之間,表示正方機率。透過將線性迴歸的式子外圍多包上 Sigmoid 函數來達成此目的。
Logistic Regression Cost Function
在求解 W 與 b 的過程中,必須有一個式子評判目前的 W 和 b 好不好,稱為 Cost Function ,當此 Cost Function 計算出來的值越小,代表 W 和 b 選的越好,即模型表現較好。
決定 Cost Function 前,會先決定 Loss Function 。兩者差別為, Loss Function 是判斷單一樣本的結果好壞, Cost Function 則是所有樣本。 Cost Function 通常即為所有 Loss Function 的平均。
由於 Gradient Descent 的特性,會希望 Cost Function 在 W 和 b 空間下為 Convex 。
同時也要符合 Maximum Likelihood Estimation 之假設,因此設定為:
Gradient Descent
模型的訓練目標為選出使 Cost Function 值越小的 W 和 b 的組合。其中一個方法為 Gradient Descent ,如圖中每次將 W 和 b 往梯度的反方向移動,就可以漸漸降低 Cost Function 的值。
Gradient Descent 將 Cost Function 分別對 W 和 b 做偏微分。該數字的意義為若將現在的 W 或 b 加上一個極小的數字後, Cost Function 會上升或下降多少。
為了使 Cost Function 數值下降,若偏微分為正,應將 W 或 b 往下調、偏微分為負,應將 W 或 b 往上調。因此可以設定成現在的 W 或 b 減掉偏微分的數值,為新的 W 或 b 。
上圖為單一樣本,即 Loss Function 的偏微分, Cost Function 的偏微分是取 Loss Function 偏微分的平均。
Vectorization
盡量不要使用 For Loop ,用向量化的方式計算並使用 numpy 內建的函數。如此程式會自動進行平行處理。
將每個樣本平行堆疊在一個矩陣內,即可用矩陣運算的方式一次計算出所有樣本的結果。
Broadcasting in Python Numpy
在 Python Numpy 中,矩陣只要有一個維度對應正確、另一個維度是一,仍可以進行加減乘除。因為 Python Numpy 會自動重複資料,補齊另一個維度。
Note on Python Numpy
Python Numpy 有種特別的向量,其維度為 (n, ) ,稱其為 Rank 1 Array 。用這種向量常會發生非預期的行為,因此並不建議使用,應使用 .reshape(n, 1) 將其轉換成正常的向量。
Note on Implementation of HW
keepdims=True ,會讓 Numpy 輸出維持一樣維度的向量,在這邊的目的是避免 Numpy 輸出 Rank 1 Array 。
使用 Logistic Regression 在此辨識貓的作業上,可以達到約 70% 的正確率。