逻辑回归之原理介绍
1 课程概览
本课详细讲解逻辑回归的原理。逻辑回归(Logistic Regression)是分类模型,将线性回归的输出作为输入,通过Sigmoid函数将预测值映射为0-1之间的概率,结合阈值划分类别。通过具体示例演示预测过程和准确率计算,引出损失函数的概念。
2 核心概念与定义
- Logistic Regression:逻辑回归,分类模型。
- 假设函数:线性回归的输出作为逻辑回归的输入。
- 激活函数:Sigmoid函数,将预测值映射到0-1。
- 阈值:分类判断标准(如0.6)。
- 准确率:预测正确的样本数 / 总样本数。
3 算法与模型详解
3.1 逻辑回归原理
定义:逻辑回归是一种分类模型
基本思想:
- 利用线性回归 $W^TX + B$ 预测一个值
- 将预测值通过Sigmoid函数映射为概率(0-1)
- 设置阈值,大于阈值为一类,否则为另一类
公式: $$h_\theta(X) = \sigma(W^TX + B) = \frac{1}{1 + e^{-(W^TX + B)}}$$
3.2 API介绍
类名:LogisticRegression
位置:sklearn.linear_model
3.3 预测过程示例
数据:
| 特征1 | 特征2 | 特征3 | 预测值 | 概率 | 预测类别 | 真实类别 | 是否正确 |
|---|---|---|---|---|---|---|---|
| ... | ... | ... | ... | 0.40 | B | A | ❌ |
| ... | ... | ... | ... | 0.68 | A | B | ❌ |
| ... | ... | ... | ... | 0.41 | B | A | ❌ |
| ... | ... | ... | ... | 0.55 | B | B | ✅ |
| ... | ... | ... | ... | 0.71 | A | A | ✅ |
阈值:0.6
- 概率 > 0.6:A类
- 概率 ≤ 0.6:B类
3.4 准确率计算
公式: $$\text{准确率} = \frac{\text{预测正确的样本数}}{\text{总样本数}}$$
示例:
- 总样本数:5
- 预测正确:2
- 准确率:2/5 = 40%
3.5 预测过程详解
步骤:
- 特征输入:基于多列特征
- 线性回归预测:$W^TX + B$ 得到预测值
- Sigmoid映射:将预测值映射为概率(0-1)
- 阈值判断:结合阈值划分类别
- 结果对比:预测类别 vs 真实类别
3.6 线性回归 vs 逻辑回归
| 对比 | 线性回归 | 逻辑回归 |
|---|---|---|
| 任务 | 回归 | 分类 |
| 输出 | 预测值(任意实数) | 概率(0-1) |
| 公式 | $W^TX + B$ | $\sigma(W^TX + B)$ |
| 结果 | 连续值 | 类别 |
4 数学原理与推导
4.1 线性回归
$$z = W^TX + B$$
4.2 Sigmoid函数
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$
4.3 逻辑回归模型
$$h_\theta(X) = \frac{1}{1 + e^{-(W^TX + B)}}$$
4.4 分类决策
$$\text{预测} = \begin{cases} 1, & h_\theta(X) > \text{阈值} \ 0, & h_\theta(X) \leq \text{阈值} \end{cases}$$
4.5 准确率
$$\text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{TN} + \text{FP} + \text{FN}}$$
5 代码示例
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 1. 准备数据
np.random.seed(42)
# 生成示例数据
X = np.random.randn(100, 3) # 100个样本,3个特征
Y = (X[:, 0] + X[:, 1] > 0).astype(int) # 二分类标签
# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
# 3. 创建逻辑回归模型
model = LogisticRegression()
# 4. 训练模型
model.fit(X_train, y_train)
# 5. 预测
y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test) # 预测概率
# 6. 评估
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2%}")
print(f"权重W: {model.coef_}")
print(f"偏置B: {model.intercept_}")
# 7. 查看前5个样本的预测结果
print("\n前5个样本预测结果:")
for i in range(5):
print(f"样本{i+1}: 概率={y_prob[i][1]:.4f}, 预测={y_pred[i]}, 真实={y_test[i]}")
输出示例:
准确率: 95.00%
权重W: [[1.23 -0.45 0.67]]
偏置B: [0.12]
前5个样本预测结果:
样本1: 概率=0.8234, 预测=1, 真实=1
样本2: 概率=0.2156, 预测=0, 真实=0
样本3: 概率=0.6789, 预测=1, 真实=1
样本4: 概率=0.1234, 预测=0, 真实=0
样本5: 概率=0.5432, 预测=1, 真实=0
手动实现逻辑回归预测过程:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def logistic_predict(X, W, B, threshold=0.6):
"""手动实现逻辑回归预测"""
# 1. 线性回归预测
z = np.dot(X, W) + B
# 2. Sigmoid映射
prob = sigmoid(z)
# 3. 阈值判断
predictions = (prob > threshold).astype(int)
return predictions, prob
# 使用手动实现
W = np.array([0.5, 0.3, -0.2])
B = 0.1
predictions, probabilities = logistic_predict(X_test, W, B, threshold=0.6)
print("手动预测概率:", probabilities[:5])
print("手动预测结果:", predictions[:5])
6 重难点与易错提醒
- ❗重点:逻辑回归是分类模型,不是回归。
- ❗重点:线性回归的输出作为逻辑回归的输入。
- ❗重点:Sigmoid将预测值映射到0-1概率。
- ❗重点:准确率 = 预测正确数 / 总数。
- ⚠️易错:混淆逻辑回归和线性回归。
- ⚠️易错:阈值设置不当影响分类。
- 💡深入理解:逻辑回归 = 线性回归 + Sigmoid + 阈值判断。
7 课堂问答精选
Q: 逻辑回归的原理是什么?
A: 逻辑回归的原理是:
- 利用线性回归 $W^TX + B$ 预测一个值
- 将预测值通过Sigmoid函数映射为概率(0-1)
- 结合阈值划分类别(大于阈值为正类,否则为负类)
Q: 如何计算准确率?
A: 准确率 = 预测正确的样本数 / 总样本数 例如:5个样本中预测对了2个,准确率 = 2/5 = 40%。
8 本课小结
- 逻辑回归:分类模型,API为LogisticRegression。
- 原理:线性回归 → Sigmoid → 概率 → 阈值判断。
- 公式:$h_\theta(X) = \sigma(W^TX + B)$
- 准确率:预测正确数 / 总数。
- 线性回归输出作为逻辑回归输入。
9 延伸思考与实践
- 实践:用sklearn实现逻辑回归分类。
- 预习:逻辑回归案例(癌症预测)。
- 思考:如何选择合适的阈值?