# datasample
从数据中随机抽样,有或没有放回
函数库: TyStatistics
# 语法
y,idx = datasample(rng::AbstractRNG,x::AbstractArray,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[],
)
y,idx = datasample(rng::AbstractRNG,x::AbstractString,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[],
)
y,idx = datasample(x::Union{AbstractString,AbstractArray},k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[],
)
# 描述
y,idx = datasample(rng::AbstractRNG,x::AbstractArray,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[]) 返回前面语法中AbstractArray输入参数的样本,以及一个或多个关键字参数指定的附加选项。例如,replace = false 指定不放回采样。示例
y,idx = datasample(rng::AbstractRNG,x::AbstractString,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[]) 返回前面语法中AbstractString输入参数的样本,以及一个或多个关键字参数指定的附加选项。例如,replace = false 指定不放回采样。示例
y,idx = datasample(x::Union{AbstractString,AbstractArray},k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[]) 返回前面语法中AbstractString或AbstractArray输入参数的样本,以及一个或多个关键字参数指定的附加选项,且利用全局随机种子(这将导致输出无法控制随机流)。例如,replace = false 指定不放回采样。
# 示例
从向量中采样唯一值
为再现性创建随机数流。
using TyMath
using TyStatistics
rng = MT19937ar(5489)
从整数 1 到 10 中抽取五个唯一值。
y, = datasample(rng,1:10,5,replace = false)
y = 5×1 Matrix{Int64}:
6
4
7
3
10
指定概率生成随机字符串
using TyMath
using TyStatistics
rng = MT19937ar(5489)
根据指定的概率从序列 ACGT 中生成 48 个随机字符。
seq, = datasample(rng,"ACGT",48,weights = [0.15 0.35 0.35 0.15])
seq = "GTATGACGTTCTTCGACTGTGAGTGGGCGCGACAAGGCTACCGGCCCG"
选择矩阵列的随机子集
为结果的可重复性设置随机种子。
using TyMath
using TyStatistics
rng = MT19937ar(10)
生成具有 10 行和 1000 列的矩阵。
X = randn(rng,10,1000);
创建随机数流以在数据样本中重现。
s = MT19937ar(5489)
从 X 中随机选择五个不同的列。
Y, = datasample(s,X,5,2,replace = false)
Y = 10×5 Matrix{Float64}:
-1.5193 1.13672 -0.586354 -0.655754 0.391249
0.692856 -1.03803 -0.684238 -0.792776 0.66517
1.1872 0.217096 0.980718 -0.848974 -0.232045
0.139023 2.24161 0.572727 0.425277 1.67601
0.0601256 0.489191 -2.12821 0.157916 -0.299219
1.41157 -1.76663 -0.307409 -0.172384 -0.223245
-1.65982 -1.4411 -1.66551 -0.673025 0.220711
-0.194504 -0.632623 1.13713 -0.106311 2.44995
-0.330362 -0.80897 -0.0316812 0.126629 1.09163
-1.46784 1.00255 1.10987 0.59489 -0.641892
从两个数据向量中并行采样
根据从另一个向量中选择的样本的索引从数据中选择样本。
生成两个随机向量。
using TyMath
using TyStatistics
x1 = randn(100,1);
x2 = randn(100,1);
从向量 x1 中选择 10 个元素的样本,并在向量 idx 中返回样本的索引。
y1,idx = datasample(x1,10);
使用向量 idx 中的索引从向量 x2 中选择 10 个元素的样本。
y2 = x2[idx];
# 输入参数
rng - 随机种子Global_RNG(默认) | 随机数种子
通过设置rng可控制datasample随机生成结果,不设置则利用全局变量。
x - 输入参数数组 | 字符串
要从中采样的输入数据,指定为向量、矩阵、多维数组、字符串。默认情况下,datasample 从数据的第一个非单一维度采样。例如,如果 data 是矩阵,则 datasample 从行中采样。使用 dim 输入参数更改此行为。
数据类型: AbstractArray | AbstractString
k - 样本数量正整数标量
样本数,指定为正整数。
示例: datasample(data,100) 返回从 data 中的数据中均匀随机采样的 100 个观测值。
数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool
dim - 样本维度nothing (default) | 正整数
要采样的维度,指定为正整数。例如,如果 data 是矩阵且 dim 为 2,则 y 包含 data 中的列选择。如果 data 是表或数据集数组且 dim 为 2,则 y 包含 data 中的变量选择。无论数据是向量、矩阵还是 N 维数组,都可以使用 dim 确保沿特定维度进行采样。
数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool
# 关键字参数
将关键字参数指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是相应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
示例: replace = false,weights = ones(datasize,1) 以与 weights 的元素成比例的概率无放回地采样,其中 datasize 是被采样维度的大小。
replace - 放回抽样指标true (default) | false
带替换采样的指示符,指定为以逗号分隔的对,其中包含 replace 和 true 或 false。
如果replace为真,则使用替换样本,如果replace为假,则不使用替换样本。如果replace为假,则 k 不得大于被采样维度的大小。例如,如果数据 = [1 3 Inf; 2 4 5] 和 y = datasample(data,k,replace = false),则 k 不能大于 2。
数据类型: Bool
weights - 采样权重ones(datasize,1) (default) | 非负数值向量
采样权重,指定为以逗号分隔的对组,其中包含 weights 和一个非负数值向量。向量的大小为 datasize,其中 datasize 是被采样维度的大小。向量必须至少有一个正值并且不能包含 NaN 值。 datasample 函数样本的概率与weights的元素成正比。
示例:weights = [0.1,0.5,0.35,0.46]
# 输出参数
y - 样本数组 | 字符串
样本,以向量、矩阵、多维数组、表或数据集数组形式返回。
如果数据是向量,则 y 是包含从数据中选择的 k 个元素的向量;
如果数据是矩阵且 dim = 1,则 y 是包含从数据中选择的 k 行的矩阵。或者,如果 dim = 2,则 y 是包含从数据中选择的 k 列的矩阵;
如果数据是 N 维数组并且 dim = 1,则 y 是沿数据的第一个非单一维度获取的样本的 N 维数组。或者,如果您为 dim 名称-值对组参数指定一个值,datasample 将沿维度 dim 采样;
如果数据是一个表并且 dim = 1,则 y 是一个包含从数据中选择的 k 行的表。或者,如果 dim = 2,则 y 是包含从数据中选择的 k 个变量的表;
如果 data 是一个数据集数组并且 dim = 1,则 y 是一个包含从数据中选择的 k 行的数据集数组。或者,如果 dim = 2,则 y 是包含从数据中选择的 k 个变量的数据集数组。
如果输入数据包含以 NaN 值表示的缺失观测值,则数据样本会从整个输入中采样,包括 NaN 值。例如,y = datasample([NaN 6 14],2) 可以返回 y = NaN 14。
当样本被替换(默认)时,y 可以包含来自数据的重复观察。将 replace name-value 参数设置为 false 以在不替换的情况下进行采样。
idx — 索引向量
索引,以向量形式返回,指示 datasample 从数据中选择哪些元素来创建 y。 例如:
如果数据是向量,则 y = data[idx];
如果数据是矩阵且 dim = 1,则 y = data[idx,:];
如果数据是矩阵且 dim = 2,则 y = data[:,idx]。
# 提示
要从一个范围内替换随机整数,请使用 randi。
要在不放回的情况下对随机整数进行采样,请使用 randperm 或 datasample。
要从数据中随机采样,有或没有替换,请使用 datasample。
# 替代功能
可以使用 randi 或 randperm 分别为使用或不使用替换的随机抽样生成索引。 但是,datasample 使用起来更方便,因为它直接从您的数据中采样。 datasample 还允许加权采样。
# 参考文献
[1] Wong, C. K. and M. C. Easton. "An Efficient Method for Weighted Sampling Without Replacement." SIAM Journal of Computing 9(1), pp. 111–113, 1980.