用邏輯回歸來進行分類

2021-02-13 Python中文社區

邏輯回歸是機器學習中經常用到的一種方法,其屬於有監督機器學習,邏輯回歸的名字雖然帶有「回歸」二字,但實際上它卻屬於一種分類方法,本文就介紹一下如何用邏輯回歸進行分類。

首先還是介紹一下邏輯回歸的基本原理。

圖1. 邏輯函數圖形

邏輯回歸之所以叫「邏輯」,是因為其使用了Logistic函數(也稱Sigmoid函數),該函數形式如圖2中式(1)所示,圖形如圖1所示。既然邏輯回歸是分類方法,那麼我們這裡就以最簡單的二分類來說明一下,二分類的輸出標記為 y=0或1,而線性回歸產生的預測值z = ω^Tx+b,我們讓t=z,把z的表達式帶入到式(1)中得到式(2),再做變換就得到式(3)。y是我們要求的正例,1-y則是反例,二者比值則可稱為機率,所以式(3)可以稱作「對數機率」。接下來我們要求解ω和b,用的是極大似然估計法。我們將y視為後驗概率估計p(y=1|x),那麼就可以得到圖3中的式(4)和(5)。接下來令β=(ω;b)和x=(x;1),可得到式(6),由式(6)的得到圖4中(7)、(8)和(9),(9)就是目標函數,對目標函數求解得到最優參數即可。這些推導比較複雜,筆者在這裡僅列出了主要部分,大家如果有興趣,可自行查閱相關資料。

圖2. 邏輯回歸推導公式(1)—(3)

圖3. 邏輯回歸推導公式(4)—(6)

圖4. 邏輯回歸推導公式(7)—(9)

在了解邏輯回歸的基本原理之後,我們再用一個例子來介紹一下邏輯回歸的用法。

本文中我們使用的邏輯回歸模型來自scikit-learn,用到的數據集也同樣來自於scikit-learn,代碼如下。

import matplotlib.pyplot as plt
from sklearn.metrics import classification_report
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split 

X, y = make_classification(n_samples=100, n_features=2, 
n_informative=2, n_redundant=0, n_clusters_per_class=1,
class_sep = 2.0, random_state=15)
fig, ax = plt.subplots(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

圖5. 本例中所用數據點

其結果如圖5所示。這個數據集是我們用make_classification方法生成的,共100個點,一共兩個特徵(維度),所有數據共分為兩個類。從圖中可以看出紫色的點分為一類,黃色的點分為另一類。然後對數據集進行一下劃分,分為訓練集和測試集,代碼如下。X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=30)

在這裡,我們設置測試集的數據個數為30個,隨機狀態random_state為30,這個數字可以隨意設置。接下來我們用邏輯回歸來進行一下訓練和預測,結果用classification_report方法輸出。

model = LogisticRegression() #生成模型
model.fit(X_train, y_train) #輸入訓練數據
y_predict = model.predict(X_test) #輸出預測數據
print(classification_report(y_test, y_predict)) #生成預測結果報告預測

結果如圖6所示。從圖6中我們可以看出該模型的accuracy為0.97,因為我們的測試數據共有30個,所以這意味著我們只有1個點預測錯了,說明該模型的分類效果還是非常不錯的。

圖6. 模型結果報告

然後為了讓大家對該模型的分類效果有一個進一步的了解,筆者在這裡再深入研究一下,我們再來看看邏輯回歸模型的分類邊界,即該模型是從哪裡開始進行劃分的,代碼如下。

step = 0.01 # 相當步長,越小點越密集
x_min = X[:, 0].min() -1 #設置mesh的邊界
x_max = X[:, 0].max() + 1
y_min = X[:, 1].min() - 1
y_max = X[:, 1].max() + 1
x_mesh, y_mesh = np.meshgrid(np.arange(x_min, x_max, step), np.arange(y_min, y_max, step)) 
data_mesh = np.stack([x_mesh.ravel(), y_mesh.ravel()], axis=-1) #把mesh轉換為2列的數據
Z = model.predict(data_mesh)
Z = Z.reshape(x_mesh.shape)
fig, ax = plt.subplots(figsize=(8,6))
plt.pcolormesh(x_mesh, y_mesh, Z, cmap=plt.cm.cool) #畫出mesh的顏色
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.ocean)
plt.show()

這裡代碼有些複雜,解釋一下。我們的設計思路是這樣的,因為本次使用的邏輯回歸模型是一個二分類模型,也就是將結果分為了兩個類,那麼我們把模型中每個類的區域用一種顏色標出,這樣就有兩種顏色。落入每個區域的點就屬於這個區域,也就是這個類。x_mesh, y_mesh = np.meshgrid(np.arange(x_min, x_max, step), np.arange(y_min, y_max, step)) 這行代碼就是得到整個區域(也就是兩個類的區域之和)的點,這個區域比我們用到的數據集的範圍大一些,x_min、x_max、y_min、y_max就是整個區域的邊界。data_mesh = np.stack([x_mesh.ravel(), y_mesh.ravel()], axis=-1) 這行代碼就是把上面整個區域中的點轉換為2列的數據,便於後面預測,Z = model.predict(data_mesh)就是區域每個點的預測值,我們再用plt.pcolormesh和plt.scatter分別畫出區域顏色和數據點的顏色,就能清楚看到那些點在哪個區域中。其結果如圖7所示。

圖7. 用不同顏色來表示不同的劃分區域

從結果中可以看出,有一個綠色的點落入到了錯誤的區域中,說明這個點預測錯了,這和我們前面classification_report得到的結果一致。

邏輯回歸在機器學習中的使用非常廣泛而且效果也不錯,但其也有一些缺點,比如不能解決非線性問題、對多重共線性數據較為敏感、很難處理數據不平衡的問題等。其原理也要比筆者介紹的複雜不少,想要深入了解的讀者可以自行查找相關資料來學習。

相關焦點

  • 多分類邏輯回歸(Multinomial Logistic Regression)
    前言分類從結果的數量上可以簡單的劃分為:其中二分類是最常見且使用最多的分類場景,解決二分類的算法有很多,比如:多分類中比如:改進版的KNN、改進版的貝葉斯、改進版的SVM等多類別的邏輯回歸囉嗦了這麼多,其實就是為了說這個多分類的邏輯回歸。
  • 直播案例 | 使用感知機、邏輯回歸、支持向量機進行中文新聞主題分類
    本案例首先藉助  Python 實現了感知機、邏輯回歸和線性支持向量機算法。然後在一個隨機生成的二維數據集上展示了三種算法的運行流程和結果。進一步地,我們使用一份中文新聞數據集,利用 Sklearn.linear_model 模塊的 SGDClassifier 類分別構建感知機、邏輯回歸和線性支持向量機模型。最後,使用混淆矩陣對新聞主題分類的效果進行了評估。
  • 如何用邏輯回歸做數據分析?
    接下來,我將用最簡單通俗的語言來為大家介紹邏輯回歸模型及其應用。邏輯回歸是解決二分類問題的監督學習算法,用來估計某個類別的概率。其直接預測值是表示0-1區間概率的數據,基於概率再劃定閾值進行分類,而求解概率的過程就是回歸的過程。
  • 數據科學&機器學習的筆記1:分類、線性回歸和邏輯回歸
    這種數據標籤都是人工打的,說起來l老師還提起過這甚至催生了一個新興職業來著,叫「數據標註員」,還挺賺錢?分類問題的常用算法,ds課上介紹了樸素貝葉斯、決策樹、邏輯斯諦回歸和支持向量機。用代價函數來建模誤差Cost Function這個其實很容易想到。預測值和真實值之間的差即為誤差,那所有的這些差的平均值就能表示整個模型的誤差水平了。
  • Logistic(邏輯)回歸分析及癌症分類預測案例
    Logistic(邏輯)回歸分析一、邏輯回歸數學背景1、邏輯回歸(Logistic回歸)分析概要如果現在想對某件事情發生的概率進行預估,比如一個非醫用口罩,在疫情期間是否有人願意買?這裡的Y變量是「是否願意購買」,屬於分類數據,所以不能使用回歸分析。如果Y為類別性(定性)數據,研究影響關係,正確做法是選擇Logistic回歸分析。
  • 【機器學習基礎】(三):理解邏輯回歸及二分類、多分類代碼實踐
    上一篇文章說到,我們可以用線性回歸做預測,但顯然現實生活中不止有預測的問題還有分類的問題。我們可以從預測值的類型上簡單區分:連續變量的預測為回歸,離散變量的預測為分類。一、邏輯回歸:二分類1.1 理解邏輯回歸我們把連續的預測值進行人工定義,邊界的一邊定義為1,另一邊定義為0。
  • 邏輯回歸的常見問題
    對於成組資料,採用的是非條件邏輯回歸;對與配對資料,採用的是條件邏輯回歸,兩者之間有著明顯的區別。按照因變量分類數的多少,可將非條件邏輯回歸分為二分類邏輯回歸和多分類邏輯回歸兩類,二分類是指因變量只有兩個分類(如是否發生出血),多分類是指因變量有三個及以上分類(如按照出血量的不同,分為輕度、中度和重度出血)。
  • 邏輯回歸的決策邊界及多項式
    如果遇到下圖的情況,就不能用一個直線將其進行分類了,而是可以用一個圓將數據進行分類。下面來看一下非線性的決策邊界的例子:如果我們遇到下圖的情況,我們就不能用一個直線將其進行分類了,而是可以用一個圓將數據進行分類。
  • 多元線性回歸、逐步回歸、邏輯回歸的總結
    在這個高級語言層出不窮的年代,這樣做顯然不明智,所以我考慮用優秀的數據分析工具——R語言(不敢說最優秀,雖然心裡是這麼想的,我怕有人要罵我!)做回歸分析。包括簡單多變量回歸、逐步回歸、邏輯回歸!需要的用到的知識儲備:下面分別從普通多元線性回歸、逐步回歸、邏輯回歸進行介紹。前面用Python實現的只是一元回歸,由於R語言實現線性回歸很方便,所以我會著重介紹原理。多元線性回歸不論是單變量還是多元線性回歸分析,他們都是直接或間接(有時候需要通過變量代換)程線性的關係。
  • sklearn學習(二):邏輯回歸
    如果我們令g(Y)的值在某個實數區間的時候是類別A,在另一個實數區間的時候是類別B,以此類推,就得到了一個分類模型。如果結果的類別只有兩種,那麼就是一個二元分類模型了。邏輯回歸的出發點就是從這來的。下面我們開始引入二元邏輯回歸。2.
  • 邏輯(Logistic)回歸分析-補充
    成組資料是指組與組之間是相互獨立的,沒有針對每一個病例去尋找他特定的對照,它是相對於配對資料而言的。配對資料是指研究設計之初,根據潛在的影響因素如性別、年齡等將病例與對照配成對子,可以是一個病例配一個對照,也可以是一個病例配n個對照。對於成組資料,採用的是非條件邏輯回歸;對與配對資料,採用的是條件邏輯回歸,兩者之間有著明顯的區別。
  • 什麼是邏輯回歸?
    邏輯回歸(Logistic Regression,也譯作「對數機率回歸」)是離散選擇法模型之一,屬於多重變量分析範疇,是社會學、生物統計學、臨床、數量心理學、計量經濟學、市場營銷等統計實證分析的常用方法。邏輯回歸一般用於二分類(Binary Classification)問題中,給定一些輸入,輸出結果是離散值。
  • 邏輯回歸介紹與應用
    一、邏輯回歸簡介邏輯回歸又稱Logistic回歸分析,是一種廣義的線性回歸分析模型,常用於數據挖掘、疾病自動診斷、經濟預測等領域。邏輯回歸從本質來說屬於二分類問題。二分類問題是指預測的y值只有兩個取值(0或1)。
  • 邏輯回歸,很有邏輯
    最後,簡單談談邏輯回歸、Softmax 回歸和卷積神經網絡的關係。再來看看 Softmax 回歸。它是一種多項邏輯回歸,即響應變量的取值大於兩類。假設共有 K > 2 類,每個樣本點的響應變量 y_i 的取值為 1 到 K 之間的某一個值。多項邏輯回歸的應用更加廣泛,比如在手寫數字識別中,一共有 0 到 9 是個數字,因此一共可以有 10 類。
  • 四.邏輯回歸
    一.邏輯回歸概念原理1.概念         一種分類模型,處理類別已知的分類問題。
  • 邏輯回歸算法學習與思考
    from http://blog.csdn.net/dongtingzhizi本文是作者對於邏輯回歸算法的學習和思考,主要介紹:邏輯回歸的算法介紹、邏輯回歸的數學原理、邏輯回歸的實際應用、邏輯回歸的總結以及網絡安全場景預測,歡迎大家參考討論。
  • ...實現機器學習之邏輯回歸:邏輯回歸介紹、應用場景、原理、損失...
    ROC曲線的意義說明AUC指標大小應用classification_report實現精確率、召回率計算應用roc_auc_score實現指標計算邏輯回歸介紹邏輯回歸(Logistic Regression)是機器學習中的一種分類模型,邏輯回歸是一種分類算法,雖然名字中帶有回歸,但是它與回歸之間有一定的聯繫。
  • 廣義線性模型與邏輯回歸
    分類問題是機器學習中常見的一種方法,本文將以二分類為切入點,引出邏輯回歸模型。
  • 萬字乾貨|邏輯回歸最詳盡解釋
    本質上來說,兩者都屬於廣義線性模型,但他們兩個要解決的問題不一樣,邏輯回歸解決的是分類問題,輸出的是離散值,線性回歸解決的是回歸問題,輸出的連續值。;線性回歸在實數域上敏感度一致,而邏輯回歸在 0 附近敏感,在遠離 0 點位置不敏感,這個的好處就是模型更加關注分類邊界,可以增加模型的魯棒性。
  • 簡單粗暴理解與實現機器學習之邏輯回歸:邏輯回歸介紹、應用場景...
    邏輯回歸(Logistic Regression)是機器學習中的一種分類模型,邏輯回歸是一種分類算法,雖然名字中帶有回歸,但是它與回歸之間有一定的聯繫。邏輯回歸就是解決二分類問題的利器。邏輯回歸的原理要想掌握邏輯回歸,必須掌握兩點:邏輯回歸中,其輸入值是什麼如何判斷邏輯回歸的輸出1、輸入邏輯回歸的輸入就是一個線性回歸的結果