筆者最近在學習機器學習的資料降維方法時,有看到一個針對資料做降維的方法,在實務上也非常多人在使用,t-SNE(t-distributed stochastic neighbor embedding,t-隨機鄰近嵌入法),這個方法主要是將高維度的資料進行低維度的轉換,此種降維方式主要是採用非線性的轉換方式,相較於傳統PCA(主成分分析)的降維方式,可以在變數關聯為非線性的關係時能有更好的處理,因為當資料間變項之間的關聯性為非線性時,當使用PCA(主成分分析)這種把資料當成線性關係去處理的時候,就容易產生模型underfitting的情況(白話來說,就是這個模型不適合用來解釋手上的資料,容易產生錯誤的結果)。那t-SNE是如何解釋資料非線性的關係呢,筆者這邊稍微帶一點數學公式,讓讀者可以簡單了解這個方法的理論,如下有A跟B兩個公式,A公式是一個常態分佈的公式,t-SNE將原始資料(高維度的資料)利用常態分佈來去解釋;B公式則是一個自由度為1的t分佈公式,t-SNE將降維後的資料(低維度的資料)利用t分佈來去解釋,利用t分佈去解釋,當原始資料裡面有異常值時,降維後的資料不容易受影響,t分佈在樣本數小的時候,也比較好用來描繪母體的資料,而且因為t分佈的雙尾較寬,因此也可以避免低維度的資料全部擠在一起,無法有效的被分群。因為如果用傳統PCA的方式,容易產生數據的集群混在一起,無法有效的區隔,這樣的狀況其實也代表降維後的資料無法有效的表現原始資料的樣子跟分佈情形。

 

1.jpg

 

    x為高維度(原始資料)的數據,y為低維度(降維後)的數據,P, Q分別代表機率分佈(把資料轉換成機率分佈)。在t-SNE中,為了衡量分佈之間的相似程度(降維後的分佈跟原始資料的相似程度),會使用KL距離(Kullback-Leibler Divergence,也稱為相對熵)作為衡量標準。公式如下,

 

2.jpg

 

    在t-SNE中使用了困惑度(混亂度, perplexity)作為超參數(使用者需要自己定義的參數),當混亂度越高,也代表t-SNE會考慮更多的鄰近點(代表資料表周邊可能有幾個資料點,有點像是集群分析的感覺,每一個質心附近有多少資料點會被歸類成一群),在論文中,是建議困惑度要設在5-50之間,但實務上,其實會根據資料的樣本數去做調整,設定超過50以上的也很常出現

 

3.jpg

 

    t-SNE最後根據上述參數的設定會去計算Cost function(損失函數,監督式學習中用來計算估計值與實際值的誤差,就像線性迴歸會利用最小平方法來去得到實際值與估計值之誤差平方和最小,根據不同的統計模式,損失函數可能有不同的定義),在t-SNE是用KL 距離計算損失函數,公式如下,

 

4.jpg

 

    最後會利用梯度下降法(或隨機梯度下降法)去得到損失函數的解(最小值),公式如下,其實這公式的概念就是利用微積分去求得一條曲線的最低點,也就是最佳的解。

 

5.jpg

 

參考資料

  1. https://reurl.cc/r8xb9b
  2. https://mropengate.blogspot.com/2019/06/t-sne.html
  3. https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html
arrow
arrow
    全站熱搜

    晨晰部落格新站 發表在 痞客邦 留言(0) 人氣()