機器學習基本算法總結4

機器學習基本算法總結

☞其他工具

代碼在這,基於python3(原書代碼是python2)

這裏只是一個總結,原書已經講解很清楚了,不清楚的直接看代碼

目錄

==========================

一、預測數值型數據:迴歸

1. PCA 相關描述

———————————————————————————————————- 
優點:降低數據的複雜性,識別最重要的多個特徵。
缺點:不一定需要, 且可能損失有用信息。
適用數據類型:數值型數據。
———————————————————————————————————- 

1.1 降維

  降維是對數據高維度特徵的一種預處理方法。降維是將高維度的數據保留下最重要的一些特徵,去除噪聲和不重要的特徵,從而實現提升數據處理速度的目的。在實際的生產和應用中,降維在一定的信息損失範圍內,可以爲我們節省大量的時間和成本。降維也成爲了應用非常廣泛的數據預處理方法。在降維中,我們對數據進行了預處理。之後,採用其他機器學習技術對其進行處理。
降維具有如下一些優點:

(1)使得數據集更易使用
(2)降低算法的計算開銷
(3)去除噪聲
(4)使得結果容易理解

1.2 PCA(主成分分析)

  PCA(principal Component Analysis),即主成分分析方法,是一種使用最廣泛的數據壓縮算法。在PCA中,數據從原來的座標系轉換到新的座標系,由數據本身決定。轉換座標系時,以方差最大的方向作爲座標軸方向,因爲數據的最大方差給出了數據的最重要的信息。第一個新座標軸選擇的是原始數據中方差最大的方法,第二個新座標軸選擇的是與第一個新座標軸正交且方差次大的方向。重複該過程,重複次數爲原始數據的特徵維數。實上,這樣也就相當於只保留包含絕大部分方差的維度特徵,而忽略包含方差幾乎爲0的特徵維度,也就實現了對數據特徵的降維處理。
  那麼,我們如何得到這些包含最大差異性的主成分方向呢?事實上,通過計算數據矩陣的協方差矩陣,然後得到協方差矩陣的特徵值及特徵向量,選擇特徵值最大(也即包含方差最大)的N個特徵所對應的特徵向量組成的矩陣,我們就可以將數據矩陣轉換到新的空間當中,實現數據特徵的降維(N維)。首先看一下均值,方差和協方差的計算公式:
  這裏寫圖片描述

由上面的公式,我們可以得到一下兩點區別:

(1)方差的計算公式,我們知道方差的計算是針對一維特徵,即針對同一特徵不同樣本的取值來進行計算得到;而協方差則必須要求至少滿足二維特徵。可以說方差就是協方差的特殊情況。 

(2)方差和協方差的除數是n-1,這樣是爲了得到方差和協方差的無偏估計。具體推導過程可以參見博文

1.3 PCA實現

PCA算法實現:

去除平均值
計算協方差矩陣
計算協方差矩陣的特徵值和特徵向量
將特徵值排序
保留前N個最大的特徵值對應的特徵向量
將數據轉換到上面得到的N個特徵向量構建的新空間中(實現了特徵壓縮)  
  
  上述降維過程,首先根據數據矩陣的協方差的特徵值和特徵向量,得到最大的N個特徵值對應的特徵向量組成的矩陣,可以稱之爲壓縮矩陣;得到了壓縮矩陣之後,將去均值的數據矩陣乘以壓縮矩陣,就實現了將原始數據特徵轉化爲新的空間特徵,進而使數據特徵得到了壓縮處理。當然,我們也可以根據壓縮矩陣和特徵均值,反構得到原始數據矩陣,通過這樣的方式可以用於調試和驗證

2. PCA對半導體數據進行降維

  1. 數據缺失值的問題:
      顯然,數據集中可能會包含很多缺失值,這些缺失值是以NaN進行標識的。那麼如何對待這些缺失值呢?如果存在大量的樣本存在缺失值,顯然選擇將這些有缺失值得樣本丟棄不可取;此外,由於並不知道這些值的意義,選擇將缺失值替換爲0也不是一個很好的決定。所以,這裏我們選擇將數據集中的特徵缺失值,用數據集中該維度所有非NaN特徵的均值進行替換。相比之下,採用均值替換的方法在這裏是一個相對較好的選擇。
      PCA:如果確定需要保留哪些重要特徵呢?PCA函數可以給出數據所包含的信息量,然後通過定量的計算數據中所包含的信息決定出保留特徵的比例。
      
      查看p249特徵值結果,我們可以看到如下幾個重要信息:
    (1)裏面有很多值都是0,這意味着這些特徵都是其他特徵的副本,都可以通過其他特徵來表示,其本身沒有提供額外的信息。
    (2)可以看到最前面的15個特徵值得數量級都大於105,而後面的特徵值都變得非常小。這表明,所有特徵中只有部分特徵是重要特徵。
      下圖示出了數據集前20個主成分佔總方差的百分比:
    這裏寫圖片描述

可以看出,數據的絕大部分方差都包含在前面的幾個主成分中,捨棄後面的主成分並不會損失太多的信息。如果只保留前面幾個最重要的主成分,那麼在保留了絕大部分信息的基礎上,可以將數據集特徵壓縮到一個非常低的程度,顯然大大提高了計算效率。 
一旦通過特徵值分析知道了需要保留的主成分個數,那麼我們就可以通過pca函數,設定合適的N值,使得函數最終將數據特徵降低到最佳的維度。

3. 總結

(1)降維是一種數據集預處理技術,往往在數據應用在其他算法之前使用,它可以去除掉數據的一些冗餘信息和噪聲,使數據變得更加簡單高效,提高其他機器學習任務的計算效率。
(2)pca可以從數據中識別主要特徵,通過將數據座標軸旋轉到數據角度上那些最重要的方向(方差最大);然後通過特徵值分析,確定出需要保留的主成分個數,捨棄其他主成分,從而實現數據的降維。

===============================================================

二、利用SVD來簡化數據

1. SVD

———————————————————————————————————- 
奇異值分解:
優點:簡化數據,去除嗓聲,提高算法的結果。
缺點:數據的轉換可能難以理解。
適用數據類型:數值型數據。
———————————————————————————————————- 

1.1 SVDh和推薦系統

  我們知道,在實際生活中,採集到的數據大部分信息都是無用的噪聲和冗餘信息,那麼,我們如何才能剔除掉這些噪聲和無用的信息,只保留包含絕大部分重要信息的數據特徵呢?除了上一章提到的PCA方法,本次介紹另外一種方法,即SVD。SVD可以用於簡化數據,提取出數據的重要特徵,而剔除掉數據中的噪聲和冗餘信息。SVD在現實中可以應用於推薦系統用於提升性能,也可以用於圖像壓縮節省內存
  我們稱利用SVD的方法爲隱性語義索引(LatentSemantic Indexing, LSI) 或隱性語義分析(LatentSemanticAnalysis, LSA)。這些奇異值代表了文檔中的概念或主題,這一特點可以用於更高效的文檔搜索。兩個不行:1.在詞語拼寫錯誤時,只基於詞語存在與否的簡單搜索方法會遇到問題。2.簡單搜索的另一個問題就是同義詞的使用。這就是說,當我們查找一個詞時,其同義詞所在的文檔可能並不會匹配上。如果我們從上千篇相似的文檔中抽取出概念,那麼同義詞就會映射爲同一概念。
  如何才能將原始數據變換到上述新空間中呢?下一節我們將會進一步詳細地介紹SVD,屆時將會瞭解到S V D是如何得到u和vT 兩個矩陣的。vT 矩陣會將用戶映射到BBQ/日式食品空間去。類似地,口矩陣會將餐館的菜映射到BBQ/日式食品空間去。

1.2 矩陣分解

  在很多情況下,數據中的一小段攜帶了數據集的大部分信息其他信息則要麼是噪聲,要麼是毫不相關的信息。而矩陣分解技術可以將原始矩陣表示成新的易於理解的形式,即將數據矩陣表示成兩個或者多個矩陣相乘的形式。而我們這裏要講的SVD,就是最常用的一種矩陣分解技術,SVD將原始的數據矩陣D分解成三個矩陣U ,ΣVT 。如果原始矩陣是m行n列,那麼U ,ΣVT 就分別是m行m列,m行n列,以及n行n列,即:
  

Dm×n=Um×mΣm×nVn×nT

  上述分解中會構建出一個矩陣Σ 該矩陣只有對角元素,其他元素均爲0。另一個慣例就是,Σ 的對角元素是從大到小排列的。這些對角元素稱爲奇異值,它們對應了原始數據集矩陣Data的奇異值。回想上一章的PCA,我們得到的是矩陣的特徵值,它們告訴我們數據集中的重要特徵Σ 中的奇異值也是如此。奇異值和特徵值是有關係的。這裏的奇異值就是矩陣DataDataT 特徵值的平方根。另外:在某個奇異值的數目(r個)之後,其他的奇異值都置爲0。這就意味着數據集中僅有r
個重要特徵,而其餘特徵則都是噪聲或冗餘特徵。
  在python中的Numpy中有一個線性工具箱叫做linalg,它可以幫助我們實現矩陣的奇異值分解。
  而在實際中,一個典型的做法是,保留矩陣中90%的能量信息。計算方法是,先求出所有奇異值的平方和,然後從第一個特徵奇異值開始進行平方和累加,當達到總能量的90%以上時,這些特徵奇異值就是要保留下來的奇異值,其餘的奇異值全部捨棄。
  

2. 基於協同過濾的推薦引擎、相似度  

  協同過濾是通過將用戶和其他用戶的數據進行對比來實現推薦的。接下來,我們首先討論物品之間的相似度計算,然後討論在基於物品和基於用戶的相似度計算之間的折中。最後,我們介紹推薦引擎成功的度量方法。

2.1 相似度的計算

  推薦引擎是機器學習的一個重要應用,比如,Amazon會根據顧客的購買歷史向他們推薦物品,Netflix會像其用戶推薦電影,新聞網站會對用戶推薦新聞報道等等。當然,有很多方法可以實現推薦功能,比如基於內容的推薦,基於協同過濾的推薦,或者多個推薦相組合的推薦等等。基於內容的推薦,是通過機器學習的方法,比如決策樹,神經網絡等從用戶對於物品的評價的內容特徵描述中得到用戶感興趣的資料,而不需要其他用戶的數據。而基於協同過濾的推薦方法則是通過將用戶與其他用戶的數據進行比對,依據相似度的大小實現推薦。

  首先,在進行協同過濾之前,我們需要將數據轉化爲合理的形式,即將數據轉化爲矩陣的形式,這樣,便於我們處理和計算相似度。當我們計算出了用戶或者物品之間的相似度,我們就可以利用已有的數據來預測未知的用戶喜好。比如,我們試圖對某個用戶喜歡的電影進行預測,推薦引擎會發現有一部電影該用戶沒有看過。然後,就會計算該電影和用戶看過電影之間的相似度,如果相似度很高,推薦算法就會認爲用戶喜歡這部電影。

  這裏,協同過濾的相似度計算,並不是計算兩個物品的屬性信息的相似程度,而是基於用戶對這些物品的評價信息來計算相似度。這也是協同過濾所使用的方法,即不關心物品的描述屬性,而只關心用戶對於物品的評價觀點來進行相似度計算。

  相似度的計算方法有很多,比如歐氏距離,相關係數,餘弦距離等。相關係數和餘弦距離,是對兩個向量之間的比較。這兩種方法相對於歐氏距離的一個優勢在於,它們對於用戶的評級的量級並不敏感。爲了將相似度歸一化,我們需要對着三種方法計算得到的結果,進行歸一化處理,使其最終的結果位於(0,1)內,即:

  歐式距離相似度=1/(1+歐式距離)
  相關係數相似度=0.5+0.5*corrcoef()
  餘弦距離相似度=0.5+0.5*(cosine距離)

  上面有了,相似度的計算方法,那麼接下來要考慮的問題就是,是計算用戶的相似度還是計算物品的相似度呢?顯然,數據的行代表的是基於用戶,而列代表的則是基於物品。具體使用哪一種相似度計算,需要根據用戶或者物品的數目。因爲,不管是基於物品的相似度還是基於用戶的相似度都會隨着各自的數目的增加,計算的時間也相應增加。所以,爲了節省計算時間,我們按照數目相對較少的那一個量去計算相似度。顯然,對於一家固定的餐館,其菜品的數目基本是固定的,變化不大,但其用戶數目卻可能會發生很大的變化,所以,一般情況下,協同過濾的推薦方法會偏向於計算基於物品的相似度。

2.2 推薦引擎的評價

那麼如何對推薦引擎進行評價呢?此時,我們既沒有預測的目標值,也沒有用戶來調查他們對於預測的滿意程度。這麼我們採用前面多次使用的交叉測試的方法。即,將某些已知的物品評分刪掉,然後對這些物品的評分進行預測,然後比較預測值和真實值的差異。

  通常用於推薦系統的評價的指標是最小均方根誤差。即,首先計算平方誤差的均值,然後再對平均值開根號。

2.3 餐館菜菜餚引擎

  首先我們構建一個基本的推薦引擎,它能夠尋找用戶沒有嘗過的菜餚。然後,通過SVD來減少特徵空間並提高推薦效果。

  基本的推薦系統基本流程如下:

(1)尋找用戶沒有評級的菜餚,即在用戶-物品矩陣中的0值
(2)在用戶沒有評級的所有物品中,對每一個物品預測一個可能的評級分數。
(3)對這些物品的評分從高到低排序,返回前N個物品。

  我們知道,推薦系統對於用戶沒有評分的菜餚,通過計算該用戶與其他用戶評分的菜餚的相似度,來預估出該用戶對於該未評分菜餚的評分,從而選擇出評分最高的前N個菜餚推薦給用戶。
  有了基本的協同過濾的推薦系統,我們接下來在推薦系統中引入SVD,將高維的數據矩陣映射到低維的矩陣中去,然後,在低緯空間中,利用前面的相似度計算方法來進行推薦。
  相比於普通的推薦系統,增加了SVD的計算,即對數據矩陣進行奇異值分值,保留包含數據信息90%能量的m奇異值,組成mm 的方陣。然後,利用矩陣U的前m列和mm 的奇異值方陣,將數據矩陣映射到低緯的空間。

3. 推薦系統面臨的挑戰

(1)當數據集規模很大時,SVD分解會降低程序的速度,所以,在大型系統中,SVD運行的頻率很低,並且需要離線運行。

(2)實際的數據矩陣中0的數目很多,顯然會造成空間資源的浪費,如果有效的存儲這些數據,可以幫助我們節省內存和計算開銷。

(3)在程序中,每次需要計算一個得分時,都要計算多個物品的相似度得分。我們知道,這些得分記錄的是物品的相似度。所以,我們可以離線計算相似度得分並保存,當需要的時候調用即可。

(4)冷啓動問題,即如何在缺乏數據時給出好的推薦。這時,我們可以將推薦看成是搜索問題,這就要用到需要推薦物品的屬性。在餐館菜餚的推薦系統中,我們可以通過各種標籤來標記菜餚,比如素食,美式BBQ,價格高低等。同時,我們也可以將這些屬性作爲相似度計算所需要的數據,即基內容的推薦。

4. 基於SVD的圖像壓縮

  SVD除了應用在推薦系統中,還可以用來進行數據壓縮,比如圖像壓縮。比如,對一個3232=1024 像素的圖像,首先,我們採用矩陣的形式存儲該圖像;然後,對於圖像中每個像素值,我們採用閾值函數,將像素值大於0.8像素設置爲1,否則設置爲0;接下來,我們對該圖像進行奇異值分解,得到矩陣U,ΣVT ,我們保留包含圖像信息90%的mm<32 奇異值;最後,我們只保留矩陣U的前m列,矩陣VT的前m行,以及m個奇異值,就可以完成原始矩陣的重構。假設:m=4 ,那麼需要保存的數值個數爲324+432+4=258 ,相比於原始矩陣的1024,獲得了接近4倍的壓縮比。

五,小結

  SVD是一種類似於PCA的降維工具,我們可以利用SVD來提取矩陣的重要特徵,選擇保留數據90%的能量的情況下,剔除數據中的噪聲和冗餘信息。SVD的一個強大的應用是提高推薦系統的性能,通過將數據矩陣映射到低緯的空間進行計算相似度,從而提升推薦引擎的效果。SVD還可以用於數據的壓縮等,從而達到節省內存的目的。

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