特徵工程(六): 非線性特徵提取和模型堆疊

來源:https://mp.weixin.qq.com/s/vEWP-xej_aEcyu_9dy5XwQ

當在數據一個線性子空間像扁平餅時 PCA 是非常有用的。但是如果數據形成更復雜的形狀呢?一個平面(線性子空間)可以推廣到一個 流形 (非線性子空間),它可以被認爲是一個被各種拉伸和滾動的表面。

 

如果線性子空間是平的紙張,那麼捲起的紙張就是非線性流形的例子。你也可以叫它瑞士捲。(見圖 7-1),一旦滾動,二維平面就會變爲三維的。然而,它本質上仍是一個二維物體。換句話說,它具有低的內在維度,這是我們在“直覺”中已經接觸到的一個概念。如果我們能以某種方式展開瑞士捲,我們就可以恢復到二維平面。這是非線性降維的目標,它假定流形比它所佔據的全維更簡單,並試圖展開它。

 

關鍵是,即使當大流形看起來複雜,每個點周圍的局部鄰域通常可以很好地近似於一片平坦的表面。換句話說,他們學習使用局部結構對全局結構進行編碼。非線性降維也被稱爲非線性嵌入,或流形學習。非線性嵌入可有效地將高維數據壓縮成低維數據。它們通常用於 2-D 或 3-D 的可視化。

 

然而,特徵工程的目的並不是要使特徵維數儘可能低,而是要達到任務的正確特徵。在這一章中,正確的特徵是代表數據空間特徵的特徵。

 

聚類算法通常不是局部結構化學習的技術。但事實上也可以用他們這麼做。彼此接近的點(由數據科學家使用某些度量可以定義的“接近度”)屬於同一個簇。給定聚類,數據點可以由其聚類成員向量來表示。如果簇的數量小於原始的特徵數,則新的表示將比原始的具有更小的維度;原始數據被壓縮成較低的維度。

與非線性嵌入技術相比,聚類可以產生更多的特徵。但是如果最終目標是特徵工程而不是可視化,那這不是問題。

我們將提出一個使用 k 均值聚類算法來進行結構化學習的思想。它簡單易懂,易於實踐。與非線性流體降維相反,k 均值執行非線性流形特徵提取更容易解釋。如果正確使用它,它可以是特徵工程的一個強大的工具。

 

k 均值聚類

k 均值是一種聚類算法。聚類算法根據數據在空間中的排列方式來分組數據。它們是無監督的,因爲它們不需要任何類型的標籤,使用算法僅基於數據本身的幾何形狀來推斷聚類標籤。

 

聚類算法依賴於 度量 ,它是度量數據點之間的緊密度的測量。最流行的度量是歐幾里德距離或歐幾里得度量。它來自歐幾里得幾何學並測量兩點之間的直線距離。我們對它很熟悉,因爲這是我們在日常現實中看到的距離。

 

 

 

 

曲面拼接聚類

應用聚類一般假定存在自然簇,即在其他空的空間中存在密集的數據區域。在這些情況下,有一個正確的聚類數的概念,人們已經發明瞭聚類指數用於測量數據分組的質量,以便選擇k。

 

然而,當數據像如圖 7-2(c)那樣均勻分佈時,不再有正確的簇數。在這種情況下,聚類算法的作用是矢量量化,即將數據劃分成有限數量的塊。當使用量化矢量而不是原始矢量時,可以基於可接受的近似誤差來選擇簇的數目。

 

從視覺上看,k 均值的這種用法可以被認爲是如圖 7-3 那樣用補丁覆蓋數據表面。如果在瑞士捲數據集上運行 k 均值,這確實是我們所得到的。例 7-2 使用sklearn生成瑞士捲上的嘈雜數據集,將其用 k 均值聚類,並使用 Matplotlib 可視化聚類結果。數據點根據它們的簇 ID 着色。

 

 

 

在這個例子中,我們在瑞士捲表面上隨機生成 1500 個點,並要求 k 均值用 100 個簇來近似它。我們提出 100 這個數字,因爲它看起來相當大,使每一簇覆蓋了相當小的空間。結果看起來不錯;簇羣確實是很小的的,並且流體的不同部分被映射到不同的簇。不錯!但我們完成了嗎?

 

問題是,如果我們選擇一個太小的K,那麼從多元學習的角度來看,結果不會那麼好。圖 7-5 顯示了 k 均值用 10 個簇在瑞士捲的輸出。我們可以清楚地看流體的完全的部分都被映射到相同的簇(例如黃色、紫色、綠色和品紅簇)的數據。

 

 

如果數據在空間中均勻分佈,則選擇正確的k就被歸結爲球填充問題。在D維中,可以擬合半徑約爲R1/rD次冪的球。每個 k 均值聚類是一個球面,半徑是用質心表示球面中的點的最大誤差。因此,如果我們願意容忍每個數據點R的最大逼近誤差,那麼簇的數目是O((1/R)^D),其中D是數據的原始特徵空間的維數。

對於 k 均值來說,均勻分佈是最壞的情況。如果數據密度不均勻,那麼我們將能夠用更少的簇來表示更多的數據。一般來說,很難知道數據在高維空間中是如何分佈的。我們可以保守的選擇更大的 K。但是它不能太大,因爲K將成爲下一步建模步驟的特徵數量。

 

用於分類的 k 均值特徵化

當使用 k 均值作爲特徵化過程時,數據點可以由它的簇成員(分類變量羣組成員的稀疏獨熱編碼)來表示,我們現在來說明。

如果目標變量也是可用的,那麼我們可以選擇將該信息作爲對聚類過程的提示。一種合併目標信息的方法是簡單地將目標變量作爲 k 均值算法的附加輸入特徵。由於目標是最小化在所有輸入維度上的總歐氏距離,所以聚類過程將試圖平衡目標值和原始特徵空間中的相似性。可以在聚類算法中對目標值進行縮放以獲得更多或更少的關注。目標的較大差異將產生更多關注分類邊界的聚類。

 

 

 

k 均值特徵化

聚類算法分析數據的空間分佈。因此,k 均值特徵化創建了一個壓縮的空間索引,該數據可以在下一階段被饋送到模型中。這是模型堆疊(stacking)的一個例子。

 

例 7-3 顯示了一個簡單的 k 均值特徵。它被定義爲可以訓練數據和變換任何新數據的類對象。爲了說明在聚類時使用和不使用目標信息之間的差異,我們將特徵化器應用到使用sklearn的 make——moons 函數(例 7-4)生成的合成數據集。然後我們繪製簇邊界的 Voronoi 圖。圖 7-6 展示出了結果的比較。底部面板顯示沒有目標信息訓練的集羣。注意,許多簇跨越兩個類之間的空空間。頂部面板表明,當聚類算法被給定目標信息時,聚類邊界可以沿着類邊界更好地對齊。

 

 

 

 

讓我們測試 k 均值特徵分類的有效性。例 7-5 對 k 均值簇特徵增強的輸入數據應用 Logistic 迴歸。比較了與使用徑向基核的支持向量機(RBF SVM)、K 近鄰(KNN)、隨機森林(RF)和梯度提升樹(GBT)的結果。隨機森林和梯度提升樹是最流行的非線性分類器,具有最先進的性能。RBF 支持向量機是歐氏空間的一種合理的非線性分類器。KNN 根據其 K 近鄰的平均值對數據進行分類。(請參閱“分類器概述”來概述每個分類器。)

 

分類器的默認輸入數據是數據的 2D 座標。Logistic 迴歸也給出了簇成員特徵(在圖 7-7 中標註爲“k 均值的 LR”)。作爲基線,我們也嘗試在二維座標(標記爲“LR”)上進行邏輯迴歸。

 

 

可選擇的密集化

與獨熱簇相反,數據點也可以由其逆距離的密集向量表示到每個聚類中心。這比簡單的二值化簇保留了更多的信息,但是現在表達是密集的。這裏有一個折衷方案。一個熱集羣成員導致一個非常輕量級的稀疏表示,但是一個可能需要較大的K來表示複雜形狀的數據。反向距離表示是密集的,這對於建模步驟可能花費更昂貴,但是這可以需要較小的K

稀疏和密集之間的折衷是隻保留最接近的簇的p的逆距離。但是現在P是一個額外的超參數需要去調整。(現在你能理解爲什麼特徵工程需要這麼多的步驟嗎?),天下沒有免費的午餐。

 

 

使用 k 均值將空間數據轉換爲模型堆疊的一個例子,其中一個模型的輸入是另一個模型的輸出。堆疊的另一個例子是使用決策樹類型模型(隨機森林或梯度提升樹)的輸出作爲線性分類器的輸入。堆疊已成爲近年來越來越流行的技術。非線性分類器訓練和維護是昂貴的。堆疊的關鍵一點是將非線性引入特徵,並且使用非常簡單的、通常是線性的模型作爲最後一層。該特徵可以離線訓練,這意味着可以使用昂貴的模型,這需要更多的計算能力或內存,但產生有用的特徵。頂層的簡單模型可以很快地適應在線數據的變化分佈。這是精度和速度之間的一個很好的折衷,這經常被應用於需要快速適應改變數據分佈的應用,比如目標廣告。

 

 

 

 

 

可能會問 k 均值特化步驟中的目標變量是否也會導致這樣的問題。答案是“是的”,但並不像桶計數(Bin-counting)計算的那麼多。如果我們使用相同的數據集來學習聚類和建立分類模型,那麼關於目標的信息將泄漏到輸入變量中。因此,對訓練數據的精度評估可能過於樂觀,但是當在保持驗證集或測試集上進行評估時,偏差會消失。此外,泄漏不會像桶計數那麼糟糕(參見“桶計數”),因爲聚類算法的有損壓縮將抽象掉一些信息。要格外小心防止泄漏,人們可以始終保留一個單獨的數據集來導出簇,就像在桶計數下一樣。

 

k 均值特化對有實數、有界的數字特徵是有用的,這些特徵構成空間中密集區域的團塊。團塊可以是任何形狀,因爲我們可以增加簇的數量來近似它們。(與經典的類別聚類不同,我們不關心真正的簇數;我們只需要覆蓋它們。)

 

k 均值不能處理歐幾里得距離沒有意義的特徵空間,也就是說,奇怪的分佈式數字變量或類別變量。如果特徵集包含這些變量,那麼有幾種處理它們的方法:

  1. 僅在實值的有界數字特徵上應用 k 均值特徵。

     

  2. 定義自定義度量(參見第?章以處理多個數據類型並使用 k 中心點算法。(k 中心點類似於 k 均值,但允許任意距離度量。)

  3. 類別變量可以轉換爲裝箱統計(見“桶計數”),然後使用 K 均值進行特徵化。

結合處理分類變量和時間序列的技術,k 均值特化可以自適應的處理經常出現在客戶營銷和銷售分析中的豐富數據。所得到的聚類可以被認爲是用戶段,這對於下一個建模步驟是非常有用的特徵。

 

我們將在下一章中討論的深度學習,是通過將神經網絡層疊在一起,將模型堆疊提升到一個全新的水平。ImageNet 挑戰的兩個贏家使用了 13 層和 22 層神經網絡。就像 K 均值一樣,較低層次的深度學習模型是無監督的。它們利用大量可用的未標記的訓練圖像,並尋找產生良好圖像特徵的像素組合.

https://github.com/apachecn/feature-engineering-for-ml-zh/blob/master/docs/7.%E9%9D%9E%E7%BA%BF%E6%80%A7%E7%89%B9%E5%BE%81%E6%8F%90%E5%8F%96%E5%92%8C%E6%A8%A1%E5%9E%8B%E5%A0%86%E5%8F%A0.md

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章