返回顶部
首页 > 资讯 > 后端开发 > Python >python留一交叉验证的实例
  • 554
分享到

python留一交叉验证的实例

2024-04-02 19:04:59 554人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录python 留一交叉验证基本原理代码实现留一法交叉验证 Leave-One-Out Cross Validation我们用SKlearn库来实现一下LOOPython 留一交叉

Python 留一交叉验证

基本原理

K折交叉验证

简单来说,K折交叉验证就是:

  • 把数据集划分成K份,取出其中一份作为测试集,另外的K - 1份作为训练集。
  • 通过训练集得到回归方程,再把测试集带入该回归方程,得到预测值。
  • 计算预测值与真实值的差值的平方,得到平方损失函数(或其他的损失函数)。
  • 重复以上过程,总共得到K个回归方程和K个损失函数,其中损失函数最小的回归方程就是最优解。

留一交叉验证

留一交叉验证是K折交叉验证的特殊情况,即:将数据集划分成N份,N为数据集总数。就是只留一个数据作为测试集,该特殊情况称为“留一交叉验证”。

代码实现

'''留一交叉验证'''
import numpy as np

# K折交叉验证
data = [[12, 1896], [11, 1900], [11, 1904], [10.8, 1908], [10.8, 1912], [10.8, 1920], [10.6, 1924], [10.8, 1928],
        [10.3, 1932], [10.3, 1936], [10.3, 1948], [10.4, 1952], [10.5, 1956], [10.2, 1960], [10.0, 1964], [9.95, 1968],
        [10.14, 1972], [10.06, 1976], [10.25, 1980], [9.99, 1984], [9.92, 1988], [9.96, 1992], [9.84, 1996],
        [9.87, 2000], [9.85, 2004], [9.69, 2008]]

length = len(data)

# 得到训练集和测试集
def Get_test_train(length, data, i):
    test_data = data[i]  # 测试集
    train_data = data[:]
    train_data.pop(i)  # 训练集
    return train_data, test_data

# 得到线性回归直线
def Get_line(train_data):
    time = []
    year = []
    average_year_time = 0
    average_year_year = 0

    for i in train_data:
        time.append(i[0])
        year.append(i[1])

    time = np.array(time)
    year = np.array(year)

    average_year = sum(year) / length  # year拔
    average_time = sum(time) / length  # time拔

    for i in train_data:
        average_year_time = average_year_time + i[0] * i[1]
        average_year_year = average_year_year + i[1] ** 2
    average_year_time = average_year_time / length  # (year, time)拔
    average_year_year = average_year_year / length  # (year, year)拔
    # 线性回归:t = w0 + w1 * x
    w1 = (average_year_time - average_year * average_time) / (average_year_year - average_year * average_year)
    w0 = average_time - w1 * average_year
    return w0, w1

# 得到损失函数
def Get_loss_func(w0, w1, test_data):
    time_real = test_data[0]
    time_predict = eval('{} + {} * {}'.fORMat(w0, w1, test_data[1]))
    loss = (time_predict - time_real) ** 2
    dic['t = {} + {}x'.format(w0, w1)] = loss
    return dic

if __name__ == '__main__':
    dic = {}  # 存放建为回归直线,值为损失函数的字典

    for i in range(length):
        train_data, test_data = Get_test_train(length, data, i)
        w0, w1 = Get_line(train_data)
        Get_loss_func(w0, w1, test_data)
        dic = Get_loss_func(w0, w1, test_data)

    min_loss = min(dic.values())
    best_line = [k for k, v in dic.items() if v == min_loss][0]
    print('最佳回归直线:', best_line)
    print('最小损失函数:', min_loss)

留一法交叉验证 Leave-One-Out Cross Validation

交叉验证法,就是把一个大的数据集分为 k 个小数据集,其中 k−1 个作为训练集,剩下的 1 11 个作为测试集,在训练和测试的时候依次选择训练集和它对应的测试集。这种方法也被叫做 k 折交叉验证法(k-fold cross validation)。最终的结果是这 k 次验证的均值。

此外,还有一种交叉验证方法就是 留一法(Leave-One-Out,简称LOO),顾名思义,就是使 k kk 等于数据集中数据的个数,每次只使用一个作为测试集,剩下的全部作为训练集,这种方法得出的结果与训练整个测试集的期望值最为接近,但是成本过于庞大。

我们用SKlearn库来实现一下LOO

from sklearn.model_selection import LeaveOneOut

# 一维示例数据
data_dim1 = [1, 2, 3, 4, 5]

# 二维示例数据
data_dim2 = [[1, 1, 1, 1],
             [2, 2, 2, 2],
             [3, 3, 3, 3],
             [4, 4, 4, 4],
             [5, 5, 5, 5]]

loo = LeaveOneOut() # 实例化LOO对象

# 取LOO训练、测试集数据索引
for train_idx, test_idx in loo.split(data_dim1):
    # train_idx 是指训练数据在总数据集上的索引位置
    # test_idx 是指测试数据在总数据集上的索引位置
    print("train_index: %s, test_index %s" % (train_idx, test_idx))

# 取LOO训练、测试集数据值
for train_idx, test_idx in loo.split(data_dim1):
    # train_idx 是指训练数据在总数据集上的索引位置
    # test_idx 是指测试数据在总数据集上的索引位置
    train_data = [data_dim1[i] for i in train_idx]
    test_data = [data_dim1[i] for i in test_idx]
    print("train_data: %s, test_data %s" % (train_data, test_data))

data_dim1的输出:

train_index: [1 2 3 4], test_index [0]
train_index: [0 2 3 4], test_index [1]
train_index: [0 1 3 4], test_index [2]
train_index: [0 1 2 4], test_index [3]
train_index: [0 1 2 3], test_index [4]

train_data: [2, 3, 4, 5], test_data [1]
train_data: [1, 3, 4, 5], test_data [2]
train_data: [1, 2, 4, 5], test_data [3]
train_data: [1, 2, 3, 5], test_data [4]
train_data: [1, 2, 3, 4], test_data [5]

data_dim2的输出:

train_index: [1 2 3 4], test_index [0]
train_index: [0 2 3 4], test_index [1]
train_index: [0 1 3 4], test_index [2]
train_index: [0 1 2 4], test_index [3]
train_index: [0 1 2 3], test_index [4]

train_data: [[2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5]], test_data [[1, 1, 1, 1]]
train_data: [[1, 1, 1, 1], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5]], test_data [[2, 2, 2, 2]]
train_data: [[1, 1, 1, 1], [2, 2, 2, 2], [4, 4, 4, 4], [5, 5, 5, 5]], test_data [[3, 3, 3, 3]]
train_data: [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [5, 5, 5, 5]], test_data [[4, 4, 4, 4]]
train_data: [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]], test_data [[5, 5, 5, 5]]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python留一交叉验证的实例

本文链接: https://lsjlt.com/news/119328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python留一交叉验证的实例
    目录python 留一交叉验证基本原理代码实现留一法交叉验证 Leave-One-Out Cross Validation我们用SKlearn库来实现一下LOOpython 留一交叉...
    99+
    2024-04-02
  • python实现K折交叉验证
    本文实例为大家分享了python实现K折交叉验证的具体代码,供大家参考,具体内容如下 用KNN算法训练iris数据,并使用K折交叉验证方法找出最优的K值 import numpy...
    99+
    2024-04-02
  • Python中交叉验证的方法有哪些
    这篇文章主要介绍“Python中交叉验证的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中交叉验证的方法有哪些”文章能帮助大家解决问题。一、什么是交叉验证?交叉验证是一种用于估...
    99+
    2023-06-29
  • 交叉验证之KFold和StratifiedKFold的使用(附案例实战)
    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬...
    99+
    2023-08-31
    python 机器学习 决策树 数据挖掘
  • R语言交叉验证的实现代码
    k-折交叉验证 k-折交叉验证(K-fold cross-validation)是交叉验证方法里一种。它是指将样本集分为k份,其中k-1份作为训练数据集,而另外的1份作为验证数据集。...
    99+
    2024-04-02
  • 分享Python 中的 7 种交叉验证方法
    目录一、什么是交叉验证?二、它是如何解决过拟合问题的?1、HoldOut 交叉验证2、K 折交叉验证3、分层 K 折交叉验证4、Leave P Out 交叉验证5、留一交叉验证6、蒙...
    99+
    2024-04-02
  • python验证码识别的实例详解
    其实关于验证码识别涉及很多方面的内容,入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足,对这感兴趣的朋友们下面跟着小编一起来学习学习吧。 依赖 sudo apt-get instal...
    99+
    2022-06-04
    验证码 详解 实例
  • Python验证码识别处理实例
    一、准备工作与代码实例 (1)安装PIL:下载后是一个exe,直接双击安装,它会自动安装到C:Python27Libsite-packages中去, (2)pytesser:下载解压后直接放C:Python...
    99+
    2022-06-04
    验证码 实例 Python
  • JS中表单提交验证的示例分析
    这篇文章将为大家详细讲解有关JS中表单提交验证的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在进行表单提交时,需要对输入框和文本域等的value的合理性进行验证...
    99+
    2024-04-02
  • R语言逻辑回归、ROC曲线与十折如何实现交叉验证
    本篇内容主要讲解“R语言逻辑回归、ROC曲线与十折如何实现交叉验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“R语言逻辑回归、ROC曲线与十折如何实现交叉验证”吧!1. 测试集和训练集3、7分...
    99+
    2023-06-08
  • python实现三次密码验证的示例
    需求:Python实现三次密码验证,每次验证结果需要提示,三次验证不通过需要单独提示 代码如下: user = '张无忌' password = '12345678' confirm_flag = True f...
    99+
    2022-06-02
    python 密码 python 验证 python 密码验证
  • Pyspark 线性回归梯度下降交叉验证的知识点是什么
    这期内容当中小编将会给大家带来有关Pyspark 线性回归梯度下降交叉验证的知识点是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我正在尝试在 pyspark 中的 SGD 模型上执行交叉验...
    99+
    2023-06-22
  • python django 实现验证码的功能实例代码
    我也是刚学Python Django不久很多都不懂,所以我现在想一边学习一边记录下来然后大家一起讨论! 验证码功能一开始我在网上找了很多的demo但是我在模仿他们写的时候,发现在我的版本上根本就不能运行起...
    99+
    2022-06-04
    验证码 实例 代码
  • 一文详解Python中的行为验证码验证功能
    目录前言验证类型概述滑动拼图文字点选语序点选字体识别空间推理前言 最近在开发行为验证码,经常触及到关于验证类型的相关内容。但使用起来不太熟练,闲暇之余,总结一下我对行为验证码验证类型...
    99+
    2023-03-09
    Python行为验证码验证功能 Python行为验证码 Python验证码
  • Python实现一个简单的验证码程序
      老师讲完random函数,自己写的,虽然和老师示例的不那么美观,智能,但是也自己想出来的,所以记录一下,代码就需要自己不断的自己练习,实战,才能提高啊!不然就像我们这些大部分靠自学的人,何时能学会。还有...
    99+
    2022-06-04
    验证码 简单 程序
  • 利用Python破解验证码实例详解
    一、前言 本实验将通过一个简单的例子来讲解破解验证码的原理,将学习和实践以下知识点: Python基本知识 PIL模块的使用 二、实例详解 安装 pillow(PIL)库: ...
    99+
    2022-06-04
    验证码 详解 实例
  • 原生js实现表单的正则验证(验证通过后才可提交)
    实现了如下功能: 1.用户名:onfouc显示msg规则;onkeyup计算字符,其中中文为两个字符;onblur,验证是否通过 2.邮箱:onblur 正则匹配,正则是根据自己的...
    99+
    2024-04-02
  • Python实现双因素验证2FA的示例代码
    目录介绍1.安装2.配对3.验证4.那是不是手机上还有开发个 app知识点补充介绍 传统的用户名密码方式,容易泄漏,并不安全。 你说,加上短信验证码不就安全了,其实短信验证码也是不安...
    99+
    2024-04-02
  • Python使用captcha制作验证码的实现示例
    目录1 生成单张验证码图片并显示2 验证码图片的显示与保存3 批量生成验证码样本集在使用Keras搭建验证码识别模型时,需要大量的验证码图片。在这里,使用captcha模块生成验证码...
    99+
    2024-04-02
  • python中的正斜杠与反斜杠实例验证
    目录一、历史渊源 二、实例验证 三、总结扩展:Python 基础篇-正斜杠("/")和反斜杠("\")的用法一、历史渊源 ...
    99+
    2023-03-02
    python 正斜杠与反斜杠 python 正斜杠 python反斜杠
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作