我已经学会了自我引导和分层。但是什么是分层的引导呢?它是如何工作的呢?
假设我们有一个n个实例(观察)的数据集,m是类的数量。我应该如何划分数据集,培训和测试的百分比是多少?
发布于 2016-02-10 23:52:36
您将数据集拆分为每个类。然后,你从每个子群体中独立抽取样本。您从一个子种群中抽取的实例数量应该与其比例相对。
data
d(i) <- { x in data | class(x) =i }
for each class
for j = 0..samplesize*(size(d(i))/size(data))
sample(i) <- draw element from d(i)
sample <- U sample(i)如果从具有类{'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b'}的dataset中取样四个元素,则此过程确保分层示例中至少包含类b的一个元素。
发布于 2021-06-04 03:47:07
只需在python中实现这一点,我将在这里发布我的当前方法,以防其他人对此感兴趣。
函数为原始Dataframe创建索引以创建分层引导示例。
我选择在原始的Dataframe中遍历所有相关的层簇,检索每个层中相关行的索引,并随机(用替换)从这个层所包含的层中抽取相同数量的样本。
反过来,随机绘制的索引可以组合成一个列表(最终应该具有与原始Dataframe相同的长度)。
import pandas as pd
from random import choices
def provide_stratified_bootstap_sample_indices(bs_sample):
strata = bs_sample.loc[:, "STRATIFICATION_VARIABLE"].value_counts()
bs_index_list_stratified = []
for idx_stratum_var, n_stratum_var in strata.iteritems():
data_index_stratum = list(bs_sample[bs_sample["STRATIFICATION_VARIABLE"] == idx_stratum_var[0]].index)
bs_index_list_stratified.extend(choices(data_index_stratum , k = len(data_index_stratum )))
return bs_index_list_stratified然后是实际的引导循环
(例如10k次):
k=10000
for i in range(k):
bs_sample = DATA_original.copy()
bs_index_list_stratified = provide_stratified_bootstap_sample_indices(bs_sample)
bs_sample = bs_sample.loc[bs_index_list_stratified , :]
# process data with some statistical operation as required and save results as required for each iteration
RESULTS = FUNCTION_X(bs_sample)https://stackoverflow.com/questions/35328198
复制相似问题