Python中怎样进行逻辑回归?

来源:程序开发作者:三上悠亚头衔:网络博主
导读:本期聚焦于小伙伴创作的《Python中怎样进行逻辑回归?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python中怎样进行逻辑回归?》有用,将其分享出去将是对创作者最好的鼓励。

逻辑回归是一种用于二分类任务的线性模型,通过sigmoid函数将线性回归的输出映射到0到1之间,得到样本属于正类的概率,在Python中可以通过多种方式实现。

Python中怎样进行逻辑回归?

逻辑回归的基本原理

逻辑回归的核心是sigmoid函数,其公式为:

σ(z) = 1 / (1 + e^(-z))

其中z是线性回归的输出z = w^T * x + b,w是权重向量,b是偏置项,x是输入特征。当σ(z) >= 0.5时,预测样本为正类,否则为负类。

使用Python原生实现逻辑回归

1. 定义sigmoid函数

首先实现sigmoid函数,将线性输出转换为概率值:

import numpy as np

def sigmoid(z):
    # 避免z过大导致指数溢出,做截断处理
    z = np.clip(z, -500, 500)
    return 1 / (1 + np.exp(-z))

2. 定义损失函数与梯度

逻辑回归的损失函数采用交叉熵损失,公式如下:

L(w,b) = -1/m * Σ[y_i * log(σ(z_i)) + (1-y_i) * log(1-σ(z_i))]

对应的梯度为:

∂L/∂w = 1/m * X^T * (σ(z) - y)

∂L/∂b = 1/m * Σ(σ(z_i) - y_i)

实现损失计算和梯度计算的函数:

def compute_loss(y_true, y_pred):
    # 避免对数计算出现无穷大,对预测值做截断
    y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)
    m = len(y_true)
    loss = -1/m * np.sum(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
    return loss

def compute_gradient(X, y_true, y_pred):
    m = len(y_true)
    dw = 1/m * X.T.dot(y_pred - y_true)
    db = 1/m * np.sum(y_pred - y_true)
    return dw, db

3. 训练逻辑回归模型

使用梯度下降法迭代更新参数,直到损失收敛:

class LogisticRegression:
    def __init__(self, learning_rate=0.01, max_iter=1000, tol=1e-4):
        self.lr = learning_rate
        self.max_iter = max_iter
        self.tol = tol
        self.w = None
        self.b = None

    def fit(self, X, y):
        m, n = X.shape
        # 初始化参数
        self.w = np.zeros(n)
        self.b = 0
        prev_loss = None
        for i in range(self.max_iter):
            # 计算线性输出和预测概率
            z = X.dot(self.w) + self.b
            y_pred = sigmoid(z)
            # 计算损失
            loss = compute_loss(y, y_pred)
            # 检查损失是否收敛
            if prev_loss is not None and abs(prev_loss - loss) < self.tol:
                print(f"迭代{i}次后损失收敛")
                break
            prev_loss = loss
            # 计算梯度并更新参数
            dw, db = compute_gradient(X, y, y_pred)
            self.w -= self.lr * dw
            self.b -= self.lr * db

    def predict(self, X):
        z = X.dot(self.w) + self.b
        y_pred_prob = sigmoid(z)
        # 概率大于等于0.5预测为1,否则为0
        return (y_pred_prob >= 0.5).astype(int)

4. 测试原生实现的逻辑回归

使用sklearn自带的数据集验证模型效果:

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成二分类数据集
X, y = make_classification(n_samples=1000, n_features=5, n_informative=3, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
model = LogisticRegression(learning_rate=0.1, max_iter=2000)
model.fit(X_train, y_train)

# 预测并计算准确率
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print(f"原生实现逻辑回归测试集准确率:{acc:.4f}")

使用sklearn库快速实现逻辑回归

sklearn封装了完善的逻辑回归实现,无需手动编写梯度下降等底层逻辑,使用起来更加便捷:

from sklearn.linear_model import LogisticRegression as SklearnLR
from sklearn.metrics import classification_report

# 初始化模型,solver选择梯度下降优化器
sk_model = SklearnLR(solver='sag', max_iter=1000, random_state=42)
# 训练模型
sk_model.fit(X_train, y_train)
# 预测
sk_y_pred = sk_model.predict(X_test)
# 输出分类报告
print("sklearn逻辑回归分类报告:")
print(classification_report(y_test, sk_y_pred))

逻辑回归的注意事项

  • 逻辑回归对特征的尺度敏感,训练前建议对特征做标准化处理,加快梯度下降的收敛速度。
  • 如果类别不平衡,可以通过调整class_weight参数给少数类更高的权重,提升模型对少数类的识别能力。
  • 正则化参数C可以控制模型的复杂度,C越小正则化越强,能够缓解过拟合问题。
逻辑回归虽然结构简单,但可解释性强,在金融风控、用户流失预测等场景中应用广泛,是入门机器学习分类任务的首选模型之一。

Python逻辑回归sklearn分类模型梯度下降修改时间:2026-07-01 11:54:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。