线性回归与逻辑回归的5折交叉验证

线性回归与逻辑回归的5折交叉验证

陈拓 2026/7/31-2026/8/1

1. 5折交叉验证核心原理

5折交叉验证(5-fold Cross Validation)是机器学习中用于稳定评估模型泛化能力的核心方法,有效解决单次数据集划分带来的偶然性问题,核心规则如下:

  • 将全部数据集随机切分成 5 份互不重叠 的子集(称为 fold);
  • 循环执行 5 轮训练与验证:每一轮选取1 份作为验证集 ,剩下 4 份合并作为训练集
  • 每一轮独立训练模型、评估模型性能,最终得到 5 组验证分数;
  • 5 个验证分数的平均值,作为模型最终的整体泛化性能指标。

1.1 优缺点总结

优点:充分利用全部数据参与训练和验证,彻底减少单次 train_test_split 划分带来的运气偏差,评估结果更客观、稳定。

缺点:需要循环训练5次,训练计算成本约为普通单次划分的5倍。

2. 5折交叉验证原理示意

数据集整体:【Fold1|Fold2|Fold3|Fold4|Fold5】

第1 :训练集(Fold2、Fold3、Fold4、Fold5),验证集(Fold1)

第2 :训练集(Fold1、Fold3、Fold4、Fold5),验证集(Fold2)

第3 :训练集(Fold1、Fold2、Fold4、Fold5),验证集(Fold3)

第4 :训练集(Fold1、Fold2、Fold3、Fold5),验证集(Fold4)

第5 :训练集(Fold1、Fold2、Fold3、Fold4),验证集(Fold5)

2.1 核心要点

每一轮验证集互不重叠,所有样本都有且仅有一次充当验证数据,数据利用率最大化。

2.2 一句话极简概括

轮流选1份数据做验证集,剩余4份做训练集,循环5次,取平均分评估模型。

3. 回归任务示例(线性回归)

基于模拟回归数据集,使用5折交叉验证评估线性回归模型,输出每折训练、验证分数及平均分。

下面的代码用来评估sklearn的内置模型LinearRegression的泛化能力。

3.1 回归任务代码

Linear_Regression.py

python 复制代码
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_validate

# 1. 生成数据集:创建1000条无噪声标准线性回归数据,固定随机种子保证结果可复现
# 数据特征与标签呈严格线性关系,无冗余、无噪声,适合模型拟合测试
X, y = make_regression(n_samples=1000, random_state=0)

# 2. 初始化线性回归模型,无额外参数限制,使用默认拟合规则
lr = LinearRegression()

# 3. 核心执行:5折交叉验证
# cv=5:将数据集自动划分为5份,轮流训练、验证
# return_train_score=True:不仅返回验证集分数,同时输出训练集分数,用于过拟合判断
# 自动循环5轮:4份训练、1份验证,完成全部折数评估
result = cross_validate(lr, X, y, cv=5, return_train_score=True)

# 4. 输出结果:打印每折验证集得分、平均得分、每折训练集得分
print("每折验证集R²得分:", result["test_score"])
print("5折平均验证R²得分:", np.mean(result["test_score"]))
print("每折训练集R²得分:", result["train_score"])

3.2 回归代码运行结果

3.2.1 运行流程图示(极简流程)

数据源(1000条纯净数据) → 初始化模型 → 自动5折拆分数据 → 5轮循环训练+验证 → 保存训练/验证分数 → 计算平均分 → 输出结果

3.2.2 核心运行说明
    • 自动拆分:无需手动划分训练集、验证集,cross_validate自动完成5折数据拆分与轮换训练
    • 批量评估:一次性完成5次模型训练与评估,输出每一轮独立分数,规避单次划分的随机性
    • 双向评分:同时获取训练集、验证集分数,可直接对比判断模型是否过拟合、欠拟合
3.2.3 结果

该模拟数据集无噪声、规律清晰,模型拟合效果极佳,所有折数得分趋近于1,无过拟合现象。

每折验证集R²得分: 1. 1. 1. 1. 1.

5折平均验证R²得分: 1.0

每折训练集R²得分: 1. 1. 1. 1. 1.

结果详细说明 :R²取值范围为(-∞,1],分数越接近1代表模型拟合效果越好。本次实验基于 make_regression 生成的纯净无噪声数据集,数据特征与标签存在严格的线性对应关系。因此无论是训练集还是5轮不同的验证集,模型拟合精度均达到满分1.0。训练集分数与验证集分数完全持平,无分数差距,说明模型无过拟合、无欠拟合,泛化性能优异,5折交叉验证结果稳定、可信度极高。

3.3 R²(决定系数)标准解释

R²(R-squared,决定系数/拟合优度)是回归任务专属核心评价指标,用于衡量模型对数据规律的解释能力,反映模型拟合效果的优劣。

  • 取值范围通俗解释(-\\infty, 1\],数学含义为「小于或等于1的所有实数」。中括号代表可以取到最大值1(满分),小括号代表无下限、可以无限变小;永远不会出现大于1的分数。
  • 数值含义:R² 越接近 1,代表模型拟合效果越好,模型可以精准解释数据的变化规律;R² 等于 0,代表模型拟合效果等价于直接取数据平均值,未学习到任何特征规律;R² 小于 0,代表模型拟合效果极差,比均值预测效果更差。
  • 实验对应关系:本次实验所有折数的训练、验证R²均为1.0,代表模型完全拟合数据线性规律,拟合效果达到最优。

R²(R-squared,决定系数/拟合优度)是回归任务专属核心评价指标,用于衡量模型对数据规律的解释能力,反映模型拟合效果的优劣。

  • 取值范围(-\\infty, 1\]
  • 数值含义:R² 越接近 1,代表模型拟合效果越好,模型可以精准解释数据的变化规律;R² 等于 0,代表模型拟合效果等价于直接取数据平均值,未学习到任何特征规律;R² 小于 0,代表模型拟合效果极差,比均值预测效果更差。
  • 实验对应关系:本次实验所有折数的训练、验证R²均为1.0,代表模型完全拟合数据线性规律,拟合效果达到最优。

4. 分类任务示例(鸢尾花+逻辑回归)

基于经典鸢尾花数据集,完成分类任务的5折交叉验证,默认评估指标为准确率(accuracy)。下面先展示鸢尾花数据集完整信息查看代码,直观理解实验数据结构。

4.0 鸢尾花数据集可视化与信息查看

鸢尾花(Iris)是机器学习经典多分类数据集,用于区分3种鸢尾花品种,包含4个特征、150条样本,数据均衡、无缺失,非常适合分类模型测试。

4.0.1 代码

Iris_data.py

python 复制代码
from sklearn.datasets import load_iris

# 加载数据集
iris = load_iris()
X, y = load_iris(return_X_y=True)

# 打印数据集基本信息
print("特征数据 X shape:", X.shape)   # 样本数、特征数
print("标签数据 y shape:", y.shape)   # 样本标签
print("特征名称:", iris.feature_names)
print("类别名称:", iris.target_names)
print("前5行特征数据:")
print(X[:5])
print("前5个标签:", y[:5])
4.0.2 数据集运行输出结果

特征数据 X shape: (150, 4)

标签数据 y shape: (150,)

特征名称: 'sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'

(花萼长度(厘米)、花萼宽度(厘米)、花瓣长度(厘米)、花瓣宽度(厘米))

类别名称: 'setosa' 'versicolor' 'virginica'

(山鸢尾 变色鸢尾 弗吉尼亚鸢尾)

前5行特征数据:

\[5.1 3.5 1.4 0.2

4.9 3. 1.4 0.2

4.7 3.2 1.3 0.2

4.6 3.1 1.5 0.2

5. 3.6 1.4 0.2\]

前5个标签: 0 0 0 0 0

数据集运行输出结果说明前 5 行特征数据的标签为 0,也就是前 5 行特征数据被标注为 setosa(山鸢尾)。

4.0.3 数据集核心信息解读
  • 数据规模:共150条样本,4维特征,1维分类标签,数据集结构规整、无缺失值。
  • 分类任务:3分类任务,标签0/1/2分别对应三种鸢尾花品种
  • 数据特点:样本均衡、数据干净、特征区分度高,因此逻辑回归5折准确率极高、泛化效果稳定
  • 标签与品种严格对应关系:鸢尾花数据集为规整有序数据集,标签与花卉品种一一映射,是模型分类学习的核心依据:
  • 标签 0 → setosa(山鸢尾)
  • 标签 1 → versicolor(变色鸢尾)
  • 标签 2 → virginica(维吉尼亚鸢尾)
  • 样本分布规律:数据集样本有序排列,0--49号样本为setosa、50--99号样本为versicolor、100--149号样本为virginica,三类样本数量均衡。
  • 数据特点:样本均衡、数据干净、不同品种特征区分度高,因此逻辑回归模型训练效果好,5折交叉验证准确率极高、泛化效果稳定。

4.1 分类任务代码

下面的代码用来评估sklearn的内置模型LogisticRegression的泛化能力。

Logistic_Regression.py

python 复制代码
import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_validate

# 加载鸢尾花分类数据集
X, y = load_iris(return_X_y=True)
# 初始化逻辑回归模型,增大迭代次数保证模型收敛
clf = LogisticRegression(max_iter=200, random_state=0)

# 5折交叉验证,同时返回训练集、验证集评分
res = cross_validate(clf, X, y, cv=5, return_train_score=True)

# 打印分类任务准确率结果
print("5折验证集准确率:", res["test_score"])
print("5折平均准确率:", np.mean(res["test_score"]))

4.2 分类代码运行结果示例

鸢尾花数据集分类难度低,模型泛化能力优秀,5折交叉验证准确率稳定且数值较高。

5折验证集准确率: 0.96666667 1. 0.93333333 0.96666667 1.

5折平均准确率: 0.9733333333333334

5. 核心API说明(cross_validate)

5.1 函数原型

cross_validate(estimator, X, y, cv=5)

5.2 关键参数

    • cv=5:指定5折交叉验证,支持传入整数、自定义数据分割器

5.3 返回字典常用键值

    • test_score:每一轮验证集的评估分数(核心参考指标)
    • train_score:每一轮训练集的评估分数,用于判断过拟合
    • fit_time:每一轮模型训练耗时
    • score_time:每一轮模型评估耗时

6. 基于5折结果的过拟合判断规则

  • 泛化效果良好:训练集分数 ≈ 验证集分数,模型无明显过拟合、欠拟合
  • 存在过拟合:训练集分数远高于验证集分数,模型在训练数据表现极好、未知数据表现差

7. 核心概念区分

7.1 train_test_split单次划分 VS 5折交叉验证

  • train_test_split:仅单次划分训练集、测试集,代码简单、速度快,但评估结果存在随机性,容易受数据划分运气影响
  • 5 折交叉验证:多次划分、循环评估,结果稳定可靠、客观性强,但计算量更大、训练耗时更长

8. 全文总结

5折交叉验证通过将数据集均分为5份,轮流轮换训练集与验证集,充分利用全部数据,规避单次划分的偶然性,通过多轮评分均值稳定评估模型的泛化能力,是机器学习模型评估、超参数优选的基础核心方法。

9. 线性回归与逻辑回归的核心对比

本文档分别使用了线性回归(回归任务) 、**逻辑回归(分类任务)**配合5折交叉验证完成模型评估,二者极易混淆,下面做标准区分:

9.1 核心用途区别

  • 线性回归(LinearRegression :用于回归任务 ,预测连续数值
  • 示例:房价预测、温度预测、数据趋势拟合。
  • 逻辑回归(LogisticRegression :用于二分类 / 多分类任务 ,预测离散类别
  • 示例:花朵分类、是否违约、正负样本判别。

9.2 预测输出区别

  • 线性回归:输出实数,范围 (-\\infty,+\\infty),可以是任意连续数值。
  • 逻辑回归:输出概率值(0~1之间),最终映射为离散类别 0/1。

9.3 评价指标区别(对应本文实验)

  • 线性回归(回归) :使用 决定系数
  • 衡量模型拟合程度,越接近1拟合效果越好。
  • 逻辑回归(分类) :使用 准确率 accuracy
  • 衡量分类正确样本的占比,越接近1精度越高。

9.4 模型公式与拟合目标

  • 线性回归:直接拟合直线 y=wx+b,最小化预测值与真实值的误差。
  • 逻辑回归:在线性基础上增加sigmoid映射,将结果压缩至0~1,用于概率分类。

9.5 结合5折交叉验证的统一特点

无论是线性回归还是逻辑回归,都可以直接放入 cross_validate 进行5折交叉验证:

  • 自动规避单次划分的随机性;
  • 统一使用「训练分数&验证分数」对比判断过拟合;
  • 取多轮均值,模型评估结果更稳定、可信。

9.6 极简一句话区分

线性回归:预测数字(连续);逻辑回归:预测类别(离散)。

相关推荐
FBI HackerHarry浩2 天前
AI大模型开发V2第四阶段线性回归
人工智能·算法·线性回归
2601_960906724 天前
一致行动人合计持股比例变动超过1%整数倍
人工智能·逻辑回归·爬山算法·散列表·启发式算法·广度优先
落苜蓿蓝5 天前
彩笔运维勇闯机器学习--多元线性回归(实战)
运维·机器学习·线性回归
骊城英雄5 天前
彩笔运维勇闯机器学习--逻辑回归
运维·机器学习·逻辑回归
m0_726365837 天前
# Chrome纸牌游戏预测工具开发实战:Canvas图表识别、OCR与实时状态监控
chrome·python·游戏·贪心算法·ocr·线性回归·哈希算法
青山木8 天前
Hot 100 --- 电话号码的字母组合
java·数据结构·算法·leetcode·逻辑回归
魔镜er10 天前
04-pytorch构建线性回归
人工智能·pytorch·线性回归
知识分享小能手11 天前
统计学学习教程,从入门到精通,一元线性回归 —— 知识点详解(17)
学习·算法·线性回归
你想知道什么?12 天前
线性回归-学习笔记
笔记·学习·线性回归