R 模拟人口分布的分层抽样

R 模拟人口分布的分层抽样,r,machine-learning,random,sampling,downsampling,R,Machine Learning,Random,Sampling,Downsampling,我是R新手,最近我对训练和测试分割使用分层抽样,以确保目标标签在两者中的比例相等。现在我想使用下采样训练数据,以便人口分布/训练分布与新下采样分布相似 我之所以要减少这个示例,是因为我有1100万行56列,通过网格/随机/贝叶斯搜索进行参数调整需要几天时间 我正在使用XGboost,这是一个二进制分类问题 如果有人能在这方面帮助我,我将不胜感激 下面是我的代码 train_rows=sample.split(df$modellable,SplitRatio=0.7)35;#分层采样 列车=df

我是R新手,最近我对训练和测试分割使用分层抽样,以确保目标标签在两者中的比例相等。现在我想使用下采样训练数据,以便人口分布/训练分布与新下采样分布相似

我之所以要减少这个示例,是因为我有1100万行56列,通过网格/随机/贝叶斯搜索进行参数调整需要几天时间

我正在使用XGboost,这是一个二进制分类问题

如果有人能在这方面帮助我,我将不胜感激

下面是我的代码

train_rows=sample.split(df$modellable,SplitRatio=0.7)35;#分层采样
列车=df[列车排,]

test=df[!train_rows,]`在此处输入代码`
实现这一点的最简单方法是计算两个类之间的比率。假设1100万中有300万0和800万1。所以,你的0:1比例是3:8。 现在,假设您要将其采样减少到100万行,您可以随机选择100万行,保持相同的比率,即3:8。 因此,从数学上讲,0类样本约为270万,1类样本约为730万。你可以自己计算准确的数字。 现在,您可以使用Dataframe.sample()函数获取下采样数据。 我正在为此编写python代码

df_class_0 = df[df.target == 0]
df_class_1 = df[df.target == 1]
df_class_0_under = df_class_0.sample(2.7 lakh)
df_class_1_under = df_class_1.sample(7.3 lakh)
df_test_under = pd.concat([df_class_0_under, df_class_1_under], axis=0)