快速构建数据集-假数据

  • 1、torch.randn(✅)
  • 2、HuggingFace Datasets(✅)
    • 🔹1. 从字典生成
    • 🔹2. 从 `pandas.DataFrame` 生成
    • 🔹3. 批量生成“业务型”假数据(配合 Faker)
    • 🔹4. 随机文本/时间序列假数据
    • 🔹5. 直接生成 `DatasetDict`
  • 3、HF Datasets 切分数据集
    • 🔹1. 随机切分(最常用)
    • 🔹2. 固定比例切分(多份)
    • 🔹3. 按索引选择(精确控制)
    • 🔹4. 按分片切分(均匀划分)
    • 🔹5. 自定义条件切分
    • 1️⃣ 使用 `train_test_split` 按比例划分
    • 2️⃣ 手动按索引切分 `select`
    • 3️⃣ 随机采样子集
    • 4️⃣ 多重划分(train/val/test)
    • 5️⃣ 使用数据集自带 split
    • 6️⃣ 高级:使用 `train_test_split` 并指定 stratify(按类别平衡)
      • ✅ 总结
  • 4、示例(窗口)
    • 1.示例1:切片
    • 2.示例2:HuggingFace Datasets
    • 3.示例3: 没窗口
    • 4.示例4:日期划分窗口
  • 5、汇总(生成)
    • 🔹1. 用 **Numpy / Pandas** 随机生成
    • 🔹2. 用 **Scikit-learn** 自带造数函数
    • 🔹3. 用 **Faker** 生成“真实感”假数据
    • 🔹4. 用 **Torch / TensorFlow** 生成张量假数据
    • 🔹5. 时间序列/股票类假数据
  • 6、汇总(划分)
    • **1. 使用 Python 原生方法(列表/数组切分)**
    • **2. 使用 NumPy 切分**
    • **3. 使用 scikit-learn `train_test_split`**
    • **4. 使用 pandas 切分**
    • **5. 时间序列专用切分**
    • **6. HuggingFace Datasets 快速切分**
      • 🔹 总结

推荐:
生成,torch.randn快速生成
切分, HuggingFace Datasets

1、torch.randn(✅)

# --- 1. 数据生成和辅助模块 (无变化) ---def generate_ohlcv_data(num_samples, seq_len, num_features, multi_step):"""生成伪造的 OHLCV 数据"""ohlcv = np.random.randn(num_samples, seq_len, num_features).astype(np.float32)y = np.random.randn(num_samples, multi_step, num_features).astype(np.float32)return torch.from_numpy(ohlcv), torch.from_numpy(y)
import torch
import torch.nn as nn
from mamba_ssm import Mamba
from st_moe_pytorch import MoE, Expert
import numpy as np# --- 1. 模拟数据生成 ---
def create_dummy_ohlcv_data(num_samples, seq_len, predict_steps):"""生成伪造的 OHLCV 股票数据。Args:num_samples (int): 样本数量。seq_len (int): 每个样本的序列长度。predict_steps (int): 预测的未来步数。Returns:tuple: (输入数据, 标签数据)"""# 5个特征: 开盘价, 最高价, 最低价, 收盘价, 交易量feature_dim = 5# 输入: (样本数, 序列长度, 特征维度)inputs = torch.randn(num_samples, seq_len, feature_dim)# 标签: (样本数, 预测步数, 预测维度)# 我们预测未来 predict_steps 的收盘价labels = torch.randn(num_samples, predict_steps, 1)print(f"生成的假数据输入形状: {inputs.shape}")print(f"生成的假数据标签形状: {labels.shape}")return inputs, labels

2、HuggingFace Datasets(✅)

HuggingFace Datasets,快速生成假数据集的方法

好问题 👍
如果你已经在用 🤗 HuggingFace Datasets,生成“假数据集”其实非常方便,可以直接从 字典 / DataFrame / 列表 构建。下面我整理几种常见方法:


🔹1. 从字典生成

最简单,直接写个 dict 就行:

from datasets import Datasetdata = {"text": ["hello world", "foo bar", "lorem ipsum"],"label": [0, 1, 0]
}
dataset = Dataset.from_dict(data)print(dataset)
print(dataset[0])

🔹2. 从 pandas.DataFrame 生成

结合前面提到的 numpy/pandas 假数据:

import pandas as pd
import numpy as np
from datasets import Datasetdf = pd.DataFrame({"feature1": np.random.randn(100),"feature2": np.random.randint(0, 10, 100),"label": np.random.choice([0, 1], size=100)
})dataset = Dataset.from_pandas(df)
print(dataset[0])

🔹3. 批量生成“业务型”假数据(配合 Faker)

from datasets import Dataset
from faker import Fakerfake = Faker("en_US")data = {"name": [fake.name() for _ in range(20)],"email": [fake.email() for _ in range(20)],"date": [fake.date() for _ in range(20)],"amount": [fake.random_int(100, 10000) for _ in range(20)]
}dataset = Dataset.from_dict(data)
print(dataset[0])

🔹4. 随机文本/时间序列假数据

比如快速生成 NLP 数据:

from datasets import Dataset
import numpy as npdata = {"sentence": [f"sample text {i}" for i in range(50)],"label": np.random.randint(0, 2, 50).tolist()
}dataset = Dataset.from_dict(data)
print(dataset[:5])

比如金融时间序列:

import pandas as pd
import numpy as np
from datasets import Datasetn = 100
df = pd.DataFrame({"date": pd.date_range("2025-01-01", periods=n),"price": 100 + np.random.randn(n).cumsum(),"volume": np.random.randint(100, 1000, n)
})dataset = Dataset.from_pandas(df)
print(dataset[:3])

🔹5. 直接生成 DatasetDict

方便划分 train/test:

from datasets import Dataset, DatasetDictdata = {"text": [f"sample {i}" for i in range(100)],"label": [i % 2 for i in range(100)]
}dataset = Dataset.from_dict(data)
dataset = dataset.train_test_split(test_size=0.2)dataset_dict = DatasetDict({"train": dataset["train"],"test": dataset["test"]
})print(dataset_dict)

✅ 总结:

  • Dataset.from_dict → 最快,直接传 Python dict
  • Dataset.from_pandas → 用 pandas/numpy 快速造数据
  • 配合 Faker → 生成“看起来真实”的假数据
  • train_test_split → 一步得到训练集/测试集

要不要我帮你写一个 通用函数 make_fake_hf_dataset(mode="classification"/"nlp"/"finance"),一行就能造 HuggingFace 假数据集?

3、HF Datasets 切分数据集

👌 在 🤗 HuggingFace Datasets 里,切分数据集非常灵活,主要用 .train_test_split(),也可以用 .select().shard() 等。下面给你总结常见方法:


🔹1. 随机切分(最常用)

from datasets import Datasetdata = {"text": [f"sample {i}" for i in range(100)], "label": [i % 2 for i in range(100)]}
dataset = Dataset.from_dict(data)# 80% train, 20% test
split = dataset.train_test_split(test_size=0.2, seed=42)print(split["train"])
print(split["test"])

🔹2. 固定比例切分(多份)

可以用 train_test_split 递归拆分,得到 train/valid/test:

# 先切 train/test
split = dataset.train_test_split(test_size=0.2, seed=42)# 再从 train 中切出 valid
split2 = split["train"].train_test_split(test_size=0.1, seed=42)# 合并成 DatasetDict
from datasets import DatasetDict
dataset_dict = DatasetDict({"train": split2["train"],"valid": split2["test"],"test": split["test"]
})print(dataset_dict)

🔹3. 按索引选择(精确控制)

train_dataset = dataset.select(range(0, 80))   # 前 80 个样本
test_dataset  = dataset.select(range(80, 100)) # 后 20 个样本

🔹4. 按分片切分(均匀划分)

# 把数据均匀分成 5 份,取第 0 份
part0 = dataset.shard(num_shards=5, index=0)# 取第 1 份
part1 = dataset.shard(num_shards=5, index=1)

🔹5. 自定义条件切分

比如按 label 分:

def is_positive(example):return example["label"] == 1positive = dataset.filter(is_positive)
negative = dataset.filter(lambda x: x["label"] == 0)

总结

  • 随机划分.train_test_split()
  • 固定索引/前后切分.select()
  • 均匀分片.shard()
  • 条件过滤.filter()
  • 组合多份DatasetDict

要不要我帮你写一个 通用函数 split_dataset(dataset, train=0.8, valid=0.1, test=0.1),自动返回 DatasetDict(train/valid/test)

HuggingFace Datasets 里,切分数据集的方法主要有几种,根据你是想 按比例按索引、还是 使用自带 split 来划分。下面详细说明并举例:


1️⃣ 使用 train_test_split 按比例划分

from datasets import load_dataset# 加载数据集(通常 split='train')
dataset = load_dataset("imdb", split="train")# 划分 80% 训练,20% 测试
split_dataset = dataset.train_test_split(test_size=0.2, seed=42)train_dataset = split_dataset["train"]
test_dataset  = split_dataset["test"]print(len(train_dataset), len(test_dataset))
  • test_size 可以是整数(样本数)或浮点数(比例)
  • seed 用于固定随机打乱结果

2️⃣ 手动按索引切分 select

train_end = 20000
val_end   = 25000train_dataset = dataset.select(range(0, train_end))
val_dataset   = dataset.select(range(train_end, val_end))
test_dataset  = dataset.select(range(val_end, len(dataset)))
  • 适合固定顺序划分
  • dataset.select(indices) 会返回一个新的 Dataset 子集

3️⃣ 随机采样子集

# 打乱数据
shuffled = dataset.shuffle(seed=42)# 取前 5000 条作为子集
subset = shuffled.select(range(5000))
  • 常用于快速调试或小规模实验

4️⃣ 多重划分(train/val/test)

# 先划分训练+测试
train_test = dataset.train_test_split(test_size=0.2, seed=42)# 再划分测试集为验证集+测试集
valid_test = train_test["test"].train_test_split(test_size=0.5, seed=42)train_dataset = train_test["train"]
valid_dataset = valid_test["train"]
test_dataset  = valid_test["test"]
  • 常用于需要三份数据集的情况

5️⃣ 使用数据集自带 split

dataset = load_dataset("imdb")train_dataset = dataset["train"]
test_dataset  = dataset["test"]
  • 有些数据集本身就提供了 split,无需再划分

6️⃣ 高级:使用 train_test_split 并指定 stratify(按类别平衡)

split_dataset = dataset.train_test_split(test_size=0.2, stratify_by_column="label", seed=42)
  • 可以保证训练集和测试集的标签分布一致

✅ 总结

方法适用场景
train_test_split快速按比例随机划分
select按固定索引自定义划分
shuffle().select()随机采样子集
数据集自带 split直接使用官方划分
多次 train_test_split生成 train/val/test 三份数据
stratify_by_column保持标签分布一致

如果你需要,我可以帮你写一个 通用函数,只用一个方法就能支持:

  • train/val/test 划分
  • 按比例或固定数量
  • 是否随机打乱
  • 是否保持类别分布

这样直接调用就能得到切好的 HF Dataset。

你希望我写吗?

4、示例(窗口)

时间序列切分,验证和测试集加上前面窗口长度数据

1.示例1:切片

明白了,你想做时间序列切分,并且为了训练模型或滚动预测,需要在 验证集和测试集前面补上 window_size 的历史数据,保证模型可以拿到足够的历史信息。下面给你一个标准示例:

import pandas as pd# 假数据
data = pd.DataFrame({'date': pd.date_range('2020-01-01', periods=100),'value': range(100)
})window_size = 10  # 历史窗口长度
train_ratio = 0.7
val_ratio = 0.2  # 测试集自动是剩下的 0.1n = len(data)
train_end = int(n * train_ratio)
val_end = train_end + int(n * val_ratio)# 切分
train_data = data.iloc[:train_end]# 验证集前加上 window_size 历史数据
val_data = data.iloc[max(train_end - window_size, 0):val_end]# 测试集前加上 window_size 历史数据
test_data = data.iloc[max(val_end - window_size, 0):]print("Train:", train_data.shape)
print("Validation:", val_data.shape)
print("Test:", test_data.shape)
import pandas as pd
import numpy as np# 假数据
n = 100
data = pd.DataFrame({"date": pd.date_range("2025-01-01", periods=n),"value": np.random.randn(n).cumsum()
})window_size = 10
train_ratio, valid_ratio, test_ratio = 0.7, 0.2, 0.1train_end = int(len(data) * train_ratio)
valid_end = train_end + int(len(data) * valid_ratio)# 切分训练集
train_data = data.iloc[:train_end]# 验证集,需要加上前面 window_size 个数据
valid_data = data.iloc[train_end - window_size : valid_end]# 测试集,也需要加上前面 window_size 个数据
test_data = data.iloc[valid_end - window_size :]print("Train:", train_data.shape)
print("Valid:", valid_data.shape)
print("Test:", test_data.shape)

✅ 特点

  1. 保留时间顺序,不打乱。
  2. 验证集和测试集前加 window_size 历史数据,保证模型有完整的序列输入。
  3. max(..., 0) 防止索引越界。

如果你想,我可以帮你写一个可复用函数,直接传入 data, train_ratio, val_ratio, window_size,返回 train/val/test,并且自动处理窗口前置,非常适合滚动预测。

你希望我写这个函数吗?

2.示例2:HuggingFace Datasets

明白了,你想在 HuggingFace Datasets 中做 时间序列切分,同时保证 验证集和测试集前加上 window_size 的历史数据。下面是一个完整示例:

from datasets import Dataset
import pandas as pd# 假数据
df = pd.DataFrame({'date': pd.date_range('2020-01-01', periods=100),'value': range(100)
})# 转成 HF Dataset
dataset = Dataset.from_pandas(df)# 参数
window_size = 10
train_ratio = 0.7
val_ratio = 0.2n = len(dataset)
train_end = int(n * train_ratio)
val_end = train_end + int(n * val_ratio)# 切分索引
train_dataset = dataset.select(range(train_end))# 验证集:前加 window_size 历史
val_start = max(train_end - window_size, 0)
val_dataset = dataset.select(range(val_start, val_end))# 测试集:前加 window_size 历史
test_start = max(val_end - window_size, 0)
test_dataset = dataset.select(range(test_start, n))print("Train:", len(train_dataset))
print("Validation:", len(val_dataset))
print("Test:", len(test_dataset))

✅ 特点

  1. 保留时间顺序,适合时间序列。
  2. 验证集和测试集前补历史窗口,方便滑动窗口模型输入。
  3. 输出仍然是 HF Dataset 对象,可以直接用于 mapset_format 等处理。

如果你需要,我可以帮你写一个通用函数,直接传入:

  • HF Dataset
  • train_ratioval_ratio
  • window_size

然后返回 train/val/test 并自动处理窗口前置,非常适合批量时间序列切分。

你希望我写吗?

明白了,你想用 HuggingFace Datasets时间序列切分,并且 验证集和测试集前面要加上窗口长度的数据,保证滑窗模型输入完整。下面给你一个通用方法。


1️⃣ 思路

假设:

  • dataset 是 HF Dataset
  • window_size 是滑窗长度
  • 切分比例:train_ratiovalid_ratiotest_ratio

做法:

  1. 按比例计算训练集、验证集、测试集的结束索引。
  2. 验证集前加上训练集最后 window_size 行。
  3. 测试集前加上验证集最后 window_size 行。

2️⃣ 代码示例

from datasets import Dataset, DatasetDict
import numpy as np
import pandas as pd# 假数据
n = 100
df = pd.DataFrame({"date": pd.date_range("2025-01-01", periods=n),"value": np.random.randn(n).cumsum()
})dataset = Dataset.from_pandas(df)# 参数
window_size = 10
train_ratio, valid_ratio, test_ratio = 0.7, 0.2, 0.1# 索引
train_end = int(len(dataset) * train_ratio)
valid_end = train_end + int(len(dataset) * valid_ratio)# 切分
train_ds = dataset.select(range(0, train_end))
valid_ds = dataset.select(range(train_end - window_size, valid_end))
test_ds  = dataset.select(range(valid_end - window_size, len(dataset)))# 合并成 DatasetDict
dataset_dict = DatasetDict({"train": train_ds,"valid": valid_ds,"test": test_ds
})print(dataset_dict)

3️⃣ 滑窗生成 X, y(可选)

如果你要直接生成滑窗输入:

def create_windows(dataset, window_size, column="value"):values = np.array(dataset[column])X, y = [], []for i in range(len(values) - window_size):X.append(values[i:i+window_size])y.append(values[i+window_size])return np.array(X), np.array(y)X_train, y_train = create_windows(dataset_dict["train"], window_size)
X_valid, y_valid = create_windows(dataset_dict["valid"], window_size)
X_test, y_test   = create_windows(dataset_dict["test"], window_size)print(X_train.shape, X_valid.shape, X_test.shape)

✅ 特点:

  • 验证集和测试集包含前置 window_size 行,保证滑窗完整
  • 适合股票、传感器、气象等时间序列预测任务
  • 保持 HF Dataset 格式,可直接用于 Transformers 或自定义模型

如果你需要,我可以帮你写一个 通用函数 split_timeseries_hf(dataset, window_size, ratios),一行返回 train/valid/test HF DatasetDict,并自动处理前置窗口,非常方便。

你希望我帮你写吗?

3.示例3: 没窗口

from datasets import Dataset, DatasetDict
import numpy as np
import pandas as pd# -------------------------
SEED = 42
NUM_DAYS = 900
CONTEXT_LEN = 5
HORIZON = 2
BATCH_SIZE = 32
EPOCHS = 6
LR = 3e-3
D_MODEL = 64
DATE_INPUT_DIM = 3
LOSS_TYPE = "wmse"
REPORT_N = 3
# -------------------------def make_fake_stock(num_days=900, start_date="2018-01-01"):dates = pd.date_range(start=start_date, periods=num_days, freq="D")x = np.arange(num_days)base = 100.0 + 0.02*x + 5.0*np.sin(2*np.pi*x/30)open_ = base + np.random.normal(0,1,num_days)close = base + np.random.normal(0,1,num_days)high = np.maximum(open_,close) + np.abs(np.random.normal(0,1,num_days))low = np.minimum(open_,close) - np.abs(np.random.normal(0,1,num_days))volume = np.random.randint(1000,20000,num_days)df = pd.DataFrame({"date": dates,"open": open_,"high": high,"low": low,"close": close,"volume": volume})df["year"] = df["date"].dt.yeardf["month"] = df["date"].dt.monthdf["day"] = df["date"].dt.dayreturn dfdef prepare_hf_dataset(df, context_len=30, horizon=5):records = []N = len(df)for i in range(N - context_len - horizon + 1):ohlcv = df.loc[i:i+context_len-1, ["open","high","low","close","volume"]].values.astype(np.float32)date_feats = df.loc[i:i+context_len-1, ["year","month","day"]].values.astype(np.float32)labels = df.loc[i+context_len:i+context_len+horizon-1, "close"].values.astype(np.float32)records.append({"ohlcv": ohlcv,"date_feats": date_feats,"labels": labels})# 🔑 直接转成 Hugging Face Datasetreturn Dataset.from_list(records)df=make_fake_stock(num_days=900, start_date="2018-01-01")
print(df.head())# 1) 构造完整 Dataset
dataset = prepare_hf_dataset(df, CONTEXT_LEN, HORIZON)
print(dataset)# 2) 切分
N = len(dataset)
train_end = int(N * 0.7)
val_end = int(N * 0.85)dataset_dict = DatasetDict({"train": dataset.select(range(0, train_end)),"valid": dataset.select(range(train_end, val_end)),"test": dataset.select(range(val_end, N))
})print(dataset_dict)print(dataset_dict["train"][0])  # 查看第一个样本

4.示例4:日期划分窗口

import pandas as pd
import numpy as np"""
最终数据格式如下:
date	    tic	  close volume
2020-01-01	AAPL	300	1000
2020-01-01	MSFT	150	20002020-01-02	AAPL	305	1100
2020-01-02	MSFT	NaN	NaN2020-01-03	AAPL	NaN	NaN
2020-01-03	MSFT	152	2100你的数据是 多股票、多天且时间不连续 的情况,并且希望在 切分交易集时加上训练集最后的窗口长度,保证滑窗完整。下面给你一个 完整可运行示例,包括:构造不连续时间的假数据(带 NaN)切分训练集和交易集对交易集前面加上训练集最后 window_size 天的数据
"""# =========================
# 1️⃣ 构造不连续时间的假数据
# =========================
dates = ["2020-01-01", "2020-01-03", "2020-01-06", "2020-01-08", "2020-01-10"]
tics = ["AAPL", "MSFT"]data_list = []
for date in dates:for tic in tics:close = np.random.randint(100, 500)volume = np.random.randint(1000, 5000)# 人为加入 NaNif np.random.rand() < 0.3:close, volume = np.nan, np.nandata_list.append([pd.to_datetime(date), tic, close, volume])processed_full = pd.DataFrame(data_list, columns=["date", "tic", "close", "volume"])
print("示例数据:")
print(processed_full)# =========================
# 2️⃣ 切分函数(带窗口)
# =========================
def data_split_with_window(df, start, end, window_size=0, target_date_col="date"):"""按日期切分数据集,并可在验证/交易集前加上前面 window_size 日期:param df: pandas DataFrame, 必须包含 target_date_col 和 'tic':param start: 起始日期(字符串或 Timestamp):param end: 结束日期(字符串或 Timestamp):param window_size: int, 交易集或验证集前加上训练集最后的 window_size 日期:param target_date_col: 时间列名称:return: pandas DataFrame"""# 主区间切分data = df[(df[target_date_col] >= start) & (df[target_date_col] < end)]# 如果需要窗口前置,取 start 前的 window_size 日期if window_size > 0:prev_dates = df[df[target_date_col] < start][target_date_col].drop_duplicates().sort_values().tail(window_size)prev_data = df[df[target_date_col].isin(prev_dates)]data = pd.concat([prev_data, data], ignore_index=True)# 按 date 和 tic 排序data = data.sort_values([target_date_col, "tic"], ignore_index=True)# 重新索引data.index = data[target_date_col].factorize()[0]return data# =========================
# 3️⃣ 定义日期区间和窗口长度
# =========================
TRAIN_START_DATE = '2020-01-01'
TRAIN_END_DATE = '2020-01-08'
TRADE_START_DATE = '2020-01-08'
TRADE_END_DATE = '2020-01-11'
WINDOW_SIZE = 2  # 假设滑窗长度为 2 天# =========================
# 4️⃣ 切分训练集和交易集
# =========================
train = data_split_with_window(processed_full, TRAIN_START_DATE, TRAIN_END_DATE, window_size=0)
trade = data_split_with_window(processed_full, TRADE_START_DATE, TRADE_END_DATE, window_size=WINDOW_SIZE)print("\nTrain length:", len(train))
print(train)print("\nTrade length (with window):", len(trade))
print(trade)

5、汇总(生成)

明白 ✅ 你想要的是 快速生成假数据集(fake dataset)的方法,用来做 测试 / 调试 / 原型开发。这类数据不需要真实含义,只要结构和格式对。下面给你几类常用的办法:


🔹1. 用 Numpy / Pandas 随机生成

适合表格类任务(分类、回归、时间序列等):

import numpy as np
import pandas as pd# 随机生成 1000 行数据,含 3 个特征和一个标签
n = 1000
df = pd.DataFrame({"feature1": np.random.randn(n),            # 正态分布"feature2": np.random.randint(0, 100, n),  # 整数"feature3": np.random.rand(n),             # 0-1之间"label": np.random.choice([0, 1], n)       # 分类标签
})print(df.head())

🔹2. 用 Scikit-learn 自带造数函数

特别适合分类、回归、聚类实验。

from sklearn.datasets import make_classification, make_regression, make_blobs# 分类数据
X, y = make_classification(n_samples=1000, n_features=10, n_classes=2, random_state=42)# 回归数据
X_reg, y_reg = make_regression(n_samples=1000, n_features=5, noise=0.1)# 聚类数据
X_blobs, y_blobs = make_blobs(n_samples=1000, centers=3, n_features=2)

🔹3. 用 Faker 生成“真实感”假数据

适合生成带人名、地址、日期、公司等业务场景的数据。

from faker import Faker
import pandas as pdfake = Faker("en_US")  # 可改 "zh_CN" 生成中文数据
data = []
for _ in range(10):data.append({"name": fake.name(),"email": fake.email(),"address": fake.address(),"date": fake.date(),"amount": fake.random_int(100, 10000)})df = pd.DataFrame(data)
print(df.head())

🔹4. 用 Torch / TensorFlow 生成张量假数据

适合深度学习测试:

import torchX = torch.randn(1000, 20)          # 1000 个样本,每个20维特征
y = torch.randint(0, 2, (1000,))   # 二分类标签

🔹5. 时间序列/股票类假数据

cumsum 模拟股价走势:

import numpy as np
import pandas as pdn = 200
dates = pd.date_range("2023-01-01", periods=n)
prices = 100 + np.random.randn(n).cumsum()  # 模拟股价
volumes = np.random.randint(100, 1000, n)df = pd.DataFrame({"date": dates, "price": prices, "volume": volumes})
print(df.head())

✅ 总结:

  • 科研/调试numpy/pandas
  • 机器学习sklearn.datasets
  • 业务数据场景Faker
  • 深度学习torch.randn
  • 金融/时序cumsum

要不要我帮你写一个 通用函数 generate_fake_dataset(参数选择模式:分类/回归/业务/时间序列,直接返回 DataFrame)?

6、汇总(划分)

你想要快速切分数据集,可以根据数据量大小、数据类型(结构化/时间序列/文本/图像)选择不同方法。我整理了几种常用且高效的方法:


1. 使用 Python 原生方法(列表/数组切分)

适合小型数据集或自定义格式的数据。

import randomdata = list(range(1000))  # 假数据
random.shuffle(data)train_ratio = 0.8
train_size = int(len(data) * train_ratio)train_data = data[:train_size]
test_data = data[train_size:]
  • ✅ 简单、快速
  • ⚠️ 不适合复杂切分需求(分层、时间序列)

2. 使用 NumPy 切分

适合数值型大数组:

import numpy as npdata = np.arange(1000)
np.random.shuffle(data)train_ratio = 0.7
train_size = int(len(data) * train_ratio)train_data = data[:train_size]
test_data = data[train_size:]
  • ✅ 对大数组高效
  • ⚠️ 需要手动保证标签和特征对应

3. 使用 scikit-learn train_test_split

适合监督学习任务,有标签数据,可实现分层切分:

from sklearn.model_selection import train_test_splitX = np.random.rand(1000, 10)  # 特征
y = np.random.randint(0, 2, 1000)  # 标签X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y
)
  • ✅ 支持 train/val/test、分层采样
  • ✅ 支持随机种子控制可复现
  • ⚠️ 对时间序列不适合(会打乱顺序)

4. 使用 pandas 切分

适合 DataFrame 结构数据:

import pandas as pd
from sklearn.model_selection import train_test_splitdf = pd.DataFrame({'x': range(1000), 'y': range(1000)})train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)
  • ✅ 可直接对 DataFrame 操作
  • ✅ 保留列名和索引
  • ⚠️ 默认打乱顺序,不适合时间序列

5. 时间序列专用切分

如果数据有时间顺序,不要随机打乱

data = pd.DataFrame({'date': pd.date_range('2020-01-01', periods=1000),'value': range(1000)})train_size = int(len(data) * 0.8)
train_data = data.iloc[:train_size]
test_data = data.iloc[train_size:]
  • ✅ 保证时间顺序
  • ✅ 可扩展到 sliding window 或 rolling split

6. HuggingFace Datasets 快速切分

如果使用 HF Datasets(文本/表格/CSV 数据集):

from datasets import Datasetdataset = Dataset.from_dict({'text': ['a', 'b', 'c', 'd', 'e'], 'label': [0,1,0,1,0]})
split = dataset.train_test_split(test_size=0.2, seed=42)train_dataset = split['train']
test_dataset = split['test']
  • ✅ 快速切分并保持 Dataset 对象
  • ✅ 支持随机种子
  • ✅ 可直接切分大规模文本/表格数据

🔹 总结

方法优势注意点
原生 Python/NumPy简单、高效需手动处理标签
scikit-learn支持分层、train/val/test打乱顺序,不适合时间序列
pandasDataFrame 友好打乱顺序,不适合时间序列
时间序列切分保留顺序无随机性
HuggingFace Datasets高效、可扩展需要安装 datasets

如果你愿意,我可以帮你写一个统一函数,只要传入 DataFrame 或 Dataset,就能根据比例快速切分成 train/val/test,还能选择随机或时间序列切分

你希望我帮你写吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921674.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921674.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921674.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[修订版]Xenomai/IPIPE源代码情景解析

[修订版]Xenomai/IPIPE源代码情景解析 第一章&#xff1a;Interrupt Pipeline介绍 1.1 I-pipe与Xenomai1.2 I-pipe核心概念1.3 拉取I-pipe代码 第二章&#xff1a;I-pipe对ARM64异常的改造 2.1 ARM64中断机制与异常处理2.2 EL0_IRQ 中断改造之入口2.3 EL0_IRQ 中断改造之中断处…

【Qt开发】按钮类控件(三)-> QCheckBox

目录 1 -> 概述 2 -> 核心特性 2.1 -> 状态管理 2.2 -> 信号机制 2.3 -> 外观与文本 3 -> 应用场景 4 -> 代码示例 5 -> 总结 1 -> 概述 QCheckBox 是 Qt 框架中提供的一个基础控件&#xff0c;用于实现复选框功能。它允许用户在两种或三种…

在新发布的AI论文中 pytorch 和tensorflow 的使用比例

根据 2025 年最新的学术动态和行业报告&#xff0c;PyTorch 在 AI 论文中的使用比例已占据绝对主导地位&#xff0c;而 TensorFlow 的占比持续下降。以下是基于多个权威来源的综合分析&#xff1a; 一、顶级会议中的框架分布 在 NeurIPS、ICML、CVPR 等顶级学术会议中&#xff…

3DXML格式是什么?用什么软件可以打开?

3DXML 是一种开放标准的数据交换格式&#xff0c;主要用于三维 CAD&#xff08;计算机辅助设计&#xff09;模型的存储和交换。它是由 Dassault Systmes 开发的一种文件格式&#xff0c;常用于 CATIA V6 和其他支持该格式的应用程序中。3DXML 文件可以包含完整的 3D 模型数据&a…

9月8日星期一今日早报简报微语报早读

9月8日星期一&#xff0c;农历七月十七&#xff0c;早报#微语早读。1、中国火箭与月亮同框&#xff0c;遥感四十号03组卫星发射成功&#xff1b;2、湖南郴州开发区改革&#xff1a;编制数由815名减至680名&#xff0c;精简16.6%&#xff1b;3、水利部对广东、广西启动洪水防御Ⅳ…

windows系统搭建MQTT服务器

1、MQTT 协议 MQTT协议&#xff1a;实现MQTT协议需要客户端和服务器端通讯完成。 三种身份: 发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。 消息的发布者和订阅者都是客户端&#xff0c;消息代理是服务器&#xff0c;消息发布者可以同时是订阅者。 MQTT&am…

从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型

&#x1f525;从 GPT 到 LLaMA&#xff1a;解密 LLM 的核心架构——Decoder-Only 模型 “为什么所有大模型&#xff08;LLM&#xff09;都长一个样&#xff1f;” 因为它们都有一个共同的“基因”——Decoder-Only 架构。 在前面两节中&#xff0c;我们学习了&#xff1a; BER…

Codeforces Round 1047 (Div. 3)

由于最近这三天的数学建模&#xff0c;让我这个精力本来就不多的AI手更加力竭了&#xff0c;没注意到昨晚的cf&#xff0c;所以今天来补题了。 比赛连接&#xff1a;比赛传送门 A题&#xff1a; You are doing a research paper on the famous Collatz Conjecture. In your e…

C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)

贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff1a;通过局部最优达成全局最优的决策策略 贪心算法是一种通过每次选择局部最优解来期望全局最优解的算法思想。它不考虑未来的影响&#xff0c;仅根据当前信息做出最优选择&#xff0c;适用于具有贪心选择性质和最优子…

LangChain实战(二十一):构建自动化AI客服系统

本文是《LangChain实战课》系列的第二十一篇,将带领您构建一个完整的自动化AI客服系统。通过结合对话记忆、工具调用和业务知识库,我们将创建一个能够处理复杂客户查询的智能客服解决方案。 前言 在现代商业环境中,客户服务是企业成功的关键因素之一。传统客服系统往往面临…

一人公司智能管理系统概述

系统概述 项目结构 Al_Compny系统采用前后端分离的全栈架构&#xff0c;项目根目录下包含两个主要子目录&#xff1a;Al_Compny_backend&#xff08;后端服务&#xff09;和Al_Compny_frontend&#xff08;前端应用&#xff09;。核心功能模块 Al_Compny系统是一个面向"一…

OpenWrt | 在 PPP 拨号模式下启用 IPv6 功能

文章目录一、WAN 口配置二、LAN 口配置三、IPv6 测试本文将详细介绍 将光猫的网络模式改成桥接之后使用路由器拨号的上网方式的情况下&#xff0c;在 OpenWrt 上使用 PPP 拨号模式上网时&#xff0c;启用 IPv6 功能的方法。 一、WAN 口配置 首先&#xff0c;我们需要在 网络 …

Java如何实现一个安全的登录功能?

安全登录系统完整教程 &#x1f4cb; 目录 项目概述技术栈安全特性项目结构核心组件详解安全实现原理部署和运行安全最佳实践常见问题解答进阶扩展 &#x1f3af; 项目概述 这是一个基于Spring Boot和Spring Security的完整安全登录系统&#xff0c;专为初学者设计&#xff…

星辰诞愿——生日快乐

前言 今天这篇博客并非技术文章&#xff0c;而是庆祝我可爱的妹妹18岁生日以及介绍我半年以来的学习经历 祝生网站&#xff1a;星辰诞愿(用户列表里第一位就是我妹妹&#xff0c;希望大家能献上自己的祝福&#xff0c;能分享转发更好&#xff0c;我在此感谢大家。如果使用手机&…

基于STM32单片机的智能粮仓温湿度检测蓝牙手机APP设计

基于STM32单片机的智能粮仓温湿度检测蓝牙手机APP设计 1 系统功能介绍 本系统是一款基于STM32单片机的智能粮仓环境监测与控制装置&#xff0c;核心目标是通过传感器实时采集粮仓内的温度和湿度信息&#xff0c;并结合蓝牙通信模块将数据传输至手机端&#xff0c;实现对粮仓环境…

简单视频转换器 avi转mp4

直接上代码package com.example.videoconverter;import ws.schild.jave.Encoder; import ws.schild.jave.EncoderException; import ws.schild.jave.MultimediaObject; import ws.schild.jave.encode.AudioAttributes; import ws.schild.jave.encode.EncodingAttributes; impor…

Kafka 与 RocketMQ 核心概念与架构对比

Kafka 与 RocketMQ 核心概念与架构对比DeepSeek生成&#xff0c;便于记忆大概逻辑核心概念对比图 #mermaid-svg-dEbo1XpAjfzOjvUW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dEbo1XpAjfzOjvUW .error-icon{fill…

30分钟深度压测cuBLAS:从FP64到INT8全精度性能剖析

在深度学习和高性能计算领域&#xff0c;GPU的矩阵运算性能是衡量系统算力的核心指标之一。NVIDIA的cuBLAS库作为CUDA平台上最基础的线性代数计算库&#xff0c;其性能表现直接影响着上层应用的运行效率。本文将详细介绍如何使用cublasmatmulbench工具对多GPU进行全面的性能基准…

超越模仿:探寻智能的本源

引言&#xff1a;超越模仿&#xff0c;探寻智能的本源近年来&#xff0c;以大语言模型&#xff08;LLM&#xff09;为代表的自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;在模仿人类语言生成方面取得了令人瞩目的成就。从流畅的对话到精炼的文本摘要&#xff0c;机…

ROS/ROS2课程笔记00-大纲-25-26-1

大纲 AI版 以下是基于第四代高校课程核心理念设计的《ROS2机器人程序设计&#xff08;ROS2 Jazzy版&#xff09;》课程大纲&#xff0c;突出智能互联、跨学科融合、终身学习等特征&#xff0c;并融入技术赋能、生态重塑、素养导向等要求&#xff1a; 课程名称&#xff1a;ROS…