天天看點

機器學習入門 9-6 在邏輯回歸中使用多項式特征

機器學習入門 9-6 在邏輯回歸中使用多項式特征

人生就像一場旅行,不必在乎目地,在乎的是沿途的風景,以及看風景的心情。

全文字數:2957字

閱讀時間:10分鐘

前言

本系列是《玩轉機器學習教程》一個整理的視訊筆記。本小節主要介紹在邏輯回歸算法中使用多項式特征以解決非線性資料的分類問題,并通過具體的程式設計實作。

a

在 邏 輯 回 歸 中 使 用 多 項 式 特 征

上一小節介紹了對于分類問題比較重要的概念決策邊界。邏輯回歸的決策邊界本質上相當于在特征平面上找到一根直線(邏輯回歸的決策邊界是一根直線),用這根直線分割所有樣本相對應的兩個類别。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

▲邏輯回歸算法以及決策邊界

通過上面的圖示也可以看出為什麼邏輯回歸算法隻能解決二分類問題,因為邏輯回歸的決策邊界(也就是這根直線)隻能将特征平面分成兩個部分。上面的樣本分布很簡單,但是實際處理分類的樣本分布有很多種情況,比如下面這種樣本分布的情況:

機器學習入門 9-6 在邏輯回歸中使用多項式特征

▲非線性分布樣本點

上圖依然是在一個特征平面中分布了一些樣本點,其中藍色的樣本點屬于某一類,紅色的樣本點屬于另外一類。由于這些藍紅相間的樣本點呈現非線性的分布,是以不可能再通過一根直線來将這些樣本點劃分。事實上,對于上面的非線性分布的樣本點可以非常容易的用一個圓形的決策邊界來将這些樣本點分割成兩個部分。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

▲使用圓形當做決策邊界

到目前為止邏輯回歸算法是無法得到這樣一個圓形的決策邊界。我們在解析幾何中學到過,這種圓形的方程為x1^2 + x2^2 - r^2 = 0,對于上面這種非線性分布的樣本,我們的決策邊界就應該是這種圓形(r用來描述圓的半徑),我們能不能通過改進邏輯回歸算法,讓邏輯回歸算法也能夠學習到這樣的決策邊界?

回憶一下,其實線上性回歸的時候做過近乎同樣的事情,解決非線性資料的回歸問題,為線性回歸引入多項式項。如果我們把上面圓形決策邊界表達式中x1方整體看作是一個特征,x2方整體看作是另外一個特征,那麼相當于我們學習到了x1方前面的系數為1,x2方前面的系數也為1,相應的還有一個θ0為-r方,此時得到的這個決策邊界針對x1方和x2方還是一個線性的決策邊界,但是針對x1和x2這兩個特征來說,它就變成了圓形非線性的決策邊界了。換句話說,我們可以借鑒從線性回歸轉換為多項式回歸的思路,為邏輯回歸算法添加多項式項。

這裡為了友善舉了一個樣本分布為圓形的例子,不過x1方和x2方的前面系數可以是不同的值,不同的系數對應着不同的橢圓形,與此同時,我們還可以添加x1x2這樣的二次項,此時的圓心不一定在(0, 0)的位置,可以在坐标軸的任意位置。多項式項的degree可以是任意的正整數值,是以相應的可以構造出任意形狀的決策邊界。接下來就來使用添加多項式項的邏輯回歸算法對上面非線性的資料進行程式設計實驗。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

b

具 體 編 程 實 現

創造虛拟的樣本資料,X是從均值為0方差為1的正太分布中采樣的200個擁有兩個特征的樣本點,y為0,1的類别标簽向量,它是經過兩個樣本特征平方和小于1.5的布爾型True,False向量轉換為整型0,1向量得到。

機器學習入門 9-6 在邏輯回歸中使用多項式特征
機器學習入門 9-6 在邏輯回歸中使用多項式特征

其中橙色的點是那些y = 1的樣本點,藍色的點是那些y = 0的樣本點。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

首先嘗試一下,在不添加多項式項的情況下分類上面非線性分布的樣本點,得到的分類結果以及決策邊界是怎樣的?

機器學習入門 9-6 在邏輯回歸中使用多項式特征

這裡使用我們自己封裝的LogisticRegression類,為了簡單沒有将樣本劃分成訓練集和測試集,直接将整個資料集進行訓練,在整個資料集上的分類準确度為60.5%,顯然這個準确率比較低。

如果要繪制決策邊界,可以直接使用上一小節的繪制函數。此時有了訓練好的模型,接下來隻需要傳入axis坐标軸的範圍。觀察上面非線性樣本分布圖示中x和y軸範圍都在(-4, 4)之間,是以将[-4, 4, -4, 4]傳入繪制函數中。同時為了更清晰,将這些樣本坐标點也繪制出來。

機器學習入門 9-6 在邏輯回歸中使用多項式特征
機器學習入門 9-6 在邏輯回歸中使用多項式特征
機器學習入門 9-6 在邏輯回歸中使用多項式特征

沒有添加多項式的邏輯回歸算法處理非線性資料的決策邊界如上圖所示。邏輯回歸算法本身就是使用一根直線來對特征平面進行劃分的,對于上面這樣的非線性資料這根直線決策邊界顯然有非常多的錯誤分類,是以最終的模型的分類準确度隻有60%左右。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

接下來嘗試為邏輯回歸算法添加多項式項,回憶一下之前在為線性回歸算法添加多項式項的時候,使用了管道Pipeline。我們同樣使用管道Pipeline的方式為邏輯回歸添加多項式項。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

Pipleline管道中傳入的是一個清單,清單中每一個元素代表一個步驟用一個元組來表示。其中元組中有兩個元素,第一個元素用一個字元串來描述這一步具體做什麼(清晰明了的命名即可),第二個元素就是相對應的操作類的執行個體化。為邏輯回歸算法添加多項式項和線性回歸類似也分成三個步驟:

  1. 執行個體化多項式類,将這個步驟命名為"ploy";
  2. 由于多項式對特征之間內插補點比較敏感,是以第二步添加标準化的步驟;
  3. 最後一步就是添加邏輯回歸這個過程,是以最後一步來執行個體化邏輯回歸類。

有了為邏輯回歸添加多項式項的函數,接下來可以直接調用上面的函數,将degree值設定為2,傳回的是管道對象。通過管道對象來拟合fit樣本。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

這裡值得一提的是,此時的LogisticRegression類不是Sklearn提供的,而是我們自己封裝實作的。不過通過上面輸出結果可以發現,我們自己實作的這個邏輯回歸類可以毫無障礙的傳入到Sklearn管道類中,這是因為我們自己實作的邏輯回歸類遵循Sklearn的設計标準的,對于Scklearn中每一個機器學習算法的标準就是要有構造函數、拟合fit函數、預測predict函數以及評分score函數等等。如果我們完全遵守這種設計标準,在使用Sklearn的其它子產品的時候,Sklearn會認為這個子產品和Sklearn自己定義的子產品是一樣的,它就能無縫的銜接起來,這也是為什麼這個課程要全部使用Sklearn的标準來實作算法的原因。當然現在我們學習的還比較淺顯,是以能夠利用上這個機制優點的地方可能主要就是在使用管道的這部分,但是以後随着深入使用更多方法來解決複雜的問題,會慢慢的體會到這種機制的優點。

看看引入多項式的邏輯回歸算法的分類準确度是多少?

機器學習入門 9-6 在邏輯回歸中使用多項式特征

分類準确度為95%,相比于隻使用邏輯回歸的60.5%要好很多。接下來繪制對應的決策邊界。

機器學習入門 9-6 在邏輯回歸中使用多項式特征
機器學習入門 9-6 在邏輯回歸中使用多項式特征

此時的決策邊界是一個圓形,它能夠更好的對這樣的非線性資料進行劃分。

當然實際的情況下遇到的資料集分布不可能是這樣的一個圓形,肯定會有各種奇奇怪怪的形狀,是以degree這個參數就需要選擇其它的一些值。在這裡,我們繼續基于這個圓形分布的資料集進行實驗,将degree參數設定的大一些,設定為20。

機器學習入門 9-6 在邏輯回歸中使用多項式特征

繪制一下degree為20的決策邊界。

機器學習入門 9-6 在邏輯回歸中使用多項式特征
機器學習入門 9-6 在邏輯回歸中使用多項式特征

對于上面的決策邊界,兩邊非常奇怪。當然了,由于我們這個資料集很簡單,即使對于degree為20這麼大的參數值,決策邊界也沒有變的太離譜。出現這種情況當然不是我們想要的,而出現這種情況的根本原因就在于degree參數值設定的太大了,導緻決策邊界的形狀非常的不規則。當添加多項式的邏輯回歸中的多項式階數也就是degree值越大,模型就會越複雜,模型更容易過渡的拟合訓練資料,導緻過拟合,而對應的決策邊界就會越來越不規則。

前面學習了解決過拟合問題的一些思路,可以通過減小degree值進而簡化模型,除此之外,還有一個非常通用的思路,就是進行模型正則化。實際上在使用邏輯回歸算法進行分類的時候,由于真實的分類任務中很少有用一根直線就能夠進行分類的情況,通常需要添加多項式項,那麼此時模型的正則化就變的必不可少了。

在下一小節将會看到在邏輯回歸算法中使用模型正則化這樣的方式,與此同時,來看一下Sklearn中是如何封裝邏輯回歸算法的。通過Sklearn中對邏輯回歸的封裝就會發現,Sklearn建議我們使用邏輯回歸算法的時候進行模型正則化的操作。

機器學習入門 9-6 在邏輯回歸中使用多項式特征