亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
Python 教程 / 邏輯回歸

邏輯回歸

邏輯回歸

邏輯回歸旨在解決分類問(wèn)題。它通過(guò)預(yù)測(cè)分類結(jié)果來(lái)實(shí)現(xiàn)這一點(diǎn),這與預(yù)測(cè)連續(xù)結(jié)果的線性回歸不同。

在最簡(jiǎn)單的情況下,有兩種結(jié)果,這被稱為二項(xiàng)式,其中一個(gè)例子是預(yù)測(cè)腫瘤是惡性還是良性。在其他情況下,有超過(guò)兩種結(jié)果進(jìn)行分類,在這種情況下它被稱為多項(xiàng)式。多項(xiàng)式邏輯回歸的一個(gè)常見(jiàn)例子是預(yù)測(cè)鳶尾花屬于3個(gè)不同物種中的哪一個(gè)。

在這里,我們將使用基本的邏輯回歸來(lái)預(yù)測(cè)一個(gè)二項(xiàng)式變量。這意味著它只有兩個(gè)可能的結(jié)果。

它是如何工作的?

在 Python 中,我們有模塊會(huì)為我們完成這項(xiàng)工作。首先導(dǎo)入 NumPy 模塊。

import numpy

將自變量存儲(chǔ)在 X 中。

將因變量存儲(chǔ)在 y 中。

下面是一個(gè)樣本數(shù)據(jù)集:

# 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)

# 注意:為了使 LogisticRegression() 函數(shù)工作,X 需要從行重塑為列。
# y 代表腫瘤是否為癌性(0 表示“否”,1 表示“是”)。
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])

我們將使用 sklearn 模塊中的一個(gè)方法,因此還需要導(dǎo)入該模塊:

from sklearn import linear_model

從 sklearn 模塊中,我們將使用 LogisticRegression() 方法來(lái)創(chuàng)建一個(gè)邏輯回歸對(duì)象。

這個(gè)對(duì)象有一個(gè)名為 fit() 的方法,該方法將自變量和因變量作為參數(shù),并用描述關(guān)系的數(shù)據(jù)填充回歸對(duì)象:

logr = linear_model.LogisticRegression()
logr.fit(X,y)

現(xiàn)在我們有一個(gè)邏輯回歸對(duì)象,它可以根據(jù)腫瘤大小來(lái)預(yù)測(cè)腫瘤是否為癌性:

# 預(yù)測(cè)大小為 3.46mm 的腫瘤是否為癌性:
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))

實(shí)例

查看整個(gè)實(shí)例的運(yùn)行情況:

import numpy
from sklearn import linear_model

# 為邏輯函數(shù)重塑。
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)

# 預(yù)測(cè)大小為3.46mm的腫瘤是否為癌性:
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
print(predicted)
運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

結(jié)果:

[0]

我們已經(jīng)預(yù)測(cè)出大小為 3.46mm 的腫瘤不是癌性的。

系數(shù)

在邏輯回歸中,系數(shù)是X每單位變化時(shí)結(jié)果的對(duì)數(shù)幾率的預(yù)期變化。

這并不具有最直觀的理解,因此讓我們用它來(lái)創(chuàng)建更有意義的東西,即幾率。

實(shí)例

查看整個(gè)實(shí)例的運(yùn)行情況:

import numpy
from sklearn import linear_model

# 為邏輯函數(shù)重塑。
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)
運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

結(jié)果:

[4.03541657]

這告訴我們,當(dāng)腫瘤大小增加 1mm 時(shí),它是癌性腫瘤的幾率增加了 4 倍。

概率

可以使用系數(shù)和截距值來(lái)找出每個(gè)腫瘤為癌性的概率。

創(chuàng)建一個(gè)函數(shù),該函數(shù)使用模型的系數(shù)和截距值返回一個(gè)新值。這個(gè)新值表示給定觀測(cè)值是腫瘤的概率:

def logit2prob(logr,x):
  log_odds = logr.coef_ * x + logr.intercept_
  odds = numpy.exp(log_odds)
  probability = odds / (1 + odds)
  return(probability)

函數(shù)解釋

要找到每個(gè)觀測(cè)值的對(duì)數(shù)幾率,我們必須首先創(chuàng)建一個(gè)類似于線性回歸中的公式,提取系數(shù)和截距。

log_odds = logr.coef_ * x + logr.intercept_

然后,為了將對(duì)數(shù)幾率轉(zhuǎn)換為幾率,我們必須對(duì)對(duì)數(shù)幾率進(jìn)行指數(shù)化。

odds = numpy.exp(log_odds)

現(xiàn)在我們有了幾率,我們可以通過(guò)將其除以1加幾率來(lái)將其轉(zhuǎn)換為概率。

probability = odds / (1 + odds)

現(xiàn)在讓我們使用所學(xué)到的函數(shù)來(lái)找出每個(gè)腫瘤為癌性的概率。

實(shí)例

查看整個(gè)實(shí)例的運(yùn)行情況:

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))
運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

結(jié)果:

  [[0.60749955]
   [0.19268876]
   [0.12775886]
   [0.00955221]
   [0.08038616]
   [0.07345637]
   [0.88362743]
   [0.77901378]
   [0.88924409]
   [0.81293497]
   [0.57719129]
   [0.96664243]]

結(jié)果解釋

3.78 0.61 大小為 3.78cm 的腫瘤為癌性的概率為 61%。

2.44 0.19 大小為 2.44cm 的腫瘤為癌性的概率為 19%。

2.09 0.13 大小為 2.09cm 的腫瘤為癌性的概率為 13%。