寫在前面,終於要開始啃這個硬骨頭了。轉行2年來,斷斷續續看過部分課程,趁著這次換工作,必須要把機器學習啃下來。本文全文轉載至以下連結:

不過上述內容,沒有寫關聯,覺得比較重要,就加進來了。

後續機器學習系列,我會找一些文章,結合自己在小數點上的使用者畫像課程,實操一些程式碼,初步,大致的順序是由易到難。

非監督學習的降維(PCA,因子學習),關聯(apriori,FP trees(FP growth))還有聚類。

監督學習分類和迴歸。

下面開始吧。

前言:

最近做的任務與降維分類有關,於是乎就將機器學習中的“四大元老”——降維、聚類、分類、迴歸給弄混了。。。。。因此,用了很長時間去理解這“四大元老”的具體概念。並藉此機會,趁熱打鐵得記錄一下。

1。機器學習

什麼是機器學習?

機器學習是一幫科學家想讓計算機像人一樣思考所研發出來的一套計算機理論。它包含了多種演算法,涉及到機率論,數理統計、線性代數、矩陣論等多個學科。

機器學習已經深入到了我們生活的方方面面,為我們提供了很多便捷。比如:我們的郵箱會對我們所有到的郵件進行篩選,將垃圾郵件放入垃圾箱;我們所使用的購物軟體,會按照我們平時的購物習慣,商品瀏覽資訊等,對我們進行好物推薦;我們瀏覽的網頁,瀏覽器會根據我們經常關注的資訊,為我們推薦新聞、娛樂、八卦等各種資訊……

日常生活中,機器學習的應用,第一個提到的就是最具代表性的公司:Google,他們所研發的Google Now,Google Photos都是基於機器學習的產物;在百度,圖片識別也應用到了機器學習中的視覺處理系統;與此同時,各種各樣的企業都開始嘗試把自己的產品往機器學習上靠攏,比如金融公司的匯率預測,股票漲跌,房地產公司的房價預測等等。

實現機器學習的方法就是我們所稱的“演算法”。目前所有的機器學習演算法大概可以被分為4~5類。

(1)監督學習

如果在學習過程中,我們不斷的向計算機提供資料和這些資料所對應的值(這裡的“值”就是“標籤”,label),比如給計算機看貓和狗的照片,告訴計算機哪些照片是貓,哪些照片是狗,然後透過這種指引的方式,讓計算機去學習如何將照片對應上照片所代表的物體(貓或狗),從而再遇到照片時,它能自己判斷照片是貓還是狗。這就叫“監督學習(supervised learning)”。這裡的“照片”就是我們給計算機提供的資料;這裡的“貓或狗”,就是這些資料所對應的值,也就是標籤。

監督學習中的“標籤”就是起到一個監督的作用。預測房屋的價格,股票的漲停就可以使用監督學習實現。

(2)非監督學習

如果同樣在上述的學習過程中,我們只給計算機提供貓和狗的照片,並不告訴計算機哪些照片是貓,哪些照片是狗,讓計算機自己去判斷和分類,總結出這兩種型別照片的不同之處。這就是“非監督學習(un-supervised learning)”。

非監督學習中,不用提供資料所對應的標籤資訊,計算機透過觀察各種資料之間的特性,會發現這些特性背後的規律,這些規律也就是非監督方法所學習到的東西。

(3)半監督學習

有一種方法綜合了監督學習和非監督學習的特徵,這種方法叫“半監督學習(semi-supervised learning)”。它主要考慮如何使用少量的 有標籤樣本 和 大量的沒有標籤的樣本 進行訓練和分類。

(4)強化學習

在規劃機器人的行為準則方面,一種機器學習方法叫做“強化學習(reinforcement learning)”。就是把計算機丟到一個對於它來說是一個完全陌生的環境 或者 讓它完成一項從未接觸過的任務,它會嘗試各種手段,最後讓自己成功適應這一個陌生環境。Google開發的AlphaGO就是應用了這一種學習方式。

(5)遺傳演算法

有一種和強化學習類似的學習方法,叫做“遺傳演算法(Genetic algorithm)”。這種方法是模擬我們所熟知的進化理論,淘汰弱者,適者生存。透過這種淘汰機制去選擇最優的設計或模型。比如,開發者開發計算機學會玩“超級瑪麗”,最開始的瑪麗1代可能不久就犧牲了,不過系統會基於1代的瑪麗隨機生成瑪麗2代,然後再儲存這些代中最厲害的瑪麗,淘汰掉比較弱的瑪麗。然後再次基於強者“繁衍和變異”,生成更強的瑪麗。這就是遺傳演算法的基本思想。

今天我主要總結的概念是:降維、聚類、分類、迴歸。上面我們大概瞭解了機器學習的相關內容。我們來看看這“四大元老”之間的關係。

話不多說,請看圖:

機器學習系列(一)降維、聚類、分類、迴歸和關聯

下圖簡要說明了四者:

機器學習系列(一)降維、聚類、分類、迴歸和關聯

2。降維

什麼是降維?

試想一下現在有n個物件a1,a2,……,an,每個物件有多個屬性x1,x2,……,xm。當我們用矩陣表示這些物件時,便是一個An×m的矩陣。舉個例項:假設我們有5只貓,每隻貓的毛色、體型、身高、體重、年齡、性別等特徵各不相同。這裡的貓就是我們的物件;“貓”這個稱呼是這個物件的標籤;毛色、體型、體重等特徵就是我們所說的物件的屬性。在實際的影象識別過程中,我們可能有大批數量的貓、狗的圖片,所需的物件的屬性也是多個,這些屬性的個數就是我們所說的維數。維數越多,資訊量資料量越大,佔用的磁碟空間和記憶體較多。實際上我們在實際中有時候並用不到這麼多的資訊,所以就需要降維。

降維是試圖壓縮維度,並儘可能地保留分佈資訊。我們可以將其視為資料壓縮,或者特徵選擇。

在實際生活中,我們對樣本做資料處理,影象處理等操作時,希望模型的精度比較高,或者說泛化誤差率較小,那麼我們希樣本的取樣密度足夠大(密取樣)。首先我們要明白的是,維數越高,樣本在空間上分佈得越稀疏(若不明白,請看圖:二維降到一維時,樣本點的密度增加。可見更高維度的樣本點之間密度更稀疏)。

機器學習系列(一)降維、聚類、分類、迴歸和關聯

降維在影象處理中叫影象壓縮、特徵提取。重在最優分割槽(可分離性);

降維在模式識別中叫做特徵選擇。重在最有描述(保真性)。

為什麼要降維?

(1)維數越多,資訊量越大,資料冗餘,為了得到我們想要的資訊,或者方便資料處理等操作,我們就需要進行降維。

(2)資料維度高,我們將無法藉助自己領域的知識無法構建有效特徵。

(3)維度超過三維時,人便無法肉眼觀察特徵。降維後,我們便可以在低維(一維、二維或三維)空間中視覺化高維資料。

(4)克服維數災難。透過某種資料變換,將原始高維屬性空間轉變為一個低維“子空間”,在這個子空間中,樣本密度大幅度提高,距離計算(也是樣本間相似度計算,歐幾里得距離等來刻畫相似度)也將變得容易;降維要保持原始空間中樣本之間的距離在低維空間中得以保持,且在低維子空間中更容易學習。

PS:維數災難

維數災難是在給定精度下,準確的對某些變數的函式進行估計,所需的樣本數量會隨著樣本的位數的增加而成指數增長。

假設所有的樣本在其屬性上歸一化,對於δ \deltaδ=0。001,僅考慮單個屬性,則需要1000各樣本點平均分佈在其取值範圍內,可以保證所有樣本在其附近0。001範圍內總能找到一個訓練樣本。但是如果維數增大時,假定屬性維數為20,若滿足密取樣的要求,則至少需要有( 1 0 3 ) 20 = 1 0 60 (10^3)^{20}=10^{60}(10

3

20

=10

60

個樣本。

高維情況下出現的樣本稀疏、距離計算困難等問題,就是機器學習中面臨的嚴重障礙——“維數災難”。

降維的意義

(1)克服維數災難,獲取本質特徵,節省儲存空間,去除無用的噪聲,實現資料視覺化。

(2)在原始的高維空間中,包含有冗餘的資訊以及噪聲資訊,透過降維減少冗餘資訊所造成的誤差,提高識別的精度,透過降維演算法也能尋找資料內部的本質結構特徵。

降維的方法

(1)線性降維方法

PCA主成分分析

LDA判別分析

MDS多尺度分析

(2)非線性降維方法

流形學習

ISOMAP等距特徵對映

LLE區域性線性嵌入

總結什麼時候用哪種降維技術

機器學習系列(一)降維、聚類、分類、迴歸和關聯

缺少值比率(Missing Value Ratio):

如果資料集缺少的值太多,我們使用這種方法來減少變數的數量。我們可以刪除其中有大量缺失值的變數。

低方差過濾器(Low Variance Filter):

我們應用這種方法來識別和刪除資料集中的常量變數。目標變數不受低方差變數的過度影響,因此可以安全地刪除這些變數。

高相關濾波器(High Correlation filter):

一對具有高相關性的變數增加了資料集中的多重共線性。因此,我們可以使用這種技術找到高度相關的特徵並相應地刪除它們。

隨機森林(Random Forest):

這是最常用的技術之一,它告訴我們資料集中存在的每個特性的重要性。我們可以發現每個特徵的重要性,並保持最頂層的特徵,從而減少維度。

後向特徵消除(Backward feature elimination)和前向特徵選擇(Forward feature selection)技術都需要大量的計算時間,因此通常用於較小的資料集。

因素分析(Factor analysis):

這項技術最適合我們有高度相關的變數集的情況。它根據變數之間的相關性將變數分為不同的組,並用一個因子表示每個組。

主成分分析(Principal component analysis):

這是處理線性資料最廣泛使用的技術之一。它將資料分為一組元件,這些元件試圖解釋儘可能多的差異。

獨立分量分析(Independent Component analysis):

我們可以用獨立分量分析將資料轉換成獨立分量,用較少的分量描述資料。

等值線圖(ISOMAP):

當資料是強非線性時,我們使用這種方法。

T-SNE:

當資料是強非線性時,這種技術也能很好地工作。它對視覺化效果也非常好。

UMAP:

這種技術對高維資料很有效。它的執行時間比T-SNE短。

3。聚類

什麼是聚類

聚類嘗試在沒有訓練的條件下,對一些沒有標籤的資料進行歸納分類。根據相似性對資料進行分組,以便對資料進行概括。沒有標籤是指我們事先不知道任何樣本的類別標號,希望透過某種演算法把這一組位置類別的樣本劃分成若干類別,聚類的時候,並不關心某一類是什麼,實現的只是將相似的東西聚在一起。

總的來說,聚類就是對大量未知標註的資料集,按資料內在的相似性將資料集劃分為多個類別,使類別內的資料相似度較大而類別間的資料相似度較小。是無監督的分類方式。

聚類的目標

同一類中,類內物件是相似的(或是相關的);不同類中的物件是不同的(不相關的)。

聚類方法好壞的判定:

(1)產生高質量的聚類結果——簇。簇內有高相似性,簇間有低的相似性。

(2)取決於聚類方法採用的相似性評估方法以及該方法的具體實現。

(3)取決於聚類方法能否發現某些/所有的隱含模式。

常見的聚類演算法

(1)劃分聚類:K-means演算法、K-medoids演算法、K-pototypes演算法、CLARANS演算法;

(2)層次聚類:BIRCH演算法、CURE演算法;

(3)密度聚類:DBSCAN演算法、OPTICS演算法、DENCLUE演算法

(4)網格聚類:STING演算法、CLIQUE演算法、WAVE-CLUSTER演算法

(5)混合聚類:高斯混合模型、CLIQUE(綜合密度和網格的演算法)

機器學習系列(一)降維、聚類、分類、迴歸和關聯

4.分類

什麼是分類

在機器學習中,分類屬於監督分類的範疇,根據一些給定的已知類別的樣本(即有標籤的資料),使計算機能夠未知類別的樣本進行分類。分類要求必須事先明確知道各類別的資訊,並且是一種對離散型隨機變數建模或預測的監督學習演算法。

分類有以下幾種說法,但表達意思是相同的:

分類(classification):分類任務就是透過學習得到一個目標函式f,把每個屬性集x對映到一個預先定義的類別標號中去。

分類是根據一些給定的已知類別標號的樣本,訓練某種學習機器(即得到某種函式),使它能夠對未知類別的樣本進行分類。這屬於supervised learning(監督學習)。

分類:透過學習來得到樣本屬性與類標號之間的關係。用自己的話說,就是我們根據已知的一些樣本(包括這些樣本的類別label與屬性)來得到分類模型(即得到樣本屬性與label之間的函式),然後透過這個目標函式來對只包含屬性的樣本資料進行分類。

分類演算法的侷限

分類作為一種監督學習,要求必須事先明確指導各個類別的資訊,並且所有待分類樣本都要有一個類別與之對應。但是很多時候這些條件並不能滿足,尤其是在處理海量資料時,如果透過預處理使得資料滿足分類演算法的要求,代價會非常大,這時候可以考慮使用聚類演算法。

聚類與分類的區別

首先呢,聚類是非監督學習,分類是監督學習。二者的本質區別就是對於聚類來說,是不知道樣本的類別資訊的,只能憑藉樣本在特徵空間的分佈來分析樣本的屬性;而對於分類來說,知道樣本的類別資訊是必要的,根據已知訓練樣本的類別資訊,讓計算機自己學著知道每個類別的特點,然後對未知類別的資料進行分類。

常用的分類演算法

決策樹分類法

基於規則的分類器

樸素的貝葉斯分類演算法(native Bayesian classifier)

基於支援向量機(SVM)的分類器

神經網路法

k-最鄰近法(K-nearest neighbor,KNN)

模糊分類法

邏輯迴歸(建議還是叫做邏輯分類,2分類問題)

你以為線性迴歸和邏輯迴歸是一回事嗎?

5.迴歸

一說分為線性迴歸與非線性迴歸;

二說分為一元迴歸分析和多元迴歸分析;

什麼是迴歸

與分類相似,迴歸也是監督學習的一種演算法,因此也需要先向計算機輸入資料的訓練樣本讓計算機學習。與分類的區別是:

迴歸方法是一種對數值型

連續隨機變數

進行預測和建模的監督學習演算法,產生的結果一般也是

數值型

的。使用案例一般包括

房價預測、股票走勢

測試成績

等連續變化的案例。

迴歸任務的特點是標註的資料集具有數值型的目標變數。也就是說,每一個觀察樣本都有一個數值型的標註真值以監督演算法。

* 常用的迴歸演算法*

(1)線性迴歸

線性迴歸是處理迴歸任務最常用的演算法之一。該演算法的形式十分簡單,它期望使用一個超平面擬合數據集(只有兩個變數的時候就是一條直線)。如果資料集中的變數存線上性關係,那麼其就能擬合地非常好。

優點:線性迴歸的理解與解釋都十分直觀,並且還能透過正則化來降低過擬合的風險。另外,線性模型很容易使用隨機梯度下降和新資料更新模型權重。

缺點:線性迴歸在變數是非線性關係的時候表現很差。並且其也不夠靈活以捕捉更復雜的模式,新增正確的互動項或使用多項式很困難並需要大量時間。

Python實現

(2)迴歸樹(整合方法)

迴歸樹(決策樹的一種)透過將資料集重複分割為不同的分支而實現分層學習,分割的標準是最大化每一次分離的資訊增益。這種分支結構讓迴歸樹很自然地學習到非線性關係。

整合方法,如隨機森林(RF)或梯度提升樹(GBM)則組合了許多獨立訓練的樹。這種演算法的主要思想就是組合多個弱學習演算法而成為一種強學習演算法,不過這裡並不會具體地展開。在實踐中 RF 通常很容易有出色的表現,而 GBM 則更難調參,不過通常梯度提升樹具有更高的效能上限。

優點:

決策樹能學習非線性關係,對異常值也具有很強的魯棒性。整合學習在實踐中表現非常好,其經常贏得許多經典的(非深度學習)機器學習競賽。

缺點:

無約束的,單棵樹很容易過擬合,因為單棵樹可以保留分支(不剪枝),並直到其記住了訓練資料。整合方法可以削弱這一缺點的影響。

隨機森林Python實現

梯度提升樹Python實現

(3)深度學習

深度學習是指能學習極其複雜模式的多層神經網路。該演算法使用在輸入層和輸出層之間的隱藏層對資料的中間表徵建模,這也是其他演算法很難學到的部分。

深度學習還有其他幾個重要的機制,如卷積和 drop-out 等,這些機制令該演算法能有效地學習到高維資料。然而深度學習相對於其他演算法需要更多的資料,因為其有更大數量級的引數需要估計。

優點:深度學習是目前某些領域最先進的技術,如計算機視覺和語音識別等。深度神經網路在影象、音訊和文字等資料上表現優異,並且該演算法也很容易對新資料使用反向傳播演算法更新模型引數。它們的架構(即層級的數量和結構)能夠適應於多種問題,並且隱藏層也減少了演算法對特徵工程的依賴。

缺點:深度學習演算法通常不適合作為通用目的的演算法,因為其需要大量的資料。實際上,深度學習通常在經典機器學習問題上並沒有整合方法表現得好。另外,其在訓練上是計算密集型的,所以這就需要更富經驗的人進行調參(即設定架構和超引數)以減少訓練時間。

(4)最近鄰演算法

最近鄰演算法是「基於例項的」,這就意味著其需要保留每一個訓練樣本觀察值。最近鄰演算法透過搜尋最相似的訓練樣本來預測新觀察樣本的值。

而這種演算法是記憶體密集型,對高維資料的處理效果並不是很好,並且還需要高效的距離函式來度量和計算相似度。在實踐中,基本上使用正則化的迴歸或樹型整合方法是最好的選擇。

6.簡單的判別方法

給定一個樣本特徵,我們希望預測其對應的屬性值,

如果是離散的,那麼就是分類問題

反之,

如果是連續的資料,就是迴歸問題

給定一組樣本特徵,我們沒有對應的屬性值,而是想發覺這組樣本的空間分佈,

比如分析哪些樣本靠的更近,那些樣本之間裡的很遠,這就是聚類問題

有關分類和迴歸的區別對比,可參考下面文章:

迴歸的輸出是連續的,比如:1、2、3、4、5、6。注意,所謂“連續”意味著是

有序的

,是排序的。比如輸出為3,那麼我們可以肯定真實為3、4、5、6的可能性順序減小,真實為2、1的可能性也是順序減小。

分類的輸出

是:A類、B類、C類。注意,所謂“分類”意味著

ABC之間不存在排序

,不存在誰比誰

更親密或更遠、可能或更不可

能。輸出為A,那麼不意味著真實為B的可能性比C更大。

機器學習系列(一)降維、聚類、分類、迴歸和關聯

其他:

先來說一下這幾者之間的關係:人工智慧包含機器學習,機器學習包含深度學習(是其中比較重要的分支)。深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的升級。

機器學習系列(一)降維、聚類、分類、迴歸和關聯

機器學習系列(一)降維、聚類、分類、迴歸和關聯