关于逻辑回归(LR)模型的简单介绍

逻辑回归是一种经典的分类算法,尽管名字中含有 "回归",但实际上它是一种用于解决二分类问题的线性分类器。其核心思想是使用逻辑函数(通常是 Sigmoid 函数)将线性回归的结果映射到 0 到 1 的范围内,将线性回归的输出转换为概率,以此来表示样本属于某一类别的概率。

下面,我将从应用场景,核心代码实现(python)的方式将这块部分展开说明。

1.主要应用场景

  • 信用评分:根据用户的各种特征(如收入、年龄、历史信用记录等)预测用户是否会违约。
  • 疾病诊断:根据病人的症状、检查结果等特征预测是否患有某种疾病。
  • 市场营销:根据用户的行为和特征预测用户是否会对营销活动做出响应。
  • 文本分类:将文本分类为不同类别,例如将邮件分类为垃圾邮件或正常邮件。

2.Python 实现示例

这里简单介绍一个使用 tensorflow 实现逻辑回归的一个示例,使用梯度下降法训练模型

import tensorflow as tf

import numpy as np

生成一些模拟的二分类数据

np.random.seed(42)

X = np.random.randn(100, 2)

y = np.random.binomial(1, 1 / (1 + np.exp(-(2 * X[:, 0] + 3 * X[:, 1] - 1))).reshape(-1, 1)

划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

定义模型参数

learning_rate = 0.01

epochs = 1000

定义模型变量

weights = tf.Variable(tf.random.normal(shape=(2, 1), stddev=0.1))

bias = tf.Variable(tf.random.normal(shape=(1,), stddev=0.1))

定义逻辑回归函数

def logistic_regression(x):

logits = tf.matmul(x, weights) + bias

return tf.sigmoid(logits)

定义损失函数(交叉熵损失)

def loss_fn(y_true, y_pred):

return tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y_true, logits=tf.squeeze(y_pred)))

定义优化器

optimizer = tf.optimizers.SGD(learning_rate)

训练模型

for epoch in range(epochs):

with tf.GradientTape() as tape:

y_pred = logistic_regression(X_train)

loss = loss_fn(y_train, y_pred)

gradients = tape.gradient(loss, [weights, bias])

optimizer.apply_gradients(zip(gradients, [weights, bias]))

if (epoch + 1) % 100 == 0:

print(f"Epoch {epoch+1}/{epochs}, Loss: {loss.numpy():.4f}")

评估模型

y_pred_prob = logistic_regression(X_test)

y_pred = tf.cast(y_pred_prob > 0.5, tf.int32)

计算准确率

accuracy = tf.reduce_mean(tf.cast(tf.equal(y_pred, y_test), tf.float32))

print(f"Accuracy: {accuracy.numpy():.2f}")

查看最终的模型参数

print(f"Final weights: {weights.numpy()}")

print(f"Final bias: {bias.numpy()}")

代码解释:

  1. 数据生成和预处理

    • 使用 numpy 生成模拟的二分类数据,这里的真实数据是通过逻辑函数生成的,添加一些随机噪声。
    • 使用 train_test_split 将数据划分为训练集和测试集。
  2. 模型参数初始化

    • 使用 tf.Variable 初始化权重和偏置,使用正态分布进行随机初始化。
  3. 逻辑回归函数定义

    • logistic_regression 函数使用矩阵乘法和加法计算线性组合,然后使用 sigmoid 函数将结果映射到 0 到 1 的范围。
  4. 损失函数定义

    • 使用 sigmoid_cross_entropy_with_logits 计算交叉熵损失。
  5. 优化器

    • 使用 tf.optimizers.SGD 作为随机梯度下降优化器。
  6. 训练过程

    • 使用 tf.GradientTape 记录梯度信息,计算损失,计算梯度,更新参数。
  7. 评估

    • 计算测试集上的预测概率,将概率大于 0.5 的预测为类别 1,计算准确率。

使用 tensorflow 的实现更灵活,适合深入理解逻辑回归的训练过程和进行自定义修改。

相关推荐
We་ct3 分钟前
LeetCode 289. 生命游戏:题解+优化,从基础到原地最优
前端·算法·leetcode·矩阵·typescript
自己的九又四分之三站台4 分钟前
9:MemNet记忆层使用,实现大模型对话上下文记忆
人工智能·算法·机器学习
LXS_35720 分钟前
STL - 函数对象
开发语言·c++·算法
aini_lovee24 分钟前
基于粒子群算法(PSO)优化BP神经网络权值与阈值的实现
神经网络·算法
老鼠只爱大米33 分钟前
LeetCode经典算法面试题 #230:二叉搜索树中第K小的元素(递归法、迭代法、Morris等多种实现方案详细解析)
算法·leetcode·二叉搜索树·二叉树遍历·第k小的元素·morris遍历
星期五不见面35 分钟前
嵌入式学习!(一)C++学习-leetcode(21)-26/1/29
学习·算法·leetcode
有Li38 分钟前
肌肉骨骼感知(MUSA)深度学习用于解剖引导的头颈部CT可变形图像配准/文献速递-基于人工智能的医学影像技术
人工智能·深度学习·机器学习·文献·医学生
2501_9413220341 分钟前
通信设备零部件识别与检测基于改进YOLOv8-HAFB-2算法实现
算法·yolo
modelmd1 小时前
【递归算法】汉诺塔
python·算法
2401_838472511 小时前
C++中的装饰器模式实战
开发语言·c++·算法