Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 试图从列表中生成随机数据_R_Excel_Matlab_Data Generation - Fatal编程技术网

R 试图从列表中生成随机数据

R 试图从列表中生成随机数据,r,excel,matlab,data-generation,R,Excel,Matlab,Data Generation,我正在尝试为一个项目生成数据。数据需要从预定义的列表中随机生成。基本上,我有真实的数据,但数据非常小。为了构建一些分类器决策树、支持向量机和朴素贝叶斯,我想生成100000个观察值 我不熟悉编码,我可以在Matlab和R中做一些基本的事情,并且最初尝试在Excel中这样做,但是,RANDOMA函数生成的数据分布非常均匀。更具体地说,我使用5条人口统计信息预测客户将选择哪家零售商,例如零售商a、B或C。人口统计信息列表如下: 1年龄组18-24、25-34、35-44、45-54、55+ 2性别男

我正在尝试为一个项目生成数据。数据需要从预定义的列表中随机生成。基本上,我有真实的数据,但数据非常小。为了构建一些分类器决策树、支持向量机和朴素贝叶斯,我想生成100000个观察值

我不熟悉编码,我可以在Matlab和R中做一些基本的事情,并且最初尝试在Excel中这样做,但是,RANDOMA函数生成的数据分布非常均匀。更具体地说,我使用5条人口统计信息预测客户将选择哪家零售商,例如零售商a、B或C。人口统计信息列表如下:

1年龄组18-24、25-34、35-44、45-54、55+ 2性别男性或女性
3收入组我不知道你的数据的典型分布,但下面应该让你开始

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)
)

我不知道您的数据的典型分布,但以下内容应该可以帮助您开始

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函数引用,它是统计工具箱的一部分。让我们举一个关于性别变量的例子:

% 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);
您可以使用相同的方法生成有关区域和作业的示例。现在让我们用年龄变量做另一个例子

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参数中的每个可能值设置不同的概率。

在Matlab中,您最好的朋友是randsample函数引用,它是统计工具箱的一部分。让我们举一个关于性别变量的例子:

% 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);
您可以使用相同的方法生成有关区域和作业的示例。现在让我们用年龄变量做另一个例子

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参数中的每个可能值设置不同的概率。

在它们之间平均分布是什么意思?您的意思是,每个列表中的选项出现的频率相同,即18-24与25-34、35-44等的数量相同吗。?如果你对每个列表进行统一抽样,这是意料之中的。请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到您的问题中。随机增加您的样本量是一件可怕的事情-例如,请参阅。只需使用随机林作为分类器-它以袋装为中心,这在避免过度拟合方面是非常出色的,这是小样本的主要问题。你所说的在它们之间平均分布是什么意思?您的意思是,每个列表中的选项出现的频率相同,即18-24与25-34、35-44等的数量相同吗。?如果你对每个列表进行统一抽样,这是意料之中的。请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到您的问题中。随机增加您的样本量是一件可怕的事情-例如,请参阅。只需使用一个随机森林作为分类器-它是围绕着袋装,这是在避免过度拟合,这是小样本的主要问题,这是辉煌的,肯定会帮助我在未来感谢!听到这个消息我很高兴。如果我的答案满足你的需要,请接受。这是辉煌的,一定会帮助我在未来谢谢!听到这个消息我很高兴。如果我的答案满足您的需要,请接受。我使用了此代码,并根据我实际数据的概率对其进行了修改。这让我可以将实例从12个扩展到10000个。非常感谢你的帮助!我使用了这段代码,并根据实际数据的概率对其进行了修改。这让我可以将实例从12个扩展到10000个。非常感谢你的帮助!