机器学习中的 5 种概率训练数据抽样方法2025 年 2 月 3 日 | 阅读 19 分钟 在机器学习领域,训练数据的准确性和变异性对于预测性能和泛化能力至关重要。使用概率抽样方法对于从大型数据集中选取代表性子集并保证模拟过程能够准确地反映基本信息分布至关重要。本文介绍了五种关键的概率数据训练抽样方法:简单随机抽样、分层抽样、系统抽样、整群抽样和多阶段抽样。理解这些方法及其实现可以极大地提高机器学习算法的性能。 在抽样世界中,我们从一个更大的目标群体中挑选出一小部分个体。这个选定的子集被称为样本。我们为什么要这样做?想象一下试图研究一个国家里的每个人——考虑到人口的庞大,这是一项压倒性的任务。为了使其更容易实现,我们选择一个有代表性的群体。 通过深入研究这个样本,我们旨在获得可以应用于整个群体的见解。在机器学习领域,我们创建的每一个模型都依赖于对这类样本的分析。因此,如果我们不仔细选择我们的样本,我们的模型将无法准确或有效地学习。 有两种样本选择方法可用 - 概率抽样:有时在学术界也被称为随机抽样。
- 非概率抽样:通常被称为非随机抽样。
概率抽样概率抽样方法是机器学习中的基本技术,用于生成能够正确代表其来源总体的训练数据集。这些策略使用概率论来确保总体的每个子群体都有明确且非零的被选中的机会,从而减少偏差并提高样本代表性。训练数据的质量和代表性在机器学习中至关重要,因为这些因素直接影响算法的有效性、泛化能力和公平性。 1. 简单随机抽样假设您想收集数据,然后决定纯粹通过机会来选择样本。没有模式,只有纯粹的随机。假设您想了解有多少人接种了疫苗。您可以将 100 名符合条件的个人的姓名写在单独的纸上,将它们放入帽子中,然后选择几个身份进行研究。这种方法演示了简单随机抽样。 在这种方法中,总体的每个成员都被分配一个标识符,然后从随机数生成器或随机数表中抽取样本。这种方法有一个显著的好处,那就是它是最直接的概率抽样形式。 代码 输出 Simple random sampling of 5 numbers are: [21, 48, 1, 37, 6]
代码解释 - import random: 在 Python 中导入 random 模块,该模块提供生成随机数和执行随机选择的函数。
- pop = list(range(1, 50)): 创建一个包含数字 1 到 49 的列表 pop。这代表了我们将从中抽样的总体。
- size = 5: 指定我们想从总体中抽样 5 个数字。
- samples = random.sample(pop, size): 使用 random.sample() 执行简单随机抽样。它接受两个参数:要抽样的总体 (pop) 和样本大小 (size)。它返回一个列表 (samples),其中包含从 pop 中无放回随机选择的 5 个数字。
- print("Simple random sampling of 5 numbers are: ", samples): 将抽样的数字打印到控制台。
总之,此代码片段使用 random.sample() 函数演示了如何在 Python 中执行简单随机抽样,您可以在其中指定总体 (pop) 和样本大小 (size)。 简单随机抽样类型 在机器学习领域,也适用类似的原理。在将数据集划分为训练集和测试集时,您通常会依赖简单随机抽样来确保无偏的划分。 a) 有放回简单随机抽样 想象一下您正在从帽子里抽名字。您抽出一个,记下来,然后在再次抽之前将其放回帽子里。这种方法称为有放回抽样。本质上,每次抽样后,所有名字仍然在帽子里,这意味着任何名字理论上都可以被多次选中。 由于每次抽取后总体都保持不变,因此每次选择都与其他选择独立。您可能会问为什么我们会使用这种方法。嗯,当处理相对较小的总体大小时,它尤其有用。这样,我们确保每个人在每次抽取中都有平等的被选中的机会,从而在整个抽样过程中保持一致性。 当总体非常小的时候,这种方法可以防止样本池枯竭,并确保选择的多样性和公平性。 b) 无放回简单随机抽样 当您从一群人中选一个人时,您不会把他们放回去。这意味着您每次选一个人时,就少了一个人可供选择。如果您需要选出一定数量的人(比如说 N),您会一直选择而不放回,直到您选了 N 次。这种方法用于群体较大时,在统计学中称为无放回抽样。 2. 分层抽样当总体被划分为不同的类别或子组时,样本框可以组织成独立的“层”。每一层都被视为一个独立的子总体,从中随机选择个体元素。这种方法称为分层抽样。 一次政治调查是分层抽样的一个现实说明。考虑一个在种族、宗教、性别、教育、文化和其他特征方面人口多样化的城镇。与简单随机抽样或系统抽样相比,基于这些标准的分层抽样允许问卷更准确地反映整个社区。分层抽样根据年龄、性别、财富等变量将个体划分为更小的组,称为层。在构建了这些子组之后,我们可以随机或系统地从每个子组中选择样本。上述技术有助于我们获得更准确的结果,因为它确保了每个子组都得到代表。 代码 输出 Train dataset:
Sex
male 461
female 251
Name: count, dtype: int64
Test dataset:
Sex
male 116
female 63
Name: count, dtype: int64
代码解释 - 导入库:从 sklearn.model_selection 导入 train_test_split,用于将数据分割成训练集和测试集。
- 加载数据集:使用 pd.read_csv 从提供的 URL 加载 CSV 文件中的数据集。
- 设置分层列:指定我们想要分层数据的列为 Sex。
- 分割数据:使用 train_test_split 函数将数据集分割成训练集和测试集。
- data 是正在分割的数据集。
- test_size=0.2 指定 20% 的数据应用于测试集。
- stratify=data[stratify_by] 确保分割方式能够保持 Sex 列在训练集和测试集中的比例。
- 显示值计数:使用 value_counts 函数显示训练集和测试集中 Sex 列的每个唯一值的计数。
- 结果被打印出来,显示训练集和测试集中 Sex 的分布,证实分层保持了比例。
该脚本加载泰坦尼克号数据集,按 Sex 列进行分层,并将数据集分割成训练集和测试集,同时确保男女比例在两个数据集中都得到保持。然后打印训练集和测试集中 Sex 的分布,以确认分层成功。 3. 系统抽样系统抽样,也称为间隔抽样,是一种有序地从更大总体中选择样本的方法。想象一下您有一个按特定顺序排列的名单。在系统抽样中,您决定一个数字,比如 5,然后选择名单上的每第 5 个人。这个选定的数字,在我们例子中是 5,称为抽样间隔。 所以,如果您正在进行一项研究并需要选择参与者,您会从一个随机点开始,然后连续选择每第 5 个人。这样,您就可以确保您的样本均匀地分布在整个总体中。这是获得具有代表性的研究群体的一种简单而有效的方法。 最后要讨论的概率技术是系统抽样。此方法涉及在总体中选择一个起始点,然后以固定的、规律的间隔一致地选择元素。在统计术语中,这意味着选择每 k 个元素,其中 k 代表抽样间隔。 想象一下您从事质量控制或审计工作。检查每件产品的质量或审查每一笔会计分录都是不切实际的。在这种情况下,系统抽样变得非常有用。通过采用这种方法,您可以创建一个稳健的样本,使您能够对整个总体得出可靠的结论。 代码 输出 Systematic or interval sampling of 10 numbers are: [ 1 10 19 28 37 46 55 64 73 82 91]
代码解释 - 导入必要的库:此行导入 NumPy 库,该库对于 Python 中的数值运算至关重要。
- 创建总体数组:此行创建一个包含数字 1 到 99 的数组 pop。np.arange(1, 100) 生成从 1 开始直到(但不包括)100 的值。
- 定义样本大小和间隔:此处,size 设置为 10,表示我们想从总体中抽样 10 个元素。间隔是通过总体长度与样本大小的整数除法计算得出的。在这种情况下,间隔将是 99 // 10,等于 9。
- 选择随机起始点:此行在间隔范围内选择一个随机起始点。np.random.randint(0, interval) 生成一个介于 0(包含)和间隔(不包含)之间的随机整数。这确保了起始点位于第一个间隔内。
- 执行系统抽样:此行执行系统抽样。它从随机选择的起始索引开始,然后从总体中选取每隔 interval 个元素。start::interval 切片语法表示“从索引 start 开始,每隔 interval 个元素选取一次”。
- 打印抽样元素:最后,此行打印抽样的元素。输出将显示从总体中系统选择的 10 个数字。
此代码通过在第一个间隔内选择一个随机起始点,然后从 1 到 99 的数字总体中选取每隔 9 个元素来演示系统抽样。结果是 10 个元素的样本,最后打印出来。 4. 整群抽样当总体包含明显的群体或簇时,可以使用整群抽样。这些簇需要彼此区分开,并且总的来说应该覆盖整个总体。随机选择的这些簇中的一小部分可以代表整个总体。 首先,随机选择一个簇样本。在每个选定的簇中,包括所有个体进行研究。这个初始步骤称为第一阶段整群。如果随后对每个选定簇内的个体应用随机抽样,则称为第二阶段抽样。 例如,想象一家跨国公司 (MNC) 想要客户反馈。该公司拥有客户地址列表,并根据地理位置将其划分为簇。然后,它随机选择其中一些簇,并调查其中的所有客户。 整群抽样包括将整个总体划分为更小的组或簇,其中每个簇与总体具有相似的特征。研究人员不是从每个簇中抽取个体样本,而是随机选择整个簇来纳入研究。当研究庞大且多样化的总体时,这种方法尤其有用。 代码 输出 代码解释 - 导入 random 模块:此行导入 Python 的 random 模块,该模块用于生成随机数。
- 定义数据集:此处,data 是一个包含整数值的列表。这充当了我们将从中抽样的数据集。
- 设置样本大小:size 是一个设置为 5 的变量,表示每个样本中要包含的元素数量。
- 生成随机起始索引:random.randint(0, size + 1) 生成一个介于 0 和 size + 1 之间的随机整数 start。这决定了在 data 列表中抽样的起始点。
- 初始化 sampled_data:sampled_data 是一个空列表,将存储数据的抽样子集。
- 抽样过程:for 循环从 start 索引开始,以 size 为步长遍历 data 列表。
- 在每次迭代中,data[i+1:i+size] 从 data 中切片一个子列表,从索引 i+1 到 i+size(不包含)开始。
- 然后将此子列表追加到 sampled_data 中。
- 打印结果:print(start) 显示随机选择的抽样起始索引。
- print(sampled_data) 打印最终的抽样数据,它由 5 个元素的列表组成(除非最后一个可能较短,如果剩余元素不够)。
此代码片段演示了 Python 中整群抽样的基本实现。它随机选择数据集 (data) 中的一个起始点,并创建指定大小 (size) 的子集 (sampled_data)。每个子集是通过从 data 中连续取元素形成的,从随机选择的索引开始。 5. 多阶段抽样代码 输出 Selected Schools: ['School_4', 'School_9', 'School_8']
Selected Classes: {'School_4': ['Class_3', 'Class_4'], 'School_9': ['Class_5', 'Class_1'], 'School_8': ['Class_4', 'Class_2']}
Final Sample:
School Class Student
0 School_1 Class_1 Student_1
1 School_1 Class_1 Student_2
2 School_1 Class_1 Student_3
3 School_1 Class_1 Student_4
5 School_1 Class_1 Student_6
... ... ... ...
1490 School_10 Class_5 Student_21
1492 School_10 Class_5 Student_23
1493 School_10 Class_5 Student_24
1498 School_10 Class_5 Student_29
1499 School_10 Class_5 Student_30
[850 rows x 3 columns]
代码解释 - 导入库:我们导入 random 库用于随机抽样,导入 pandas 用于数据操作。
- 学校:创建 10 所学校的列表,命名为 'School_1' 到 'School_10'。
- 数据:使用嵌套循环生成一个数据集,其中每所学校有 5 个班级,每个班级有 30 名学生。数据集中的每个条目都是一个包含学校、班级和学生姓名的列表。
- DataFrame:将列表的列表转换为 Pandas DataFrame,列名为 'School'、'Class' 和 'Student'。
- 选择学校:使用 random.sample 从 10 所学校的列表中随机选择 3 所学校。
- 选择班级:选定的班级字典:初始化一个空字典来存储每所选学校的选定班级。
- 对于每所选学校:获取该学校中唯一班级列表,使用 df[df['School'] == school]['Class'].unique().tolist()。
- 使用 random.sample 从此列表中随机选择 2 个班级。
- 将选定的班级存储在 selected_classes 字典中,以学校为键。
- 选定的学生列表:初始化一个空列表来存储选定的学生。
- 对于每个选定的学校及其对应的班级
- 对于每个选定的班级:使用 df[(df['School'] == school) & (df['Class'] == cls)]['Student'].tolist() 获取该班级中的学生列表。
- 使用 random.sample 从此列表中随机选择 5 名学生。
- 将选定的学生添加到 selected_students 列表中。
- 最终样本:通过过滤原始 DataFrame 来包含仅选定的学生,从而创建最终样本 DataFrame,使用 df[df['Student'].isin(selected_students)]。
- 打印结果:打印选定的学校列表。
- 打印选定学校的选定班级字典。
- 打印最终样本 DataFrame。
该代码创建了一个学校、班级和学生的合成数据集。 它通过首先选择学校,然后选择这些学校内的班级,最后选择这些班级内的学生,执行了多阶段概率抽样。 最终样本是原始数据集的一个子集,代表了多阶段抽样过程选定的学生。 机器学习中 5 种概率训练数据抽样方法的优点- 简单随机抽样
- 无偏代表性:简单随机抽样确保每个数据点都有相等的被选中概率。这可以最大程度地减少选择偏差,并确保样本准确地反映总体,前提是样本量足够大。
- 简单性:此方法简单且易于实现,可用于广泛的应用。它不需要复杂的算法或关于数据集的先验知识。
- 统计有效性:由于每个数据点都有相等的被选中机会,因此得到的样本适用于统计推断和假设检验。在样本量足够大的情况下,它允许从样本推广到总体。
- 分层抽样
- 增强的代表性:分层抽样确保数据集中的所有相关子组(层)都得到代表。这对于具有不平衡类别的类别不平衡数据集尤其有用,因为它保证了即使是少数类别也包含在样本中。
- 降低方差:通过将总体划分为同质子组并在每个子组中进行抽样,此方法可以减少每个层内的变异性。这会导致对总体参数的估计更精确、更可靠。
- 提高准确性:通过确保每个层都按比例代表,分层抽样提高了模型预测的准确性。当感兴趣的变量在不同层之间存在显著差异时,此方法特别有益。
- 系统抽样
- 易于实现:系统抽样易于实现。在随机选择起始点后,您只需选择每第 n 个数据点。此方法所需的努力最少,并且易于理解。
- 效率:与简单随机抽样相比,此方法效率更高,尤其适用于大型数据集。它减少了生成样本所需的时间和计算资源。
- 均匀分布:系统抽样确保样本在整个数据集中均匀分布。这对于具有周期性模式的数据集可能很有益,可确保数据集的所有部分都得到平等代表。
- 整群抽样
- 成本效益:对于庞大且地理分布广泛的总体,整群抽样可以显著降低数据收集的成本和精力。通过对簇进行抽样,然后包括这些簇内的所有数据点,减少了直接对个体进行抽样的需要。
- 可行性:当无法获得总体的完整列表时,此方法是可行的。它不需要所有数据点的全面列表,而只需要簇的列表,这通常更容易获得。
- 实用性:整群抽样在存在自然分组的现实场景中非常实用,例如地理区域、学校或其他组织单位。它利用这些自然簇来简化抽样过程。
- 多阶段抽样
- 成本效益:通过将资源集中在特定的、随机选择的阶段,而不是广泛、不加区分的抽样,可以降低差旅和管理成本。
- 可行性:允许研究人员在不同阶段调整抽样过程,为各种研究背景和总体结构提供适应性。
- 提高准确性:通过将总体分解为更小、更易于管理的单元,该方法可以减少抽样误差并提高估计的精度。
- 实用性:通过逐步从更广泛的群体缩小到更具体的群体,可以促进对大型、分散的总体进行抽样。
- 全面的数据收集:在每个阶段收集详细信息,增强了数据的深度和广度。
选择合适的概率抽样方法可以通过确保训练数据能够代表总体来显著提高机器学习模型的有效性。每种抽样方法都有其独特的优势,使其适用于特定场景。 理解这些优势使从业者能够选择最适合其特定需求的方法,从而提高其机器学习模型的稳健性和性能。 机器学习中 5 种概率训练数据抽样方法的缺点概率训练数据抽样方法在创建代表性训练数据集方面对于机器学习至关重要。然而,每种方法都有其自身的缺点。 - 简单随机抽样
- 代表性问题:当处理异质总体时,简单随机抽样可能无法充分捕捉所有子组。例如,如果总体包含一个少数群体,那么该群体可能在样本中代表性不足,从而导致模型训练出现偏差。
- 需要大型样本量:为了确保所有群体得到充分代表,尤其是在多样化的总体中,您需要较大的样本量。这可能不切实际且成本高昂。
- 随机变异:选择中的随机性可能导致样本不平衡,尤其是在样本量较小的情况下。例如,您可能随机选择一个异常值比例过高的样本,从而影响模型的训练过程和性能。
- 分层抽样
- 复杂性:识别和定义合适的层需要对总体的结构有深入的了解。这可能非常耗时且复杂。
- 资源密集:与简单随机抽样相比,实施分层抽样通常需要更多的精力和资源。例如,您需要有关总体的详细信息来定义层并在每个层内执行单独的抽样。
- 层错误分类:如果层定义不正确或个体被错误地分类到错误的层中,样本将产生偏差。例如,如果使用收入水平来定义层,但个人的收入数据已过时或不正确,则生成的样本将不具有代表性。
- 整群抽样
- 变异性增加:簇可能在内部是同质的,但彼此之间存在显著差异。这可能导致更高的抽样变异性和潜在偏差。例如,基于地理区域的簇可能具有不同的特征,并且某些区域可能被过度代表或代表不足。
- 簇选择偏差:必须小心进行簇的选择以避免偏差。如果某些簇因其大小或其他因素而被选中的概率较高,则样本可能无法代表整个总体。
- 复杂分析:由于簇内相关性,分析来自整群抽样的数据可能更复杂。标准分析技术可能不足,通常需要先进的统计方法。
- 系统抽样
- 周期性模式:如果总体存在与抽样间隔对齐的周期性模式,则可能导致样本偏差。例如,如果您从排序后的员工列表中每 10 个人抽取一个样本,并且列表按部门排序,则您可能会过度代表或代表不足某些部门。
- 缺乏随机性:由于选择过程遵循固定间隔,因此该方法不是纯粹随机的。如果间隔与总体中的某些潜在结构重叠,则可能引入偏差。
- 起始点偏差:起始点的选择会显着影响样本的代表性。如果起始点不是随机选择的,则可能导致样本偏差。
- 多阶段抽样
- 复杂性高: 多阶段抽样涉及多个抽样层,这使得过程非常复杂。每个抽样阶段都需要仔细规划和执行,以避免引入偏差。例如,在第一阶段选择学校,在第二阶段选择班级,在第三阶段选择学生,需要在每个层面进行详细规划。
- 误差传播: 任何阶段的误差都会传播到后续阶段,导致偏差累积。例如,如果最初的整群选择存在偏差,这种偏差将影响后续所有抽样阶段。
- 实施困难: 实施多阶段抽样可能具有挑战性,尤其是在确保每个阶段都正确执行且无偏差方面。这需要大量的资源和专业知识才能正确执行。
总之,虽然这些概率抽样方法是机器学习中创建代表性样本的强大工具,但它们各自都有固有的缺点,必须仔细管理,以确保训练数据的完整性和代表性。 机器学习中五种概率训练数据抽样方法的应用概率训练数据抽样方法对于机器学习至关重要,可以确保模型在具有代表性的数据集上进行训练。以下是五种常见概率抽样方法的应用: - 简单随机抽样
- 基准模型: 通常用于创建提供总体无偏表示的基准数据集。适用于初始模型训练和评估。
- 调查分析: 应用于调查数据收集,其中每个受访者需要有均等的选择机会,以确保无偏结果。
- 小型同质化群体: 适用于相对较小且同质的群体,其中每个个体被选中的概率相似。
- 分层抽样
- 类别不平衡: 在类别不平衡的分类问题中,分层抽样可确保每个类别在训练数据集中得到充分的代表。例如,在欺诈检测中,欺诈交易比非欺诈交易少得多。
- 子群体分析: 当需要单独分析总体中的特定子群体时很有用。例如,在医学研究中,按年龄组或性别分层可以确保每个群体都得到代表。
- 绩效基准测试: 在不同细分市场的绩效基准测试中,分层抽样可确保绩效指标代表每个细分市场。
- 整群抽样
- 地理数据收集: 适用于分布在不同地理区域的大型群体。例如,在不同地区抽样学校进行教育研究。
- 降低成本: 当在大面积区域进行简单随机抽样成本高昂或不切实际时,整群抽样通过聚焦于整群来降低成本。例如,在特定城市而不是全国范围内进行市场调研。
- 自然分组: 当群体自然地分为整群时很有用,例如家庭、学校或医院,这使得对整个整群进行抽样和研究更加容易。
- 系统抽样
- 制造业质量控制: 在生产线上使用,其中选择每 k 个项目进行质量检查,以确保一致的产品质量。
- 定期数据收集: 在需要定期收集数据的场景中,例如监控网络流量或环境数据,系统抽样简化了过程。
- 有序群体: 适用于具有自然顺序的群体,例如员工列表、客户数据库或库存列表,其中随机起始和固定间隔可以提供代表性样本。
- 多阶段抽样
- 大规模调查: 通常用于需要多阶段抽样的全国性调查和大型研究,以管理后勤复杂性。例如,全国健康调查可能会先抽样区域,然后抽样城镇,最后抽样个人。
- 分层群体: 适用于具有分层结构的群体,例如涉及学校、班级和学生的教育研究,从而可以在每个级别进行高效的数据收集。
- 复杂群体结构: 当群体具有多层结构时,例如农业调查可能会抽样区域、农场,然后是单个田地或作物。
结论总之,概率训练数据抽样方法是机器学习领域必不可少的工具,每种方法都提供独特的优势和量身定制的应用,以确保代表性和无偏的数据集。简单随机抽样是一种基础方法,可提供无偏的基准,在小型、同质化群体中尤其有效。然而,它在捕获不同子群体方面的局限性凸显了分层抽样方法的重要性。分层抽样在处理类别不平衡和确保不同群体得到充分代表方面表现出色,这在欺诈检测和子群体绩效基准测试等应用中至关重要。 整群抽样为大规模数据收集提供了实用的解决方案,特别是在处理地理上分散的群体或自然存在的整群(如学校或医院)时。它有助于降低成本和后勤复杂性,但需要小心处理,以避免由于整群内相关性而产生的偏差。系统抽样简化了有序群体中的选择过程,使其成为制造业质量控制和定期数据收集的理想选择。尽管如此,它容易受到周期性模式的影响,因此需要谨慎,以防止无意的偏差。 多阶段抽样在复杂和分层群体中的适应性突出,允许在多个级别进行高效的数据收集。它在大规模调查和需要详细、分层抽样过程的研究中特别有利。尽管其复杂性和潜在的累积误差,但在正确执行的情况下,它为全面数据代表性提供了强大的框架。 总而言之,这些抽样方法共同构成了机器学习从业者的多功能工具集,使得能够创建反映底层群体真实多样性和结构的人才数据集。通过理解和恰当地应用这些方法,可以提高机器学习模型的可靠性和准确性,最终带来更好的性能和更深入的结果。
|