逻辑回归是一种经典的分类算法,尽管名字中含有 “回归”,但实际上它是一种用于解决二分类问题的线性分类器。其核心思想是使用逻辑函数(通常是 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()}")
代码解释:
-
数据生成和预处理:
- 使用
numpy
生成模拟的二分类数据,这里的真实数据是通过逻辑函数生成的,添加一些随机噪声。 - 使用
train_test_split
将数据划分为训练集和测试集。
- 使用
-
模型参数初始化:
- 使用
tf.Variable
初始化权重和偏置,使用正态分布进行随机初始化。
- 使用
-
逻辑回归函数定义:
logistic_regression
函数使用矩阵乘法和加法计算线性组合,然后使用sigmoid
函数将结果映射到 0 到 1 的范围。
-
损失函数定义:
- 使用
sigmoid_cross_entropy_with_logits
计算交叉熵损失。
- 使用
-
优化器:
- 使用
tf.optimizers.SGD
作为随机梯度下降优化器。
- 使用
-
训练过程:
- 使用
tf.GradientTape
记录梯度信息,计算损失,计算梯度,更新参数。
- 使用
-
评估:
- 计算测试集上的预测概率,将概率大于 0.5 的预测为类别 1,计算准确率。
使用 tensorflow
的实现更灵活,适合深入理解逻辑回归的训练过程和进行自定义修改。