✅ 今日目标
- 理解分类(Classification)与回归(Regression)的本质区别
- 掌握两种任务的典型使用场景
- 学会根据任务类型选择合适的模型
- 了解每类模型对应的评估指标
📘 一、监督学习的两大任务类型
任务类型 | 输出结果 | 典型问题 | 示例 |
---|---|---|---|
分类(Classification) | 离散值(类标) | 哪一类? | 是否及格?是否点击广告? |
回归(Regression) | 连续值(实数) | 预测值是多少? | 房价预测、成绩分数 |
🧪 二、任务类型示例(Python 实践)
分类任务示例:
python
# 分类:预测学生是否及格(0 或 1)
y_class = [0, 1, 1, 0, 1, 1, 0]
回归任务示例:
python
# 回归:预测学生具体分数(连续值)
y_reg = [59.5, 85.2, 90.1, 62.0, 74.8]
🧮 三、模型适用对比
模型 | 分类 | 回归 |
---|---|---|
Logistic 回归 | ✅ | ❌ |
线性回归 | ❌ | ✅ |
决策树 | ✅ | ✅ |
随机森林 | ✅ | ✅ |
SVM | ✅ | ✅(需配置) |
KNN | ✅ | ✅ |
XGBoost / LightGBM | ✅ | ✅ |
📊 四、评估指标对比
指标类型 | 分类任务 | 回归任务 |
---|---|---|
主要指标 | 准确率(accuracy) 精确率 / 召回率 / F1 | 均方误差(MSE) 平均绝对误差(MAE) R² |
可视化 | 混淆矩阵、ROC曲线 | 拟合曲线、残差图 |
推荐工具 | classification_report() |
mean_squared_error() / r2_score() |
💡 五、任务识别技巧
当你拿到一个数据问题时,可以问自己:
- 目标变量是类别还是数值?
- 是判断"是否......",还是预测"多少......"?
- 标签值有多少种?是整数编码的类别,还是连续的数值?
🔧 六、实践建议
-
自构造一个小型分类与回归数据集
-
分别使用逻辑回归与线性回归模型进行建模
-
输出评估结果(准确率 / 均方误差)
-
可视化预测结果与真实值对比(选做)
python# 分类 vs 回归任务演示 from sklearn.linear_model import LogisticRegression, LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, accuracy_score, mean_squared_error, r2_score import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.family'] = 'Arial Unicode MS' # Mac 用户可用 plt.rcParams['axes.unicode_minus'] = False # 构造数据 np.random.seed(42) score_class = np.random.randint(40, 100, 100) is_pass = (score_class >= 60).astype(int) score_reg = score_class + np.random.normal(0, 5, 100) # 分类任务 X_class = score_class.reshape(-1, 1) y_class = is_pass Xc_train, Xc_test, yc_train, yc_test = train_test_split(X_class, y_class, test_size=0.2, random_state=0) clf = LogisticRegression() clf.fit(Xc_train, yc_train) y_pred_class = clf.predict(Xc_test) print("=== 分类评估 ===") print("准确率:", accuracy_score(yc_test, y_pred_class)) print(classification_report(yc_test, y_pred_class)) # 回归任务 X_reg = score_class.reshape(-1, 1) y_reg = score_reg Xr_train, Xr_test, yr_train, yr_test = train_test_split(X_reg, y_reg, test_size=0.2, random_state=0) reg = LinearRegression() reg.fit(Xr_train, yr_train) y_pred_reg = reg.predict(Xr_test) print("\n=== 回归评估 ===") print("MSE:", mean_squared_error(yr_test, y_pred_reg)) print("R²:", r2_score(yr_test, y_pred_reg)) # 可视化回归结果 plt.scatter(Xr_test, yr_test, color='blue', label='真实值') plt.plot(Xr_test, y_pred_reg, color='red', label='预测值') plt.title("回归拟合示意图") plt.xlabel("原始成绩") plt.ylabel("预测成绩") plt.legend() plt.tight_layout() plt.show()
运行输出:
python=== 分类评估 === 准确率: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 7 1 1.00 1.00 1.00 13 accuracy 1.00 20 macro avg 1.00 1.00 1.00 20 weighted avg 1.00 1.00 1.00 20 === 回归评估 === MSE: 20.031221042762812 R²: 0.9221734051498227
🧾 今日总结
内容 | 分类任务 | 回归任务 |
---|---|---|
输出 | 类别标签(0/1) | 连续实数值 |
代表模型 | Logistic 回归、树 | 线性回归、树 |
核心指标 | Accuracy、F1 | MSE、R² |
常见场景 | 医疗诊断、信用预测 | 销量预测、价格估计 |