在机器学习项目里,回归和分类是最基础的两类监督学习任务。回归面向连续数值预测,分类负责离散标签判定。理解二者原理并掌握Python实现,是建模入门的关键一步。

一、回归与分类的核心区别
回归算法的输出空间是连续的实数轴。以线性回归为例,模型假设特征与目标值之间存在线性关系,通过最小化预测值与真实值的平方误差来确定参数。它常用于房价预估、销量预测等场景,得到的预测结果可以是任意浮点数。
分类算法的输出是有限个类别标签。逻辑回归虽然名称含回归,实质是分类模型。它借助 sigmoid 函数将线性组合压缩到零到一之间,表示为样本属于正类的概率,再按阈值划分类别。与回归不同,分类更关注决策边界位置和类别准确率。
1.1 数学形式对比
线性回归的预测式为 y = w·x + b,直接输出数值。逻辑回归则在上面式子外包裹 sigmoid:p = 1 / (1 + e^-(w·x+b)),用概率表征类别归属。二者优化目标也不同,前者用均方误差,后者常用对数似然损失。
这种形式差异决定了评估指标的分野。回归看均方误差、R平方;分类看准确率、精确率、召回率。选错任务类型会导致模型完全失效,比如用回归直接预测类别编号会引入虚假的顺序关系。
二、Python环境准备与数据构造
我们使用 sklearn 和 numpy 构造模拟数据。回归数据用线性加噪声生成,分类数据用两类高斯分布生成。这样能直观看到算法如何拟合与分隔。
如下代码演示了数据生成过程。设置随机种子保证可复现,特征维度为一维方便可视化。实际项目中特征往往多维,但调用方式一致。
import numpy as np
from sklearn.datasets import make_regression, make_classification
# 回归数据:100样本,1特征,噪声标准差20
X_reg, y_reg = make_regression(n_samples=100, n_features=1, noise=20, random_state=42)
# 分类数据:100样本,2特征,2类
X_clf, y_clf = make_classification(n_samples=100, n_features=2, n_redundant=0, random_state=42)
print("回归样本特征形状:", X_reg.shape)
print("分类样本特征形状:", X_clf.shape)
三、线性回归实现与解析
sklearn 的 LinearRegression 采用普通最小二乘法闭式解或奇异值分解求解。无需手动设置超参数,适合作为基线模型。下面代码训练并输出系数与截距。
训练完成后,可用 score 方法得到 R 平方,反映模型解释方差的比例。若值接近一说明拟合好,接近零甚至负则说明模型不如均值预测。代码中同时计算了均方误差供参考。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
model_reg = LinearRegression()
model_reg.fit(X_reg, y_reg)
pred_reg = model_reg.predict(X_reg)
print("系数 w:", model_reg.coef_)
print("截距 b:", model_reg.intercept_)
print("R平方:", model_reg.score(X_reg, y_reg))
print("均方误差:", mean_squared_error(y_reg, pred_reg))
3.1 回归结果解读
系数表示特征每变动一单位,目标值的预期变动量。截距是特征全零时的基准输出。由于数据含噪声,预测值不会完全贴合真实点,但整体趋势应沿直线分布。
当特征间存在强相关时,普通最小二乘系数估计方差变大。此时可换用带正则的 Ridge 或 Lasso,但那是进阶内容。本教程聚焦基础原理,先建立正确直觉。
四、逻辑回归分类实现
LogisticRegression 默认使用 L2 正则与 liblinear 求解器。它输出线性组合后经 sigmoid 得到概率。predict 方法按零点五阈值给标签,predict_proba 可拿原始概率。
分类任务中,仅看准确率可能误导,尤其类别不平衡时。我们同时打印混淆矩阵与分类报告,观察各类精确率与召回率,判断模型偏好。
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
model_clf = LogisticRegression()
model_clf.fit(X_clf, y_clf)
pred_clf = model_clf.predict(X_clf)
print("分类报告:")
print(classification_report(y_clf, pred_clf))
print("混淆矩阵:")
print(confusion_matrix(y_clf, pred_clf))
4.1 决策边界可视化思路
对二维分类数据,可网格采样后调用 predict 得到区域类别,画出边界线。逻辑回归边界是线性的,对应 w·x+b=0 的直线。若数据非线性可分,需换核方法或神经网络。
理解边界有助于诊断模型。边界过偏说明正则过强或数据偏移;边界扭曲可能是过拟合。结合概率输出,还能设置自定义阈值平衡误报与漏报。
五、算法选择与实践建议
拿到业务问题先界定输出类型:连续量走回归,类别走分类。再审视数据规模与线性关系。小数据线性假设下,这两类模型效率高且可解释,常优于复杂黑盒。
工程落地时,记得先做 train_test_split 避免乐观偏差,用标准化提升收敛稳定性。回归分类虽基础,却是多数 pipeline 的起点。掌握其原理,后续树模型与集成方法才更易融会贯通。
| 任务类型 | 典型算法 | 输出形式 | 常用指标 |
|---|---|---|---|
| 回归 | 线性回归, Ridge | 连续数值 | MSE, R2 |
| 分类 | 逻辑回归, SVM | 类别或概率 | 准确率, F1 |
提示:逻辑回归不是回归算法,名称源于历史沿用,实际用于分类,勿被字面误导。
Pythonregression_classificationmachine_learning修改时间:2026-08-06 03:06:30