11.23 Python數據挖掘與機器學習技術入門實戰(2)

Python數據挖掘與機器學習技術入門實戰(1)

三、常見分類算法介紹

常見的分類算法有很多,如下圖所示:

Python數據挖掘與機器學習技術入門實戰(2)

其中KNN算法和貝葉斯算法都是較為重要的算法,除此之外還有其他的一些算法,如決策樹算法、邏輯迴歸算法和SVM算法。Adaboost算法主要是用於弱分類算法改造成強分類算法。

四、對鳶尾花進行分類案例實戰

假如現有一些鳶尾花的數據,這些數據包含了鳶尾花的一些特徵,如花瓣長度、花瓣寬度、花萼長度和花萼寬度這四個特徵。有了這些歷史數據之後,可以利用這些數據進行分類模型的訓練,在模型訓練完成後,當新出現一朵不知類型的鳶尾花時,便可以藉助已訓練的模型判斷出這朵鳶尾花的類型。這個案例有著不同的實現方法,但是藉助哪種分類算法進行實現會更好呢?

1、KNN算法

(1)、KNN算法簡介

首先考慮這樣一個問題,在上文的淘寶商品中,有三類商品,分別是零食、名牌包包和電器,它們都有兩個特徵:price和comment。按照價格來排序,名牌包包最貴,電器次之,零食最便宜;按照評論數來排序,零食評論數最多,電器次之,名牌包包最少。然後以price為x軸、comment為y軸建立直角座標系,將這三類商品的分佈繪製在座標系中,如下圖所示:

Python數據挖掘與機器學習技術入門實戰(2)

顯然可以發現,這三類商品都集中分佈在不同的區域。如果現在出現了一個已知其特徵的新商品,用?表示這個新商品。根據其特徵,該商品在座標系映射的位置如圖所示,問該商品最有可能是這三類商品中的哪種?

這類問題可以採用KNN算法進行解決,該算法的實現思路是,分別計算未知商品到其他各個商品的歐幾里得距離之和,然後進行排序,距離之和越小,說明該未知商品與這類商品越相似。例如在經過計算之後,得出該未知商品與電器類的商品的歐幾里得距離之和最小,那麼就可以認為該商品屬於電器類商品。

(2)、實現方式

上述過程的具體實現如下:

Python數據挖掘與機器學習技術入門實戰(2)

當然也可以直接調包,這樣更加簡潔和方便,缺點在於使用的人無法理解它的原理:

Python數據挖掘與機器學習技術入門實戰(2)

(3)、使用KNN算法解決鳶尾花的分類問題

首先加載鳶尾花數據。具體有兩種加載方案,一種是直接從鳶尾花數據集中讀取,在設置好路徑之後,通過read_csv()方法進行讀取,分離數據集的特徵和結果,具體操作如下:

Python數據挖掘與機器學習技術入門實戰(2)

還有一種加載方法是藉助sklearn來實現加載。sklearn的datasets中自帶有鳶尾花的數據集,通過使用datasets的load_iris()方法就可以將數據加載出來,隨後同樣獲取特徵和類別,然後進行訓練數據和測試數據的分離(一般做交叉驗證),具體是使用train_test_split()方法進行分離,該方法第三個參數代表測試比例,第四個參數是隨機種子,具體操作如下:

Python數據挖掘與機器學習技術入門實戰(2)

在加載完成之後,就可以調用上文中提到的KNN算法進行分類了。

2、貝葉斯算法

(1)、貝葉斯算法的介紹

首先介紹樸素貝葉斯公式:P(B|A)=P(A|B)P(B)/P(A)。假如現在有一些課程的數據,如下表所示,價格和課時數是課程的特徵,銷量是課程的結果,若出現了一門新課,其價格高且課時多,根據已有的數據預測新課的銷量。

Python數據挖掘與機器學習技術入門實戰(2)

顯然這個問題屬於分類問題。先對錶格進行處理,將特徵一與特徵二轉化成數字,即0代表低,1代表中,2代表高。在進行數字化之後,[[t1,t2],[t1,t2],[t1,t2]]------[[0,2],[2,1],[0,0]],然後對這個二維列表進行轉置(便於後續統計),得到[[t1,t1,t1],[t2,t2,t2]]-------[[0,2,0],[2,1,0]]。其中[0,2,0]代表著各個課程價格,[2,1,0]代表各個課程的課時數。

而原問題可以等價於求在價格高、課時多的情況下,新課程銷量分別為高、中、低的概率。即P(C|AB)=P(AB|C)P(C)/P(AB)=P(A|C)P(B|C)P(C)/P(AB)=》P(A|C)P(B|C)P(C),其中C有三種情況:c0=高,c1=中,c2=低。而最終需要比較P(c0|AB)、P(c1|AB)和P(c2|AB)這三者的大小,又

P(c0|AB)=P(A|C0)P(B|C0)P(C0)=2/4*2/4*4/7=1/7 P(c1|AB)=P(A|C1)P(B|C1)P(C1)=0=0 P(c2|AB)=P(A|C2)P(B|C2)P(C2)=0=0 

顯然P(c0|AB)最大,即可預測這門新課的銷量為高。

(2)、實現方式

跟KNN算法一樣,貝葉斯算法也有兩種實現方式,一種是詳細的實現:

Python數據挖掘與機器學習技術入門實戰(2)

Python數據挖掘與機器學習技術入門實戰(2)

另一種是集成的實現方式:

Python數據挖掘與機器學習技術入門實戰(2)

3、決策樹算法

決策樹算法是基於信息熵的理論去實現的,該算法的計算流程分為以下幾個步驟:

  • 先計算總信息熵
  • 計算各個特徵的信息熵
  • 計算E以及信息增益,E=總信息熵-信息增益,信息增益=總信息熵-E
  • E如果越小,信息增益越大,不確定因素越小

決策樹是指對於多特徵的數據,對於第一個特徵,是否考慮這個特徵(0代表不考慮,1代表考慮)會形成一顆二叉樹,然後對第二個特徵也這麼考慮...直到所有特徵都考慮完,最終形成一顆決策樹。如下圖就是一顆決策樹:

Python數據挖掘與機器學習技術入門實戰(2)

決策樹算法實現過程為:首先取出數據的類別,然後對數據轉化描述的方式(例如將“是”轉化成1,“否”轉化成0),藉助於sklearn中的DecisionTreeClassifier建立決策樹,使用fit()方法進行數據訓練,訓練完成後直接使用predict()即可得到預測結果,最後使用export_graphviz進行決策樹的可視化。具體實現過程如下圖所示:

Python數據挖掘與機器學習技術入門實戰(2)

4、邏輯迴歸算法

邏輯迴歸算法是藉助於線性迴歸的原理來實現的。假如存在一個線性迴歸函數:y=a1x1+a2x2+a3x3+…+anxn+b,其中x1到xn代表的是各個特徵,雖然可以用這條直線去擬合它,但是由於y範圍太大,導致其魯棒性太差。若想實現分類,需要縮小y的範圍到一定的空間內,如[0,1]。這時候通過換元法可以實現y範圍的縮小:

令y=ln(p/(1-p)) 那麼:e^y=e^(ln(p/(1-p))) => e^y=p/(1-p) =>e^y*(1-p)=p => e^y-p*e^y=p => e^y=p(1+e^y) => p=e^y/(1+e^y) => p屬於[0,1] 

這樣y就降低了範圍,從而實現了精準分類,進而實現邏輯迴歸。

邏輯迴歸算法對應的實現過程如下圖所示:

Python數據挖掘與機器學習技術入門實戰(2)

5、SVM算法

SVM算法是一種精準分類的算法,但是其可解釋性並不強。它可以將低維空間線性不可分的問題,變為高位空間上的線性可分。SVM算法的使用十分簡單,直接導入SVC,然後訓練模型,並進行預測。具體操作如下:

Python數據挖掘與機器學習技術入門實戰(2)

儘管實現非常簡單,然而該算法的關鍵卻在於如何選擇核函數。核函數可分為以下幾類,各個核函數也適用於不同的情況:

  • 線性核函數
  • 多項式核函數
  • 徑向基核函數
  • Sigmoid核函數

對於不是特別複雜的數據,可以採用線性核函數或者多項式核函數。對於複雜的數據,則採用徑向基核函數。採用各個核函數繪製的圖像如下圖所示:

Python數據挖掘與機器學習技術入門實戰(2)

5、Adaboost算法

假如有一個單層決策樹的算法,它是一種弱分類算法(準確率很低的算法)。如果想對這個弱分類器進行加強,可以使用boost的思想去實現,比如使用Adaboost算法,即進行多次的迭代,每次都賦予不同的權重,同時進行錯誤率的計算並調整權重,最終形成一個綜合的結果。

Adaboost算法一般不單獨使用,而是組合使用,來加強那些弱分類的算法。

加米穀大數據培訓,大數據零基礎課程,旨在培養符合市場和企業需求的專業的數大據人才,從編程入門,到數據的採集、預處理, 以及大數據平臺的搭建、工具的使用,提供大數據技術詳細專業的教學,並結合實際項目進行練習,加強學生對原理知識的理解、對大數據技術的行業應用。

五、分類算法的選擇思路與技巧

首先看是二分類還是多分類問題,如果是二分類問題,一般這些算法都可以使用;如果是多分類問題,則可以使用KNN和貝葉斯算法。其次看是否要求高可解釋性,如果要求高可解釋性,則不能使用SVM算法。再看訓練樣本數量、再看訓練樣本數量,如果訓練樣本的數量太大,則不適合使用KNN算法。最後看是否需要進行弱-強算法改造,如果需要則使用Adaboost算法,否則不使用Adaboost算法。如果不確定,可以選擇部分數據進行驗證,並進行模型評價(耗時和準確率)。

綜上所述,可以總結出各個分類算法的優缺點為:

  • KNN:多分類,惰性調用,不宜訓練數據過大
  • 貝葉斯:多分類,計算量較大,特徵間不能相關
  • 決策樹算法:二分類,可解釋性非常好
  • 邏輯迴歸算法:二分類,特徵之間是否具有關聯無所謂
  • SVM算法:二分類,效果比較不錯,但可解釋性欠缺
  • Adaboost算法:適用於對弱分類算法進行加強


分享到:


相關文章: