8.1 学习目标
通过本章学习,读者应能够:
- 理解什么是分类模型及其适用场景
- 区分分类问题与回归问题
- 掌握逻辑回归这一基础分类模型的使用方法
- 理解分类模型的预测结果与评估指标
- 使用 Python 完成一个完整的分类建模流程
本章的目标是:
让读者理解"判断类问题"中,模型到底在判断什么。
8.2 什么是分类模型(从结果形式理解)
分类模型用于解决这样一类问题:
预测结果属于哪一类。
常见特征是:
- 结果不是一个连续数值
- 而是一个类别或标签
8.2.1 常见分类问题示例
- 是否达成运动目标(是 / 否)
- 是否存在风险(有 / 无)
- 邮件是否为垃圾邮件
- 用户是否会流失
只要问题的答案是:
"属于哪一类"或"是否发生"
通常就可以考虑使用分类模型。
8.3 分类模型与回归模型的根本区别
可以从预测结果的形式来区分:
| 模型类型 | 预测结果 |
|---|---|
| 回归模型 | 连续数值 |
| 分类模型 | 类别或概率 |
例如:
- 预测"今天走了多少步" → 回归
- 判断"是否超过 8000 步" → 分类
8.4 从业务问题到分类问题的转化
很多业务问题,原本是"数值",但真正关心的是判断。
例如:
- 原始问题:预测每日步数
- 实际决策:是否达成目标
此时,可以将问题转化为:
text
daily_steps ≥ 8000 → 1
daily_steps < 8000 → 0
这一步称为:
标签离散化(或二值化)
8.5 逻辑回归:最基础的分类模型
8.5.1 名字里有"回归",但它是分类模型
逻辑回归(Logistic Regression) 是:
- 最基础、最常用的分类模型之一
- 广泛用于二分类问题
它的输出本质是:
- 一个 概率值(介于 0 和 1 之间)
8.5.2 直观理解逻辑回归在做什么
可以这样理解:
模型在判断:某个样本"属于某一类的可能性有多大"。
然后再根据阈值(通常是 0.5):
- 大于阈值 → 判为正类
- 小于阈值 → 判为负类
8.6 分类模型的基本训练流程
分类模型的训练流程,与回归模型高度一致:
- 准备特征和标签
- 将标签转换为类别(如 0 / 1)
- 划分训练集和测试集
- 创建并训练模型
- 预测与评估
下面通过一个完整示例来演示。
8.7 Python 示例:判断是否达成运动目标
示例场景
根据用户的年龄和运动时长,判断其是否达成 8000 步目标。
8.7.1 构造示例数据
python
import pandas as pd
data = {
'age': [25, 30, 45, 35, 50, 28, 40, 60],
'exercise_minutes': [30, 20, 10, 40, 15, 25, 20, 5],
'daily_steps': [8000, 6000, 3000, 10000, 4000, 7000, 5000, 2000]
}
df = pd.DataFrame(data)
# 构造分类标签:是否达成 8000 步
df['target'] = (df['daily_steps'] >= 8000).astype(int)
print(df)
8.7.2 分离特征与标签
python
X = df[['age', 'exercise_minutes']]
y = df['target']
8.7.3 划分训练集和测试集
python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
8.7.4 创建并训练逻辑回归模型
python
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
8.7.5 进行预测
python
y_pred = model.predict(X_test)
print("真实标签:", y_test.values)
print("预测标签:", y_pred)
8.8 分类模型的评估方式
8.8.1 准确率(Accuracy)
python
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
准确率表示:
预测正确的样本占总样本的比例
8.8.2 为什么不能只看准确率
在某些场景中:
- 正负样本极不平衡
- "全预测为否"也可能准确率很高
因此,准确率并非万能指标。
8.9 分类模型输出结果如何理解
8.9.1 标签预测 vs 概率预测
python
# 预测类别
model.predict(X_test)
# 预测属于正类的概率
model.predict_proba(X_test)
predict_proba 输出的是:
- 属于每一类的概率
- 常用于风险评估类问题
8.9.2 阈值的作用
默认阈值是 0.5,但在实际业务中:
- 可以根据需求调整
- 例如"宁可多报风险,也不要漏报"
8.10 分类模型中的常见误区
8.10.1 把分类问题当回归问题
- 用回归模型预测 0 / 1
- 再强行四舍五入
这是不推荐的做法。
8.10.2 忽略类别不平衡问题
- 少数类被忽视
- 模型"看起来正确",但实际无用
8.10.3 直接使用原始类别特征
- 未编码
- 模型无法处理
8.11 本章小结
本章重点内容包括:
- 分类模型用于判断"属于哪一类"
- 逻辑回归是最基础的分类模型
- 分类结果通常以概率和标签两种形式输出
- 评估分类模型不能只看训练集效果
这些内容将为后续更复杂分类模型打下基础。
8.12 课后练习
一、判断题
- 分类模型的输出结果通常是类别或概率。
- 逻辑回归属于回归模型。
- 分类模型可以用于"是否发生"类问题。
二、简答题
- 分类模型与回归模型的主要区别是什么?
- 为什么在分类问题中不能只依赖准确率?
三、实践题(思考)
在"学生学习行为数据"中,如果目标是判断:
"该学生是否存在挂科风险"
请回答:
- 这是回归问题还是分类问题?
- 标签应如何设计?
8.13 练习题参考答案
一、判断题答案
- 正确
- 错误
- 正确
二、简答题参考要点
第 1 题:
- 回归模型预测连续数值
- 分类模型预测类别或概率
第 2 题:
- 数据分布不平衡会误导准确率
- 需要结合业务目标选择评估指标
三、实践题参考答案
-
分类问题
-
标签可设为:
- 有挂科风险 → 1
- 无挂科风险 → 0