繁体   English   中英

尝试从列表中生成随机数据

[英]Trying to Generate Random Data from Lists

我正在尝试为项目生成数据。 数据需要从预定义列表中随机生成。 本质上,我有真实数据,但是非常小。 为了建立一些分类器(决策树,支持向量机和朴素贝叶斯),我想产生100,000个观测值。

我是编码新手(我可以在Matlab和R中做基本的事情),最初尝试在Excel中做到这一点,但是RANDOMA函数生成的数据非常均匀。 更具体地说,我使用5个人口统计信息来预测客户将选择哪个零售商,例如零售商A,B或C。人口统计信息的列表如下:

1)年龄段(18-24、25-34、35-44、45-54、55 +)2)性别(男性或女性)3)收入组(<£10k,£10k-19.99k,£20k- 29.99万英镑,等等。4)地区(伦敦,威尔士,苏格兰,北爱尔兰,西南等)5)工作类型(全职,兼职,学生等)

当我尝试随机创建100,000个观察值时(每个观察值从5个列表中随机选择1个),它们几乎平均分布在它们之间。 更糟糕的是,我随机分配给零售商(A,B或C)的价值也相等。

这个想法是将随机生成的数据分为训练和测试数据,因此我可以构建一些模型并测试其适用性。

我不知道您的数据的典型分布,但是以下内容应该可以帮助您入门。

library(tidyverse)
set.seed(315) # This will create the same data set each run
n.size <- 500

myData <- tibble(
ID = 1:n.size,
VisitDT = lubridate::today()-30 - (runif(n.size) * 100),
IncomeGroup = sample(c("Low", "Medium", "High" ), n.size, prob = c(.7, .25, .05), replace = TRUE),
age = round(rnorm(n = n.size, mean = 52, sd = 10),2),
sex = sample (c('M', 'F'), size = n.size, prob = c(.4, .6), replace = TRUE),
region = sample (c('London', 'Wales', 'Scotland'), size = n.size, prob = c(.4,.3,.2), replace = TRUE),
Treatment = sample(c('No','Yes'), size = n.size, prob = c(.1, .9), replace = TRUE)
)

在Matlab中,您最好的朋友是randsample函数( 在此处参考),它是Statistics Toolbox一部分。 让我们举一个关于您的Gender变量的示例:

% possible values (M for male and F for female)
% since it's a qualitative variable, let's use the categorical type
var = categorical({'M' 'F'});

prob = [0.55 0.45]; % corresponding probabilities
n = 100000; % sample size
repl = true; % replacement (true = yes, false = no)

gender = randsample(var,100000,repl,prob);

您可以使用相同的方法来生成有关Region和Job的样本。 现在,让我们用您的Age变量创建另一个示例。

var = 1:100; % possible values (age from 1 to 100 years)
n = 100000; % sample size
repl = true; % replacement (true = yes, false = no)

% the probability argument is not provided, hence the result is equally distributed
age = randsample(var,100000,repl);

由于您要将“年龄”样本划分为不同的组,因此以边为第二个参数的histcounts将为您完成此操作:

age_grps = histcounts(age,[0 18 25 35 45 55 100]);

% remove the first column if you want to esclude people from 0 to 17 years
age_grps(1) = [];

您可以使用相同的方法来生成收入样本。

据我所知,您主要关心的是变量的均匀分布。 我展示了如何在randsample函数( prob参数)中为每个可能的值设置不同的概率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM