快速構建數據集-假數據(生成劃分)

快速構建數據集-假數據

  • 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…