【机器学习-07】逻辑回归(Logistic Regression)的介绍和python实现

Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。主要用来表示某件事情发生的可能性,因此因变量的范围在 0 和 1 之间。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。因此因变量就为是否胃癌,值为"是"或"否",自变量就可以包括很多了,如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。

Logistic 回归的本质是:假设数据服从正态分布,使用极大似然估计对模型的参数进行估计。

一、Logistic分布

Logistic分布是一种连续概率分布,常用于建模具有有限范围的随机变量。它具有S形状的概率密度函数,可以用于描述一些自然现象和统计模型中的数据分布。

Logistic分布的概率密度函数(PDF)可以表示为:

f ( x ) = e − ( x − μ ) / s s ( 1 + e − ( x − μ ) / s ) 2 f(x) = \frac{e^{-(x-\mu)/s}}{s(1+e^ {-(x-\mu)/s})^2} f(x)=s(1+e−(x−μ)/s)2e−(x−μ)/s

其中, x x x 是随机变量的取值, μ \mu μ 是分布的均值, s s s 是分布的尺度参数。均值 μ \mu μ表示分布的中心位置,尺度参数 ss 控制分布的形状。

Logistic分布的累积分布函数(CDF)可以表示为:

F ( x ) = 1 1 + e − ( x − μ ) / s F(x) = \frac{1}{1+e^{-(x-\mu)/s}} F(x)=1+e−(x−μ)/s1

Logistic分布的特点包括:

对称性:Logistic分布是关于均值 μ \mu μ对称的,即分布在均值两侧呈镜像关系。

S形状:Logistic分布的概率密度函数在均值附近增长迅速,然后逐渐趋于平缓。这使得它在建模概率事件的发生概率时非常有用。

尾部厚重:相比于正态分布,Logistic分布的尾部较厚,即在分布的尾部区域概率下降较慢。

二、逻辑回归介绍

对于二分类问题,假设我们有一个数据集,其中包含 m m m个样本。每个样本由输入特征向量 x x x和对应的实际类别 y y y组成。我们希望通过逻辑回归模型来预测样本的类别。

假设存在一条直线(或超平面),可以将数据集中的样本完全分开。我们可以用一个线性模型来表示这条直线,其形式如下:

z = θ 0 + θ 1 x 1 + θ 2 x 2 + ... + θ n x n z = \theta_0 + \theta_1x_1 + \theta_2x_2 + \ldots + \theta_nx_n z=θ0+θ1x1+θ2x2+...+θnxn

其中, z z z表示线性模型的输出, θ 0 , θ 1 , ... , θ n θ \theta_0, \theta_1, \ldots, \theta_nθ θ0,θ1,...,θnθ 表示模型的参数, x 1 , x 2 , ... , x n x_1, x_2, \ldots, x_n x1,x2,...,xn表示输入特征。

为了将线性模型的输出转化为概率值,我们使用逻辑函数(sigmoid函数)进行转换,得到预测的概率。逻辑函数的形式如下:

h θ ( x ) = 1 1 + e − z h_{\theta}(x) = \frac{1}{1+e^{-z}} hθ(x)=1+e−z1

其中, h θ ( x ) h_{\theta}(x) hθ(x)表示逻辑回归模型的预测结果。

为了使得逻辑回归模型能够对样本进行分类,我们需要将预测的概率值映射到类别标签。一般来说,当预测的概率大于等于一个阈值时,我们将样本预测为正类别(例如, h θ ( x ) ≥ 0.5 h_{\theta}(x) \geq 0.5 hθ(x)≥0.5);当预测的概率小于阈值时,我们将样本预测为负类别。

三 、逻辑回归的代价函数(Cost Function)

逻辑回归的代价函数(Cost Function)用于衡量模型预测结果与实际观测值之间的差异。在逻辑回归中,常用的代价函数是交叉熵损失函数(Cross-Entropy Loss)。

假设我们有一个训练集,其中包含mm个样本,每个样本由输入特征向量xx和对应的实际类别yy组成。逻辑回归的目标是通过最小化代价函数来优化模型的参数。

对于二元分类问题,交叉熵损失函数可以表示为:

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log(h_{\theta}(x^{(i)})) + (1-y^{(i)})\log(1-h_{\theta}(x^{(i)}))\right] J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]

其中, J ( θ ) J(\theta) J(θ)表示代价函数, θ \theta θ表示模型的参数, h θ ( x ) h_{\theta}(x) hθ(x)表示逻辑回归模型的预测结果(即sigmoid函数的输出), y ( i ) y^{(i)} y(i)表示第 i i i个样本的实际类别。

代价函数的含义可以解释为:对于每个样本,如果实际类别为1,则第一项 y ( i ) log ⁡ ( h θ ( x ( i ) ) ) y^{(i)}\log(h_{\theta}(x^{(i)})) y(i)log(hθ(x(i)))越大越好;如果实际类别为0,则第二项 ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) (1-y^{(i)})\log(1-h_{\theta}(x^{(i)})) (1−y(i))log(1−hθ(x(i)))越大越好。通过求和和取平均,我们可以得到整个训练集上的平均代价。

逻辑回归的目标是最小化代价函数,通过调整模型的参数 θ \theta θ来实现。常用的方法是梯度下降(Gradient Descent),通过计算代价函数对参数的偏导数,更新参数以减小代价函数的值。

具体的梯度下降更新规则可以表示为:

θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha\frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α∂θj∂J(θ)

其中, α \alpha α表示学习率,控制参数更新的步长。

通过反复迭代更新参数,直到达到收敛条件(如达到最大迭代次数或代价函数变化不显著),逻辑回归模型就可以得到最优的参数估计。

四、逻辑回归基于sklearn库的python代码实现

当使用scikit-learn库中的逻辑回归模型进行分类任务时,可以按照以下步骤进行操作:

  • 1 导入所需的库和模块:
python 复制代码
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
  • 2 加载鸢尾花数据集:
python 复制代码
iris = load_iris()
X = iris.data
y = iris.target
  • 3 划分数据集为训练集和测试集:
python 复制代码
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 4 创建并训练逻辑回归模型:
python 复制代码
model = LogisticRegression()
model.fit(X_train, y_train)
  • 5 使用训练好的模型进行预测:
python 复制代码
y_pred = model.predict(X_test)
  • 6 评估模型性能:
python 复制代码
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

完整的Python代码如下所示:

python 复制代码
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建并训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 使用训练好的模型进行预测
y_pred = model.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

这段代码中,首先使用load_iris()函数加载鸢尾花数据集,然后使用train_test_split()函数将数据集划分为训练集和测试集。接下来,创建一个LogisticRegression对象作为逻辑回归模型,并使用训练集数据进行训练。然后,使用训练好的模型对测试集进行预测,并使用accuracy_score()函数计算分类准确度作为模型性能的评估指标。

五、逻辑回归的优缺点

  • 优点:
  • 实现简单,广泛的应用于工业问题上;
  • 分类时计算量非常小,速度很快,存储资源低;
  • 便利的观测样本概率分数;
  • 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;
  • 计算代价不高,易于理解和实现;
  • 缺点:

-当特征空间很大时,逻辑回归的性能不是很好;

-容易欠拟合,一般准确度不太高

-不能很好地处理大量多类特征或变量;

-只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;

-对于非线性特征,需要进行转换;

六、总结:

逻辑回归是一种常用的分类算法,适用于二分类问题。它基于线性模型和逻辑函数的组合,将线性模型的输出转化为概率值,并通过设定阈值进行分类预测。逻辑回归模型的训练过程是通过最小化代价函数来优化模型参数,常用的代价函数是交叉熵损失函数。

使用scikit-learn库中的逻辑回归模型进行分类任务的步骤如下:

  • 导入所需的库和模块。
  • 加载数据集。
  • 划分数据集为训练集和测试集。
  • 创建并训练逻辑回归模型。
  • 使用训练好的模型进行预测。
  • 评估模型性能,常用的指标是准确度。

逻辑回归模型具有简单高效、可解释性强和能处理非线性关系等优点。它在许多领域都有广泛的应用,如医学、金融、市场营销等。然而,逻辑回归也存在一些缺点,例如对异常值敏感、处理多分类问题相对困难等。

综上所述,逻辑回归是一种强大的分类算法,通过线性模型和逻辑函数的组合,能够有效地解决二分类问题。在实践中,我们可以使用scikit-learn库中的逻辑回归模型来快速构建和训练模型,并对其性能进行评估。

相关推荐
云天徽上几秒前
【PaddleOCR】OCR表格识别数据集介绍,包含PubTabNet、好未来表格识别、WTW中文场景表格等数据,持续更新中......
python·ocr·文字识别·表格识别·paddleocr·pp-ocrv5
你怎么知道我是队长21 分钟前
python-input内置函数
开发语言·python
叹一曲当时只道是寻常38 分钟前
Python实现优雅的目录结构打印工具
python
Blossom.1181 小时前
机器学习在智能制造业中的应用:质量检测与设备故障预测
人工智能·深度学习·神经网络·机器学习·机器人·tensorflow·sklearn
巴伦是只猫1 小时前
【机器学习笔记 Ⅱ】1 神经网络
笔记·神经网络·机器学习
hbwhmama1 小时前
python高级变量XIII
python
烟锁池塘柳02 小时前
【深度学习】强化学习(Reinforcement Learning, RL)主流架构解析
人工智能·深度学习·机器学习
费弗里2 小时前
Python全栈应用开发利器Dash 3.x新版本介绍(3)
python·dash
dme.2 小时前
Javascript之DOM操作
开发语言·javascript·爬虫·python·ecmascript
加油吧zkf2 小时前
AI大模型如何重塑软件开发流程?——结合目标检测的深度实践与代码示例
开发语言·图像处理·人工智能·python·yolo