逻辑回归(Logistic Regression)

逻辑回归(Logistic Regression)

一、逻辑回归是什么

逻辑回归(Logistic Regression)虽然名字里有 “回归”,但它实际上是一种用于解决分类问题的机器学习算法 。简单来说,就是通过输入一些特征数据,来预测样本属于某个类别的概率。比如,根据一个人的年龄、收入、消费习惯等特征,预测他是否会购买某款产品;或者根据患者的症状、病史等信息,判断他是否患有某种疾病。

二、逻辑回归的原理

逻辑回归基于一个关键的函数 —— 逻辑函数(也叫 Sigmoid 函数)。Sigmoid 函数的表达式为:

σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1 + e^{-z}} σ(z)=1+ez1

其中, z z z是一个线性组合,通常表示为 z = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n z = \beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n z=β0+β1x1+β2x2++βnxn β i \beta_i βi是模型的参数, x i x_i xi是输入的特征。Sigmoid 函数的图像是一条 S 型曲线,它的取值范围在 0 到 1 之间。当 z z z趋近于正无穷时, σ ( z ) \sigma(z) σ(z)趋近于 1;当 z z z趋近于负无穷时, σ ( z ) \sigma(z) σ(z)趋近于 0。

逻辑回归的核心思想就是通过调整参数 β i \beta_i βi,使得模型预测的概率 σ ( z ) \sigma(z) σ(z)尽可能接近样本的真实类别。如果预测概率大于 0.5,就将样本归为正类;如果小于 0.5,就归为负类。

三、逻辑回归的模型表达式

在二分类问题中,逻辑回归模型可以表示为:

P ( y = 1 ∣ x ; β ) = 1 1 + e − ( β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n ) P(y = 1|x;\beta)=\frac{1}{1 + e^{-(\beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n)}} P(y=1∣x;β)=1+e(β0+β1x1+β2x2++βnxn)1

其中, P ( y = 1 ∣ x ; β ) P(y = 1|x;\beta) P(y=1∣x;β)表示在给定特征 x x x和参数 β \beta β的情况下,样本属于正类( y = 1 y = 1 y=1)的概率。

对于多分类问题,通常采用 Softmax 回归,它是逻辑回归在多分类任务上的扩展。Softmax 函数的表达式为:

P ( y = k ∣ x ; β ) = e β k T x ∑ j = 1 K e β j T x P(y = k|x;\beta)=\frac{e^{\beta_k^Tx}}{\sum_{j = 1}^{K}e^{\beta_j^Tx}} P(y=kx;β)=j=1KeβjTxeβkTx

其中, K K K是类别总数, P ( y = k ∣ x ; β ) P(y = k|x;\beta) P(y=kx;β)表示样本属于第 k k k类的概率。

四、逻辑回归的参数估计

逻辑回归通常使用最大似然估计法来估计参数。最大似然估计的目标是找到一组参数 β \beta β,使得观测数据出现的概率最大。对于二分类问题,似然函数可以表示为:

L ( β ) = ∏ i = 1 n [ P ( y i = 1 ∣ x i ; β ) ] y i [ 1 − P ( y i = 1 ∣ x i ; β ) ] 1 − y i L(\beta)=\prod_{i = 1}^{n}[P(y_i = 1|x_i;\beta)]^{y_i}[1 - P(y_i = 1|x_i;\beta)]^{1 - y_i} L(β)=i=1n[P(yi=1∣xi;β)]yi[1P(yi=1∣xi;β)]1yi

其中, n n n是样本数量, y i y_i yi是第 i i i个样本的真实类别。为了方便计算,通常对似然函数取对数,得到对数似然函数:

ℓ ( β ) = ∑ i = 1 n [ y i log ⁡ ( P ( y i = 1 ∣ x i ; β ) ) + ( 1 − y i ) log ⁡ ( 1 − P ( y i = 1 ∣ x i ; β ) ) ] \ell(\beta)=\sum_{i = 1}^{n}[y_i\log(P(y_i = 1|x_i;\beta))+(1 - y_i)\log(1 - P(y_i = 1|x_i;\beta))] (β)=i=1n[yilog(P(yi=1∣xi;β))+(1yi)log(1P(yi=1∣xi;β))]

然后通过梯度下降等优化算法来最大化对数似然函数,从而得到参数 β \beta β的估计值。在梯度下降算法中,每次迭代都会沿着对数似然函数梯度的方向更新参数,步长由学习率决定。常见的梯度下降算法有批量梯度下降(BGD)、随机梯度下降(SGD)和小批量梯度下降(MBGD)。BGD 在每次更新参数时使用全部样本数据,计算精确但计算量大;SGD 每次只使用一个样本数据来更新参数,计算速度快但过程不稳定;MBGD 则是每次使用一小部分样本数据更新参数,平衡了计算量和稳定性。

五、逻辑回归的应用场景

医疗领域:预测疾病的发生风险,如根据患者的基因数据、生活习惯等预测患心脏病、糖尿病的概率,帮助医生进行早期诊断和干预。在实际应用中,医生可以利用逻辑回归模型对患者进行初步筛查,对于高风险患者进一步安排更详细的检查和治疗方案。

金融领域:信用风险评估,银行根据客户的收入、负债、信用记录等特征,评估客户违约的概率,以此决定是否给予贷款以及贷款额度。金融机构通过逻辑回归模型建立信用评分体系,将不同客户的信用风险量化,有效降低了不良贷款的发生率。

市场营销:客户细分和精准营销,根据客户的属性和行为数据,预测客户对某种产品或服务的购买意愿,从而制定针对性的营销策略。例如电商平台可以根据用户的浏览历史、购买记录等数据,使用逻辑回归模型预测用户对特定商品的购买概率,进而为用户推送个性化的商品推荐信息。

六、逻辑回归的模型评估

混淆矩阵:它是评估分类模型的基础工具,对于二分类问题,混淆矩阵由真正例(TP)、假正例(FP)、真反例(TN)和假反例(FN)四个部分组成。通过混淆矩阵可以直观地了解模型在各个类别上的预测情况。

准确率(Accuracy):计算公式为 T P + T N T P + T N + F P + F N \frac{TP + TN}{TP + TN + FP + FN} TP+TN+FP+FNTP+TN ,表示预测正确的样本占总样本的比例。但当正负样本不均衡时,准确率可能会产生误导。

精确率(Precision):即 T P T P + F P \frac{TP}{TP + FP} TP+FPTP ,反映了预测为正类的样本中实际为正类的比例,对于那些将负类误判为正类代价较高的场景,精确率尤为重要。

召回率(Recall):也叫灵敏度或真正例率,公式为 T P T P + F N \frac{TP}{TP + FN} TP+FNTP ,体现了实际正类样本中被正确预测为正类的比例,在像疾病检测这类需要尽可能找出所有患病样本的场景中,召回率是关键指标。

F1 值:是精确率和召回率的调和平均数,计算公式为 F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1 = 2\times\frac{Precision\times Recall}{Precision + Recall} F1=2×Precision+RecallPrecision×Recall ,它综合考虑了精确率和召回率,更全面地评估了模型性能。

受试者工作特征曲线(ROC):以假正例率(FPR)为横轴,真正例率(TPR)为纵轴绘制的曲线。曲线越靠近左上角,说明模型性能越好。通过计算曲线下面积(AUC)可以量化评估模型的分类能力,AUC 取值范围在 0 到 1 之间,AUC 越大表示模型性能越优。

七、逻辑回归的优缺点

优点

原理简单,易于理解和实现:逻辑回归的原理基于线性回归和 Sigmoid 函数,数学原理相对简单,实现过程不复杂,在工业界和学术界都广泛应用。

计算效率高:无论是训练还是预测阶段,逻辑回归的计算量都相对较小,对于大规模数据处理有明显优势。在面对海量数据时,能够快速完成模型训练和预测任务,节省计算资源和时间成本。

可解释性强:逻辑回归的参数具有明确的含义,每个特征对应的系数可以直观地反映该特征对预测结果的影响方向和程度。例如在信用风险评估中,收入特征对应的系数为正,说明收入越高,客户违约的概率越低,便于业务人员理解和使用。

缺点

对数据分布有一定要求:逻辑回归假设数据满足线性可分或近似线性可分,如果数据分布复杂,逻辑回归的性能会受到较大影响。比如数据存在高度非线性关系时,逻辑回归模型可能无法准确捕捉数据特征,导致预测效果不佳。

容易欠拟合:逻辑回归本质上是一种线性模型,对于复杂的数据模式和关系的拟合能力有限。当数据特征之间存在复杂的相互作用时,逻辑回归可能无法充分挖掘这些信息,从而产生欠拟合现象,使模型的泛化能力下降。

只能处理线性可分问题:对于非线性可分的数据,逻辑回归需要通过特征工程对数据进行转换,增加模型复杂度。如果转换效果不佳,模型的性能和准确性难以保证。

八、逻辑回归与其他算法对比

与决策树对比:决策树是一种基于树形结构的分类算法,它可以处理非线性问题,并且对数据分布没有严格要求。与逻辑回归相比,决策树的可解释性也较强,但决策树容易过拟合,尤其是在数据特征较多时。而逻辑回归更适合处理线性可分的数据,计算效率更高。在实际应用中,如果数据呈现明显的非线性特征,决策树可能更合适;如果数据近似线性可分,且对计算效率和可解释性要求较高,逻辑回归是更好的选择。

与支持向量机(SVM)对比:SVM 是一种强大的分类算法,它通过寻找最大间隔超平面来对数据进行分类,对于线性可分和非线性可分的数据都有很好的表现。SVM 在处理小样本、非线性问题时表现出色,但计算复杂度较高,对核函数的选择也比较敏感。逻辑回归则计算简单,可解释性强,但在处理复杂非线性问题时能力有限。在数据集较小且非线性特征明显时,SVM 可能更具优势;而在大规模数据和对可解释性要求高的场景下,逻辑回归更适用。

九、MATLAB 代码实现逻辑回归

以下是使用 MATLAB 实现逻辑回归的示例代码,包括数据准备、模型训练和预测评估部分。假设我们有一个二分类问题,数据存储在矩阵X中,每一行代表一个样本,每一列代表一个特征,标签存储在向量y中。

数据准备

% 生成一些随机数据作为示例
n = 100; % 样本数量
p = 5; % 特征数量
X = randn(n, p); % 随机生成特征矩阵
beta_true = [1; -0.5; 0.3; -0.2; 0.1]; % 真实的参数
z = X * beta_true;
y = 1./ (1 + exp(-z)) > 0.5; % 根据真实参数生成标签,模拟真实数据生成过程
y = y + 0; % 将逻辑值转换为数值型(0和1)

% 划分训练集和测试集
train_ratio = 0.8;
train_size = round(train_ratio * n);
train_X = X(1:train_size, :);
train_y = y(1:train_size);
test_X = X(train_size + 1:end, :);
test_y = y(train_size + 1:end);

模型训练

% 初始化参数
theta = zeros(p, 1);
alpha = 0.01; % 学习率
num_iterations = 1000;

for iter = 1:num_iterations
    % 计算预测值
    h = 1./ (1 + exp(-train_X * theta));
    
    % 计算梯度
    gradient = (1 / train_size) * train_X' * (h - train_y);
    
    % 更新参数
    theta = theta - alpha * gradient;
end

模型预测与评估

% 预测测试集
h_test = 1./ (1 + exp(-test_X * theta));
predicted_y = h_test > 0.5;
predicted_y = predicted_y + 0; % 将逻辑值转换为数值型(0和1)

% 计算准确率
accuracy = sum(predicted_y == test_y) / length(test_y);
fprintf('测试集准确率: %.2f%%\n', accuracy * 100);

% 计算混淆矩阵
confusion_matrix = zeros(2, 2);
for i = 1:length(test_y)
    if test_y(i) == 1 && predicted_y(i) == 1
        confusion_matrix(1, 1) = confusion_matrix(1, 1) + 1; % 真正例
    elseif test_y(i) == 1 && predicted_y(i) == 0
        confusion_matrix(1, 2) = confusion_matrix(1, 2) + 1; % 假反例
    elseif test_y(i) == 0 && predicted_y(i) == 1
        confusion_matrix(2, 1) = confusion_matrix(2, 1) + 1; % 假正例
    else
        confusion_matrix(2, 2) = confusion_matrix(2, 2) + 1; % 真反例
    end
end
disp('混淆矩阵:');
disp(confusion_matrix);

% 计算精确率
precision = confusion_matrix(1, 1) / (confusion_matrix(1, 1) + confusion_matrix(2, 1));
fprintf('精确率: %.2f\n', precision);

% 计算召回率
recall = confusion_matrix(1, 1) / (confusion_matrix(1, 1) + confusion_matrix(1, 2));
fprintf('召回率: %.2f\n', recall);

% 计算F1值
f1_score = 2 * (precision * recall) / (precision + recall);
fprintf('F1值: %.2f\n', f1_score);

上述代码展示了如何使用 MATLAB 实现一个简单的逻辑回归模型,从数据准备、模型训练到模型评估的完整流程。在实际应用中,你可以根据具体问题对数据进行预处理、调整模型参数,以获得更好的性能。

逻辑回归虽然原理相对简单,但在实际应用中非常广泛且有效。它是机器学习入门的重要算法之一,为我们解决各种分类问题提供了有力的工具。通过深入理解逻辑回归的原理、应用、评估方法以及与其他算法的对比,我们可以更好地利用它来处理现实世界中的数据和问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值