You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Python中tms-NET采样实现及数据采样适配问题解决方案

问题解决方案

关于(t,m,s)-Nets的Python实现

目前Python生态里没有广泛维护的(t,m,s)-Nets现成实现,但可以基于其核心逻辑用现有工具替代或简化实现:

  • 优先考虑用scipy.stats.qmc中的Sobol序列——它属于(t,m,s)-Nets的特例,能满足高维数据下提升样本代表性的需求,且官方维护稳定性强。
  • 两种使用方式的示例代码:
    1. 直接生成匹配数据尺度的低差异样本
    import numpy as np
    from scipy.stats import qmc
    
    # 假设剩余数据X形状为(n_samples, 100)
    X_remaining = np.random.uniform(0, 1000, size=(1000, 100))
    num_sample = 50  # 计划采样数量
    
    # 初始化采样器,维度匹配embedding_dimensions=100
    sampler = qmc.Sobol(d=100, scramble=True)
    # 生成[0,1)范围样本后,缩放至你的数据区间[0,1000]
    sobol_samples = sampler.random(n=num_sample) * 1000
    
    1. 从现有剩余数据中筛选最接近低差异点的样本(保留真实数据分布)
    from sklearn.neighbors import KDTree
    
    # 基于上面生成的sobol_samples,用KDTree快速查找近邻
    tree = KDTree(X_remaining)
    _, indices = tree.query(sobol_samples, k=1)
    selected_samples = X_remaining[indices.flatten()]
    

解决pyDOE2 LHS采样尺度不匹配问题

pyDOE2的lhs函数默认输出[0,1)范围的样本,必须手动缩放至你的数据区间[0,1000]:

from pyDOE2 import lhs

# 生成100维、50个样本的LHS数据
lhs_raw = lhs(100, samples=50)
# 缩放至目标尺度
scaled_lhs = lhs_raw * 1000

如果缩放后仍集中在0附近,先检查原始数据X是否本身在0区域分布密集。若原始数据分布不均,可先对数据做分位数转换(映射到均匀分布),再做LHS采样,最后映射回原尺度。

采样流程思路验证

你的流程逻辑是合理的:

  • 剩余数据为空时,训练集即为完整数据,符合代表性要求;
  • 有剩余数据时,用(t,m,s)-Nets这类低差异序列补充采样,在100维高维场景下,能比随机采样更均匀覆盖数据空间,有效提升样本代表性。
  • 补充建议:如果需求是从现有数据中选样本而非生成新数据,用低差异序列的点作为锚点查找近邻的方式,既能利用低差异序列的均匀性,又能保留原始数据的真实分布特征。

内容的提问来源于stack exchange,提问作者Nuntea7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:24:57