機器學習 - 邏輯迴歸
在此頁面上,W3schools.com 與 紐約資料科學學院 合作,為我們的學生提供數字培訓內容。
邏輯迴歸
邏輯迴歸旨在解決分類問題。它透過預測分類結果來做到這一點,這與預測連續結果的線性迴歸不同。
在最簡單的情況下,有兩種結果,稱為二項分類,例如預測腫瘤是惡性的還是良性的。其他情況有多種分類結果,這稱為多項分類。多項邏輯迴歸的常見示例是預測鳶尾花在 3 種不同物種中的類別。
在這裡,我們將使用基本的邏輯迴歸來預測二項變數。這意味著它只有兩種可能的結果。
它是如何工作的?
在 Python 中,我們有模組可以為我們完成工作。首先匯入 NumPy 模組。
import numpy
將自變數儲存在 X 中。
將因變數儲存在 y 中。
下面是一個示例資料集
# X 表示腫瘤的大小(釐米)。
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
# 注意:X 必須從行重塑為列,LogisticRegression() 函式才能正常工作。
# y 表示腫瘤是否為癌症(0 表示“否”,1 表示“是”)。
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
我們將使用 sklearn 模組中的一個方法,因此也需要匯入該模組
from sklearn import linear_model
從 sklearn 模組中,我們將使用 LogisticRegression() 方法建立一個邏輯迴歸物件。
此物件有一個名為 fit()
的方法,它接受自變數和因變數作為引數,並用描述關係的資料填充迴歸物件。
logr = linear_model.LogisticRegression()
logr.fit(X,y)
現在我們有了一個邏輯迴歸物件,它可以根據腫瘤大小來判斷腫瘤是否為癌症。
# 預測腫瘤大小為 3.46mm 時是否為癌症
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
示例
觀看整個示例的實際演示
import numpy
from sklearn import linear_model
# 為邏輯函式重塑。
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
# 預測腫瘤大小為 3.46mm 時是否為癌症
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
print(predicted)
結果
[0]
我們預測腫瘤大小為 3.46mm 時不會是癌症。
廣告
係數
在邏輯迴歸中,係數是 X 每增加一個單位時,結果發生的對數機率的預期變化。
這不太直觀,所以讓我們用它來建立一個更有意義的東西:機率。
示例
觀看整個示例的實際演示
import numpy
from sklearn import linear_model
# 為邏輯函式重塑。
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
log_odds = logr.coef_
odds = numpy.exp(log_odds)
print(odds)
結果
[4.03541657]
這告訴我們,隨著腫瘤大小每增加 1 毫米,它成為癌症腫瘤的機率會增加 4 倍。
機率
係數和截距值可用於計算每種腫瘤是癌症的機率。
建立一個函式,該函式使用模型的係數和截距值來返回一個新值。這個新值代表給定觀測值是腫瘤的機率。
def logit2prob(logr,x)
log_odds = logr.coef_ * x + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
函式解釋
為了計算每個觀測值的對數機率,我們必須首先建立一個類似於線性迴歸公式的公式,提取係數和截距。
log_odds = logr.coef_ * x + logr.intercept_
要將對數機率轉換為機率,我們必須對對數機率進行指數運算。
odds = numpy.exp(log_odds)
現在我們有了機率,我們可以透過將其除以 1 加上機率來將其轉換為機率。
probability = odds / (1 + odds)
現在讓我們使用我們學到的函式來找出每種腫瘤是癌症的機率。
示例
觀看整個示例的實際演示
import numpy
from sklearn import linear_model
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
def logit2prob(logr, X)
log_odds = logr.coef_ * X + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
print(logit2prob(logr, X))
結果
[[0.60749955] [0.19268876] [0.12775886] [0.00955221] [0.08038616] [0.07345637] [0.88362743] [0.77901378] [0.88924409] [0.81293497] [0.57719129] [0.96664243]]
結果解釋
3.78 0.61 尺寸為 3.78cm 的腫瘤患癌的機率為 61%。
2.44 0.19 尺寸為 2.44cm 的腫瘤患癌的機率為 19%。
2.09 0.13 尺寸為 2.09cm 的腫瘤患癌的機率為 13%。