python以相同规律打乱多组数据的方法

在深度学习数据训练时,虽tensorflow和pytorch自带打乱数据方法,但有时需手动打乱。本文介绍以相同规律打乱X、Y两组数据的方法,包括产生相同种子打乱顺序和用zip方式,且X、Y为list格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在深度学习的数据训练过程中,虽然tensorflow和pytorch都会自带打乱数据进行训练的方法,但是当我们自己生成数据,或者某些情况下依然要自己手动打乱顺序.
这里介绍如何以相同规律打乱X,Y两组数据,多组数据相同道李.

第一种:(X,Y是list的格式,不是array)
产生相同的种子(seed)打乱顺序:

import random
seed =50
x_batch, y_batch,start_num = train_load_order_sharp_5_9(image_list, num, start_num,length)
#加载我所有的数据,这里想x_batch,Y_batch是list的格式,要注意
random.seed(seed)
random.shuffle(x_batch)
random.seed(seed)#一定得重复在写一遍,和上面的seed要相同,不然y_batch和x_batch打乱顺序会不一样
random.shuffle(y_batch)

第二种,zip的方式,更加高效:(同第一种,X,Y是list的格式,不是array)

from random import shuffle

shuffle_data=True
if shuffle_data:
    c = list(zip(x_batch,y_batch))
    shuffle(c)
    x_batch,y_batch = zip(*c)

举个例子:

>>> a=[1,2,3,4]
>>> b=[11,22,33,44]
>>> c=list(zip(a,b))
>>> shuffle(c)
>>> a,b = zip(*c)
>>> a
(2, 4, 3, 1)
>>> b
(22, 44, 33, 11)
#这里就让a,b以相同的规律被打乱
### 数据集分割的评估方法 在机器学习和数据科学领域,数据集分割是一个至关重要的环节。为了确保模型能够有效泛化到未知数据上,需要采用合理的评估方法来衡量不同分割策略的效果。 #### 常见的数据集分割评估方法 1. **留出法 (Hold-out Method)** 留出法是最简单的一种数据集分割方式,它将整个数据集随机分成训练集、验证集以及测试集三部分。通常的比例可以是70%用于训练,15%用于验证,剩余15%作为测试集[^3]。这种方法的优点在于实现简便,计算成本较低;然而其缺点也显而易见——由于仅使用一次划分,可能导致结果不够稳定,尤其是当样本量较小时更容易受到偶然因素的影响。 2. **交叉验证 (Cross Validation, CV)** 交叉验证是一种更为稳健的数据集分割与评估手段,在K折交叉验证(K-Fold Cross Validation)中,原始数据被均匀地划分为K个子集(称为“折叠”)。每次选取其中一个子集作为独立的测试集,其余K-1个子集则共同构成临时训练集。此过程重复执行K次,最终汇总各轮的结果得到整体性能指标。相比简单的留出法,该方法能更充分地利用有限资源并减少因单次切分带来的偏差风险。 3. **自助法 (Bootstrap Method)** 自助采样是从原数据集中有放回抽取相同大小的新样本集合的过程。对于某些特殊场景下(比如小规模或者不平衡分布),这种技术尤为适用因为它允许我们创建多个略有差异版本从而增加多样性。尽管如此,需要注意的是如果存在高度相似甚至完全相同的实例,则可能会降低估计准确性。 4. **时间序列专用拆分** 针对具有明显顺序特性的数据类型如股票价格走势预测等问题,则需考虑特殊的处理逻辑而非传统的随机打乱操作。一种典型做法是以时间为依据先后排列好后再按固定窗口长度滑动前进完成相应区间的定义[^4]。这样做的好处是可以保持因果关系不被打断同时也更加贴近实际应用场景下的动态变化规律。 综上所述,选择何种具体的评估方案取决于目标任务特性及其所处环境条件等因素综合考量之后决定最为合适的方式。 ```python from sklearn.model_selection import train_test_split, KFold, cross_val_score import numpy as np # Example of Holdout method using Scikit-Learn API X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42) X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42) # Example of K-fold Cross Validation with Logistic Regression model evaluation kf = KFold(n_splits=5, shuffle=True, random_state=42) model = SomeModel() scores = cross_val_score(model, X, y, cv=kf, scoring='accuracy') print(f'Average Accuracy: {np.mean(scores):.4f}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值