Python 教程

浏览4602
更新时间2025-08-06

逻辑回归

逻辑回归旨在解决分类问题。它通过预测分类结果来实现这一点,这与预测连续结果的线性回归不同。

在最简单的情况下,有两种结果,这被称为二项式,其中一个例子是预测肿瘤是恶性还是良性。在其他情况下,有超过两种结果进行分类,在这种情况下它被称为多项式。多项式逻辑回归的一个常见例子是预测鸢尾花属于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)

# 注意:为了使 LogisticRegression() 函数工作,X 需要从行重塑为列。
# 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]

这告诉我们,当肿瘤大小增加 1mm 时,它是癌性肿瘤的几率增加了 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%。

相关视频

更多

免费

php8,我来也
初级php8,我来也

33.5万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.2万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

30.3万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

64.4万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

40.9万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

63.7万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.1万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

35.8万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

131.8万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载