吳恩達機器學習筆記-非監督學習
聚類
之前的課程中我們學習的都是監督學習相關的演算法,現在來開始看非監督學習。非監督學習相對於監督非學習來看,其使用的是未標記的訓練集而監督學習的是標記的訓練集。換句話說,我們不知道向量y的預期結果,僅僅只是擁有一個可以找到結構的特徵的集合。
其中一種可能的結構是,所有的資料可以大致地劃分成兩組,這種劃分的演算法稱為聚類演算法。 這是我們第一種 無監督學習演算法。在很多場景下我們會使用聚類的方式來解決非監督學習問題,比如市場分割,社會網路分析等等。
K-means
K-Means演算法是最流行和廣泛使用的自動將資料分組到相干子集的演算法,其演算法的步驟主要是:
- 首先選擇 K 個隨機的點,稱為聚類中心(cluster centroids);
- 對於資料集中的每一個數據,按照距離K箇中心點的距離,將其與距離最近的中心點關聯起來,與同一個中心點關聯的所有點聚成一類。
- 計算每一個組的平均值,將該組所關聯的中心點移動到平均值的位置。
- 重複步驟2-4直至中心點不再變化。
下圖展示了對n個樣本點進行K-means聚類的效果,這裡k取2。
用 , 來表示聚類中心,用
,來儲存與第 i 個例項資料最近的聚類中心的索引,K-均值演算法的虛擬碼如下:
Randomly initialize K cluster centroids mu(1), mu(2), ..., mu(K) Repeat: for i = 1 to m: c(i):= index (from 1 to K) of cluster centroid closest to x(i) for k = 1 to K: mu(k):= average (mean) of points assigned to cluster k
演算法分為兩個步驟,第一個for迴圈是賦值步驟,即:對於每一個樣例i,計算其應該屬於的類。第二個for迴圈是聚類中心的移動,即:對於每一個類 K重新計算該類的質心。
在K-means演算法中的變數有下面幾個:
用這些變數我們可以定義代價函式為:
引起的代價。迭代的過程一定會是每一次迭代都在減小代價函式,不然便是出現了錯誤。
隨機初始化
在執行K-均值演算法的之前,我們首先要隨機初始化所有的聚類中心點,下面介紹怎樣做:
- 我們應該選擇 K<m,即聚類中心點的個數要小於所有訓練集例項的數量
- 隨機選擇 K 個訓練例項。
- 令 K 個聚類中心分別與這 K個訓練例項相等
K-均值的一個問題在於它有可能會停留在一個區域性最小值處,而這取決於初始化的情況。為了解決這個問題,我們通常需要多次執行K-均值演算法,每一次都重新進行隨機初始化,最後再比較多次執行K-均值的結果,選擇代價函式最小的結果。這種方法在K較小的時候(2--10)還是可行的,但是K如果較大,這麼做也可能不會有明顯地改善。
for i = 1 to 100: randomly initialize k-means run k-means to get 'c' and 'm' compute the cost function (distortion) J(c,m) pick the clustering that gave us the lowest cost
選擇聚類數
K的選擇往往是任意的或者說是模糊不清的,通常是需要根據不同的問題人工進行選擇的。選擇的時候我們需要思考運用K-均值演算法聚類的動機是什麼,然後選擇能最好服務於該目的標聚類數。
當人們在討論,選擇聚類數目的方法時,有一個可能會談及的方法叫作“肘部法則”。將代價J和聚類K畫在圖中。代價函式會隨著K的增加而降低然後趨於平緩,我們要做的就是找到J開始趨於平緩時的K。然而很多時候,曲線經常是很平緩的,這時的肘部就很不明顯。(note:J一般都是隨著K的增加而降低,但如果K出現了錯誤的區域性最優則會導致不一樣的結果)。
降維
使用降維的動機
有幾個不同的的原因使你可能想要做降維。一是資料壓縮,如果我們有大量多餘的資料時,我們可能想降低特徵的維度,為此可以找到兩個高度相關的特徵,將其畫出影象然後做一條直線來同時描述這兩個特徵。二是資料視覺化,因為資料超過三維就很難可視化了,因此有時候需要將維度下降到3或者以下來達到視覺化的目的。
主成分分析問題
主成分分析(PCA)是最常見的降維演算法。其定義是想把資料從n維降到k維(k小於n),就在這個空間裡面找k個單位向量來表示資料,使得資料點投影到這個面上的誤差最小。如下例子:2到1和3到2:
雖然同是一條直線擬合,但PCA和線性迴歸是不同的:
- 計算loss的方式不同(垂直)。
- PCA沒有標籤Y(非監督)。
PCA演算法
PCA 減少 n 維到 k 維:
。
第二步是計算協方差矩陣(covariance matrix) Σ :第三步是計算協方差矩陣Σ的特徵向量(eigenvectors):
在 Octave 裡我們可以利用奇異值分解(singular value decomposition)來求解,[U, S, V]= svd(sigma)。
。
其中x是n×1維的,因此結果為 k×1 維度。我們不對方差特徵進行處理。
選擇主成分的數量
在PCA演算法中我們把n維特徵變數降維到k維特徵變數。這個數字k也被稱作主成分的數量或者說是我們保留的主成分的數量。我們先來思考兩個值:
- 第一個是:PCA所做的是儘量最小化平均平方對映誤差(Average Squared Projection Error)。
- 第二個是:我還要定義一下資料的總變差(Total Variation)。它的意思是 “平均來看我的訓練樣本距離零向量多遠?
我們把兩個數的比值作為衡量PCA演算法的有效性
定義一個閾值然後實驗k,看看那個最小的k合適。計算步驟如下:
這裡有個技巧:svd函式會返回一個對角矩陣S,他的元素可以很快的計算這個閾值。
主成分分析法的應用建議
PCA演算法主要有以下用途:
- 壓縮:
- 減少記憶體和磁碟的佔用
- 提升演算法的速度
- 視覺化:
- 降維到二維或者三維
有些人覺的PCA也可以用來防止過擬合,但是這是不對的。應該用正則化。正則化使用y標籤最小化損失函式,使用了y標籤資訊。而PCA只單純的看x的分部就刪除了一些特徵,損失率很多資訊。另一個常見的錯誤是,預設地將主要成分分析作為學習過程中的一部分,這雖然很多時候有效果,最好還是從所有原始特徵開始,只在有必要的時候(演算法執行太慢或者佔用太多記憶體)才考慮採用主要成分分析。
以上為吳恩達機器學習非監督學習這一章節的內容。
參考連結
ofollow,noindex">https://zhuanlan.zhihu.com/p/43488853
https://blog.csdn.net/u012052268/article/details/78847915#3維度約簡-主成分分析法pca