カランのブログ

Kalan 頭像照片,在淡水拍攝,淺藍背景

四零二曜日電子報上線啦!訂閱訂起來

ソフトウェアエンジニア / 台湾人 / 福岡生活
このブログはRSS Feed をサポートしています。RSSリンクをクリックして設定してください。技術に関する記事はコードがあるのでブログで閲覧することをお勧めします。

今のモード ライト

我會把一些不成文的筆記或是最近的生活雜感放在短筆記,如果有興趣的話可以來看看唷!

記事のタイトルや概要は自動翻訳であるため(中身は翻訳されてない場合が多い)、変な言葉が出たり、意味伝わらない場合がございます。空いてる時間で翻訳します。

還元法におけるPCAとT-Sneについての説明

在機器學習中,特徵數量過多可能會引起一些問題,例如:

  • 過擬合 (overfitting)
  • 處理速度較慢
  • 如果超過三個特徵以上不好視覺化

因此在這種情況下,我們需要對特徵進行降維。在實際應用中,手動挑選特徵明顯不是一個明智的方法。下面介紹兩種在機器學習中常用的降維方法。

PCA(主成份分析)

在介紹 PCA 之前,我們先定義目標:

將具有 n 個特徵空間的樣本,轉換為具有 k 個特徵空間的樣本,其中 k < n

以下是 PCA 的主要步驟:

  1. 將數據標準化
  2. 建立共變異數矩陣(covariance matrix)
  3. 利用奇異值分解(SVD)求得特徵向量(eigenvector)特徵值(eigenvalue)
  4. 通常特徵值由大到小排列,選取前 k 個特徵值和特徵向量
  5. 將原始數據投影到特徵向量上,得到新的特徵數

PCA 中最重要的部分是奇異值分解。接下來談談奇異值分解

直觀理解奇異值分解

在矩陣分解中,奇異值分解是一種著名的方法。矩陣分解在高中數學中最常見的用途之一是解方程式(如 LU 分解)。從奇異值分解的公式中,我們可以直觀地了解:

img

其中 A 是一個 m x n 的矩陣,𝑈 和 V 都是正交矩陣,𝛴 是奇異值矩陣。奇異值矩陣是矩陣 A 對應的特徵值,在 PCA 中也被稱為主成份,代表保存訊息的重要程度,通常按降序排列在對角線上,是一個對稱矩陣。

這裡的 A 對應什麼呢?當然是我們的特徵,但特別要注意的是,這裡的 A 通常使用**共變異數矩陣(covariance matrix)**來計算。記住,在進行奇異值分解之前,數據必須先進行正規化。

共變異數矩陣(covariance matrix)

共變異數矩陣通常用 Sigma 表示,不要與上面的 𝛴 混淆。因此,要進行降維,可以用 U 的前 k 列乘以對應的 𝛴 中的特徵向量,從而獲得新的特徵。從幾何角度來看,

這樣的運算在幾何中實際上是將 X 投影到 U 的前 k 個向量。

從圖中可以看到,黑線表示特徵向量,其長度為特徵值。

PCA 的應用

在降維時,我們希望保留最重要的特徵,而捨棄其他不太重要的特徵。

例如,在判斷一個人時,最重要的判別方式可能是眼睛、鼻子、嘴巴等特徵,所以膚色、頭髮等特徵可以被捨棄。事實上,在人臉辨識中,常常使用 PCA 進行降維。

這是對奇異值分解相當直觀的理解。由於篇幅限制,無法深入探討。如果對奇異值分解感興趣,可以參考維基百科

t-SNE

PCA 是一種直觀且有效的降維方法,但是從三維降到二維時,我們可以看到,一些數據集群完全被搗成一團。

PCA 是一種線性降維方法,但如果特徵之間存在非線性關係,使用 PCA 可能會導致欠擬合。

t-SNE 是另一種降維方法,它使用更複雜的公式來表示高維和低維之間的關係。t-SNE 主要是通過使用高斯分佈的概率密度函數來近似高維數據,並使用 t 分佈來近似低維數據,然後使用 KL 距離計算相似度,最後使用梯度下降(或隨機梯度下降)求解最佳解。

高斯分佈的概率密度函數

img

其中,X 是隨機變量,𝝈 是變異數,𝜇 是平均值。

因此,原始高維數據可以表示為:

img

低維數據可以使用 t 分佈的概率密度函數表示(自由度為 1):

img

其中,x 是高維數據,y 是低維數據。P 和 Q 分別表示概率分佈。

為什麼要使用 t 分佈來近似低維數據呢?主要是因為在轉換為低維後,會損失許多信息,為了不受異常值的影響,可以使用 t 分佈。

當樣本數較少時,t 分佈可以更好地模擬母體分佈,不容易受到異常值的影響。

兩個分佈之間的相似度

通常使用 KL 距離(Kullback-Leibler Divergence)來計算兩個分佈之間的相似度,也稱為相對熵(Relative Entropy)。

img

t-SNE 中使用困惑度(Perp)作為超參數。

img

該論文中提到,通常困惑度在 5 到 50 之間。

成本函數

使用 KL 距離計算成本:

img

梯度可以表示為:

img

最後使用梯度下降法(或隨機梯度下降法)找到最小值。

實驗:使用 MNIST 測試

可以從這裡下載測試集。首先,我們先使用 PCA 將其降維到二維。

PCA

imgPCA 降維

可以看到,降維後的數據幾乎被搗成一團,完全看不出集群。這是因為 PCA 的線性降維過程中損失了太多訊息。

t-SNE

接下來使用 t-SNE 進行測試。

img使用 t-SNE 降維

這是使用 t-SNE 降維後的結果,可以看到降維後的數據仍然清晰地分為不同的集群。從這兩張圖可以明顯看出 PCA 和 t-SNE 的差異。

小結

後來有人提出了一系列改進 t-SNE 效能的算法,詳情可以參考Accelerating t-sne using tree-based algorithms,大多數熱門的資料分析程式語言都已實現了這些算法,例如 sklearn、R、matlab 等。

然而,由於 t-SNE 不是線性降維,執行時間比 PCA 更長。

  • 當特徵數量過多時,使用 PCA 可能會導致降維後的特徵欠擬合(underfitting),此時可以考慮使用 t-SNE 進行降維。
  • t-SNE 的執行時間較長。
  • 論文中還提出了一些優化技巧(如如何選擇困惑度等),由於尚未閱讀完畢,將逐漸補充。

參考資料

次の記事

週刊誌を作った-日本語 800

前の記事

ラムダのいくつかのAPIについてお話します

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee