機器學習之sklearn中的降維算法

2021-01-08 CDA數據分析師

1. PCA與SVD

sklearn中降維算法都被包括在模塊decomposition中,這個模塊本質是一個矩陣分解模塊。在過去的十年中,如果要討論算法進步的先鋒,矩陣分解可以說是獨樹一幟。矩陣分解可以用在降維,深度學習,聚類分析,數據預處理,低緯度特徵學習,推薦系統,大數據分析等領域。在2006年,Netflix曾經舉辦了一個獎金為100萬美元的推薦系統算法比賽,最後的獲獎者就使用了矩陣分解中的明星:奇異值分解SVD。(~o ̄3 ̄)~菊安醬會講SVD在推薦系統中的應用,大家不要錯過!

SVD和主成分分析PCA都屬於矩陣分解算法中的入門算法,都是通過分解特徵矩陣來進行降維,它們也是我們今天要說的重點。雖然是入門算法,卻不代表PCA和SVD簡單:下面兩張圖是我在一篇SVD的論文中隨意截取的兩頁,可以看到滿滿的數學公式(基本是線性代數)。要想給大家講明白這些公式,我講完不吐血大家聽完也吐血了。所以今天,我會用最簡單的方式為大家呈現降維算法的原理,但這註定意味著大家無法看到這個算法的全貌,在機器學習中逃避數學是邪道,所以更多原理大家自己去閱讀。

在降維過程中,我們會減少特徵的數量,這意味著刪除數據,數據量變少則表示模型可以獲取的信息會變少,模型的表現可能會因此受影響。同時,在高維數據中,必然有一些特徵是不帶有有效的信息的(比如噪音),或者有一些特徵帶有的信息和其他一些特徵是重複的(比如一些特徵可能會線性相關)。我們希望能夠找出一種辦法來幫助我們衡量特徵上所帶的信息量,讓我們在降維的過程中,能夠即減少特徵的數量,又保留大部分有效信息——將那些帶有重複信息的特徵合併,並刪除那些帶無效信息的特徵等等——逐漸創造出能夠代表原特徵矩陣大部分信息的,特徵更少的,新特徵矩陣。

上周的特徵工程課中,我們提到過一種重要的特徵選擇方法:方差過濾。如果一個特徵的方差很小,則意味著這個特徵上很可能有大量取值都相同(比如90%都是1,只有10%是0,甚至100%是1),那這一個特徵的取值對樣本而言就沒有區分度,這種特徵就不帶有有效信息。從方差的這種應用就可以推斷出,如果一個特徵的方差很大,則說明這個特徵上帶有大量的信息。因此,在降維中,PCA使用的信息量衡量指標,就是樣本方差,又稱可解釋性方差,方差越大,特徵所帶的信息量越多。

Var代表一個特徵的方差,n代表樣本量,xi代表一個特徵中的每個樣本取值,xhat代表這一列樣本的均值。

2. 降維究竟是怎樣實現?

class

sklearn.decomposition.PCA

(n_components=None, copy=True, whiten=False, svd_solver=』auto』, tol=0.0, iterated_power=』auto』, random_state=None)

PCA作為矩陣分解算法的核心算法,其實沒有太多參數,但不幸的是每個參數的意義和運用都很難,因為幾乎每個參數都涉及到高深的數學原理。為了參數的運用和意義變得明朗,我們來看一組簡單的二維數據的降維。

我們現在有一組簡單的數據,有特徵x1和x2,三個樣本數據的坐標點分別為(1,1),(2,2),(3,3)。我們可以讓x1和x2分別作為兩個特徵向量,很輕鬆地用一個二維平面來描述這組數據。這組數據現在每個特徵的均值都為2,方差則等於:

每個特徵的數據一模一樣,因此方差也都為1,數據的方差總和是2。

現在我們的目標是:只用一個特徵向量來描述這組數據,即將二維數據降為一維數據,並且儘可能地保留信息量,即讓數據的總方差儘量靠近2。於是,我們將原本的直角坐標系逆時針旋轉45°,形成了新的特徵向量x1*和x2*組成的新平面,在這個新平面中,三個樣本數據的坐標點可以表示為$(\sqrt{2},0)$,$(2\sqrt{2},0)$,$(3\sqrt{2},0)$。可以注意到,x2*上的數值此時都變成了0,因此x2*明顯不帶有任何有效信息了(此時x2*的方差也為0了)。此時,x1*特徵上的數據均值是$2\sqrt{2}$,而方差則可表示成:

x1*上的數據均值為0,方差也為0。

此時,我們根據信息含量的排序,取信息含量最大的一個特徵,因為我們想要的是一維數據。所以我們可以將x2*刪除,同時也刪除圖中的x2*特徵向量,剩下的x1*就代表了曾經需要兩個特徵來代表的三個樣本點。通過旋轉原有特徵向量組成的坐標軸來找到新特徵向量和新坐標平面,我們將三個樣本點的信息壓縮到了一條直線上,實現了二維變一維,並且儘量保留原始數據的信息。一個成功的降維,就實現了。

不難注意到,在這個降維過程中,有幾個重要的步驟:

在步驟3當中,我們用來找出n個新特徵向量,讓數據能夠被壓縮到少數特徵上並且總信息量不損失太多的技術就是矩陣分解。PCA和SVD是兩種不同的降維算法,但他們都遵從上面的過程來實現降維,只是兩種算法中矩陣分解的方法不同,信息量的衡量指標不同罷了。PCA使用方差作為信息量的衡量指標,並且特徵值分解來找出空間V。降維時,它會通過一系列數學的神秘操作(比如說,產生協方差矩陣$\frac{1}{n}XX^{T}$)將特徵矩陣X分解為以下三個矩陣,其中$Q$和$Q^{-1}$是輔助的矩陣,Σ是一個對角矩陣(即除了對角線上有值,其他位置都是0的矩陣),其對角線上的元素就是方差。降維完成之後,PCA找到的每個新特徵向量就叫做「主成分」,而被丟棄的特徵向量被認為信息量很少,這些信息很可能就是噪音。

而SVD使用奇異值分解來找出空間V,其中Σ也是一個對角矩陣,不過它對角線上的元素是奇異值,這也是SVD中用來衡量特徵上的信息量的指標。U和V^{T}分別是左奇異矩陣和右奇異矩陣,也都是輔助矩陣。

在數學原理中,無論是PCA和SVD都需要遍歷所有的特徵和樣本來計算信息量指標。並且在矩陣分解的過程之中,會產生比原來的特徵矩陣更大的矩陣,比如原數據的結構是(m,n),在矩陣分解中為了找出最佳新特徵空間V,可能需要產生(n,n),(m,m)大小的矩陣,還需要產生協方差矩陣去計算更多的信息。而現在無論是Python還是R,或者其他的任何語言,在大型矩陣運算上都不是特別擅長,無論代碼如何簡化,我們不可避免地要等待計算機去完成這個非常龐大的數學計算過程。因此,降維算法的計算量很大,運行比較緩慢,但無論如何,它們的功能無可替代,它們依然是機器學習領域的寵兒。

相關焦點

  • 機器學習之sklearn基礎教程!
    本文在基於讀者已經基本了解這些基本算法的原理以及推導的基礎上,使用sklearn工具包進行算法實踐,如果大家沒有掌握基本算法原理,文中也會給出一些優秀的連結方便大家學習。如果大家對基本分類算法的基本原理有需求,可以在評論區寫下自己的需求,我們會根據大家的意見推出相應的分享。
  • t-SNE:可視化效果最好的降維算法
    對於數據科學專業人員來說,有必要對工作數據進行可視化和深入了解,以便更好地完成工作,我們可以使用降維技術 降維技術的另一個最受歡迎的用例是在訓練ML模型時降低計算複雜度。通過使用降維技術,數據集的大小已經縮小,與此同時,有關原始數據的信息也已應用於低維數據。因此,機器學習算法從輸入數據集中學習既簡單又省時。
  • 機器學習:特徵選擇和降維實例
    不幸的是,在Do not Overfit II競賽(kaggle.com/c/dont-overfit-ii/data)中,領域知識的使用是不可能的,因為我們有一個二元目標和300個連續變量,這迫使我們嘗試特徵選擇技術。簡介通常,我們將特徵選擇和降維組合在一起使用。雖然這兩種方法都用於減少數據集中的特徵數量,但存在很大不同。
  • 機器學習中的「維度」是什麼?
    「維度」這個詞在機器學習裡面,應該是一個高頻詞,它經常出現在人們的視野中,比如說隨機森林是通過隨機抽取特徵來建樹,以避免高維計算;再比如說,sklearn中導入特徵矩陣,必須是至少二維;特徵選擇的目的是通過降維來降低算法的計算成本……這些語言都很正常地被我用來使用,直到有一天,一個小夥伴問了我
  • 機器學習之基於sklearn的KMeans聚類
    聚類算法,無監督學習的代表算法,又叫做「無監督分類」即在訓練的時候只需要特徵矩陣,不需要真實值標籤可以有效地幫助我們探索數據的自然分布一、KMeans算法的運行過程運行的流程如下:自動聚類時的質心點的每步驟變化如下:
  • 機器學習算法基礎(使用Python代碼)
    今天,作為一名數據科學家,我可以用每小時幾美元的成本,用複雜算法構建數據處理機器。但是實現這並不容易!因為我需要面臨度過無數個黑暗的日日夜夜。機器學習算法類型從廣義上講,有3種類型的機器學習算法。創建本指南背後的想法是簡化世界各地有抱負的數據科學家和機器學習愛好者的旅程。通過本指南,我將幫助您解決機器學習問題並從經驗中獲益。我提供了對各種機器學習算法的高級理解以及運行它們的R&Python代碼。這些應該足以弄髒你的手。線性回歸主要有兩種類型:簡單線性回歸和多元線性回歸。簡單線性回歸的特徵在於一個自變量。
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    上一篇文章中介紹了機器學習的簡單知識,還有python中進行機器學習實踐需要的生態環境,接下來將會通過鳶尾花分類這個例子對機器學習做一個簡要的介紹。通過一步一步地實現這個項目來介紹以下內容。導入和使用python中機器學習的各個方面的類庫。導入數據,並通過描述性分析、可視化等對數據進行分析。創建六個模型,並從中選擇準確度最高的模型。
  • 機器學習之決策樹在sklearn中的實現
    Scikit-learn 0.20.0 (你的版本至少要0.20Graphviz 0.8.4 (沒有畫不出決策樹哦,安裝代碼conda install python-graphvizNumpy 1.15.3, Pandas 0.23.4, Matplotlib 3.0.1, SciPy 1.1.0用SKlearn 建立一棵決策樹這裡採用的數據集是SKlearn中的紅酒數據集
  • 機器學習算法一覽(附python和R代碼)
    寫這篇文章的目的,就是希望它可以讓有志於從事數據科學和機器學習的諸位在學習算法的路上少走些路。我會在文章中舉例一些機器學習的問題,你們也可以在思考解決這些問題的過程中得到啟發。我也會寫下對於各種機器學習算法的一些個人理解,並且提供R和Python的執行代碼。讀完這篇文章,讀者們至少可以行動起來親手試試寫一個機器學習的程序。
  • 哈工大碩士生用Python實現11種經典數據降維算法,原始碼庫已開放
    其中,如果得到當特徵數 (D) 遠大於樣本數 (N) 時,可以使用一點小技巧實現 PCA 算法的複雜度轉換。PCA 降維算法展示當然,這一算法雖然經典且較為常用,其不足之處也非常明顯。KPCA 降維算法展示詳細內容可參見 《Python 機器學習》之特徵抽取——kPCA:https://blog.csdn.net/weixin_40604987/article/details/79632888 代碼地址:https://github.com/heucoder/dimensionality_reduction_alo_codes/blob/master/
  • 哈工大碩士生用 Python 實現了 11 種經典數據降維算法,原始碼庫已...
    PCA 降維算法展示當然,這一算法雖然經典且較為常用,其不足之處也非常明顯。KPCA 降維算法展示詳細內容可參見 《Python 機器學習》之特徵抽取——kPCA:由於 sklearn 中 MDS 是採用迭代優化方式,下面實現了迭代和非迭代的兩種。
  • 谷歌AutoML鼻祖新作AutoML-Zero:從零開始構建機器學習算法
    【新智元導讀】市面上的自動機器學習算法多如牛毛,但並沒有得到很好的普及,因為這些算法限制了搜索的空間,很多研究者還是需要自己設計機器學習模型的結構,而谷歌此次發布的AutoML-Zero搜索空間完全沒有限制,可以從最基礎的數學公式開始。「新智元急聘主筆、編輯、運營經理、客戶經理,添加HR微信(Dr-wly)了解詳情。」
  • 如何用sklearn創建機器學習分類器?這裡有一份上手指南
    原作:Kasper Fredenslund林鱗 編譯自 Data Science Central量子位 出品 |分類器是數據挖掘中對樣本進行分類的方法的統稱,也是入坑機器學習的一項必備技能。這篇文章中,作者簡要介紹了用Python中的機器學習工具scikit-learn(sklearn)創建機器學習分類器的步驟與注意事項。
  • 10大機器學習算法,看懂你就是數據科學家
    正因為如此,數據科學家會掌握幾乎所有的常見算法,並精通其中一門,這樣可以快速適應新領域的問題。今天我們就來聊聊,每一位數據科技家都應該了解的10大機器學習算法。下面是關於普遍機器學習算法和快速資源的風暴之旅,準好了嗎?燒腦挑戰開始: 1. 主成分分析(PCA)/奇異值分解(SVD)PCA是一種非監督學習,用來理解由向量組成的數據集的全局特性的方法。
  • 五分鐘了解機器學習十大算法
    本文為有志於成為數據科學家或對此感興趣的讀者們介紹最流行的機器學習算法。機器學習是該行業的一個創新且重要的領域。我們為機器學習程序選擇的算法類型,取決於我們想要實現的目標。現在,機器學習有很多算法。因此,如此多的算法,可能對於初學者來說,是相當不堪重負的。
  • 機器學習算法的基本知識(使用Python和R代碼)
    本篇 文章 是 原文 的譯文,然後自己對其中做了一些修改和添加內容(隨機森林和降維算法)。文章簡潔地介紹了機器學習的主要算法和一些偽 代碼 ,對於 初學者 有很大幫助,是一篇不錯的 總結 文章,後期可以通過文中提到的算法展開去做一些實際問題。
  • 流行的機器學習算法總結,幫助你開啟機器學習算法學習之旅
    AI的ML領域是為實現非常精確的目標而創建的,它引入了多種算法,從而可以更順暢地進行數據處理和決策。什麼是機器學習算法?機器學習算法是任何模型背後的大腦,可讓機器學習並使其更智能。這些算法的工作方式是,為它們提供第一批數據,並且隨著時間的流逝和算法的準確性的提高,額外的數據也被引入到算法中。
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    K-Means聚類是機器學習領域中最強大的聚類算法之一。他的原因比較簡單,但得出的結果也非常準確。聚類是理解數據集的非常重要的方式,因此在本文中,我們將討論什麼是聚類,為什麼需要聚類以及什麼是k-means聚類。什麼是聚類聚類是根據數據的屬性將數據分為兩個或更多組的任務,更確切地說,是基於數據中或多或少明顯的某些模式。
  • 機器學習之分類算法K-Means介紹與代碼分析(篇四)
    維基百科,自由的百科全書中提到K-平均算法(英文:k-means clustering)源於信號處理中的一種向量量化方法,現在則更多地作為一種聚類分析方法流行於數據挖掘領域。k-平均聚類的目的是:把n個點(可以是樣本的一次觀察或一個實例)劃分到k個聚類中,使得每個點都屬於離他最近的均值(此即聚類中心)對應的聚類,以之作為聚類的標準。
  • 數據科學家應該知道的頂級機器學習算法
    按學習風格分組的機器學習算法算法可以用多種方式對問題進行建模,因為它涉及與體驗的交互。但是,無論我們要如何調用輸入數據都沒有關係。而且,算法在機器學習和人工智慧中很流行教科書。也就是說,首先要考慮一種算法可以適應的學習方式。通常,機器學習算法只能具有幾種主要的學習方式。而且,我們還將通過它們。另外,我們很少有適合他們的算法和問題類型的例子。