机器学习——Logistic回归
机器学习——Logistic回归
逻辑回归是机器学习中一种重要的分类算法,广泛应用于二分类问题。本文将从基本概念出发,深入探讨逻辑回归的数学原理、关键组件(如Sigmoid函数)以及优化方法(梯度上升法),并通过Python代码实例展示其具体应用。
1.逻辑回归的基本概述
1.1逻辑回归的概念
逻辑回归是一种用于解决分类问题的统计学习方法。尽管名字中含有“回归”,但逻辑回归实际上是一种分类算法,常用于二分类问题,也可以扩展到多分类问题。
逻辑回归基于线性回归模型,通过对特征和目标之间的关系进行建模,来预测输入特征属于某一类别的概率。通常,逻辑回归使用逻辑函数(也称为Sigmoid函数)将线性组合转换为在0到1之间的概率值。
在训练阶段,逻辑回归使用最大似然估计或梯度下降等方法,通过最大化似然函数来求解模型参数。在预测阶段,逻辑回归会根据输入特征计算出预测的概率,并根据设定的阈值将概率转化为类别标签。总之,逻辑回归是一种简单而有效的分类算法,通常用于处理二分类问题,并且在实际应用中表现良好。
1.2线性回归模型
线性回归是一种用于建模和预测连续型目标变量的统计学习方法。其数学表达式为:
转化为向量的形式则公式为
其中,(y) 是目标变量(因变量),(w_0, w_1, ..., w_n) 是模型参数(系数),(x_1, x_2, ..., x_n) 是特征变量(自变量),(\varepsilon) 是误差项。这个公式描述了输入特征与目标变量之间的线性关系,通过学习最佳的参数 (w_0, w_1, ..., w_n) 来拟合数据,从而进行预测。
线性回归的目标是
,使得
,
为预测值,
是真实结果
1.3Sigmoid函数
Sigmoid函数通常被用于逻辑回归模型中,将输入变量的线性组合映射到0到1之间的概率值。这种特性使得Sigmoid函数非常适合用于处理二分类问题,因为它可以将任意实数映射到0到1之间,可以被理解为表示某个事件发生的概率。
基本公式为:
Sigmoid的图像为:
Sigmoid函数的图像呈S形状,具有以下特点:
当输入 (x) 趋近正无穷时,(f(x)) 趋近于1;
当输入 (x) 趋近负无穷时,(f(x)) 趋近于0;
在 (x=0) 处,(f(0) = 0.5)。
由于Sigmoid函数的性质,它经常被用于构建二元分类器,将线性组合的结果转化为类别的概率。
1.4损失函数
在机器学习中,损失函数是用来衡量模型预测值与真实观测值之间的差异的函数。通常情况下,我们希望损失函数的值越小越好,因为这意味着模型的预测结果与真实情况更为接近。
不同的机器学习任务和模型类型通常会采用不同的损失函数。对于二分类的逻辑回归问题,通常采用交叉熵损失
其公式为:
逻辑回归通过最小化交叉熵损失来求解最优的模型参数,通常采用梯度下降等优化算法来实现这一目标。选择交叉熵作为损失函数的原因之一是它能够产生光滑、凸的损失曲面,有利于优化算法的收敛。
1.5梯度上升法
梯度上升法是一种优化算法,用于最大化一个函数的取值,通常被用于求解最大似然估计或者对数似然估计的问题。虽然它的名字是“上升”,但实际上它是沿着函数的梯度方向进行迭代,以便找到函数的局部最大值或全局最大值。
梯度上升法的基本思想是不断地沿着函数的梯度方向调整自变量的取值,直到达到函数的最大值。具体而言,对于待优化的函数
,梯度上升法的迭代更新规则如下:
其中
是学习率(也称为步长),控制着每次迭代的步长大小,
是函数
关于参数
的梯度。
在每次迭代中,梯度上升法都会计算函数
关于参数
的梯度,并沿着梯度的方向更新参数
。这样,通过不断迭代,参数
会逐渐朝着使得函数
取值最大的方向移动,直到达到最优值。
在逻辑回归中,梯度上升法可以被用来最大化对数似然函数,从而求解最优的模型参数。通过不断更新模型参数,使得对数似然函数的值不断增大,最终可以得到适合数据的模型参数。因此,梯度上升法在逻辑回归的训练中扮演着重要的角色。
2.逻辑回归代码演示
2.1准备数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据集
path = 'D:\作业-机器学习\LOG_data.txt'
Data = pd.read_csv(path, header=None, names=['X1', 'X2', 'Admitted'])
# 分割特征与标签
X = Data[['X1', 'X2']]
y = Data['Admitted']
2.2拟合逻辑回归模型
from sklearn.linear_model import LogisticRegression
# 创建逻辑回归模型
model = LogisticRegression()
# 拟合模型
model.fit(X, y)
2.3输出分类图像
# 画出数据散点图
fig, ax = plt.subplots(figsize=(10, 5))
ax.scatter(positive['X1'], positive['X2'], s=30, c='b', marker='o', label='Admitted')
ax.scatter(negative['X1'], negative['X2'], s=30, c='r', marker='o', label='Not Admitted')
# 生成决策边界
x1_min, x1_max = X['X1'].min(), X['X1'].max()
x2_min, x2_max = X['X2'].min(), X['X2'].max()
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max, 100), np.linspace(x2_min, x2_max, 100))
Z = model.predict(np.c_[xx1.ravel(), xx2.ravel()]).reshape(xx1.shape)
# 绘制分类边界
plt.contourf(xx1, xx2, Z, alpha=0.2)
# 设置图例与标签
ax.legend()
ax.set_xlabel('X1 Score')
ax.set_ylabel('X2 Score')
plt.show()
2.4结果展示
数据的图像:
运行代码后生成的图像
3.总结
逻辑回归是一种常用的分类算法,它有以下优点和缺点:
优点:
简单而且易于理解:逻辑回归是一种简单而直观的分类方法,易于理解和实现。
预测结果具有概率解释:逻辑回归可以输出分类为某一类的概率,因此可以得到结果的概率解释。
3. 在特征空间线性可分时表现良好:当数据集在特征空间中是线性可分的情况下,逻辑回归的表现通常很好。
缺点:
对特征空间的非线性关系拟合能力较弱:逻辑回归假设了特征与标签之间是线性关系,对于非线性关系的拟合能力较弱。
对异常值敏感:逻辑回归对异常值比较敏感,异常值的存在会影响模型的预测效果。
必须独立特征:逻辑回归要求特征之间相互独立,如果特征之间存在多重共线性,会影响逻辑回归的性能。
总的来说,逻辑回归是一种简单而有效的分类算法,特别适用于线性可分的情况以及需要得到结果概率解释的场景。然而,在复杂的非线性关系和存在多重共线性的情况下,逻辑回归的表现可能不如其他更复杂的模型。