bootstrap: 普通非参数自助法用于任意参数

普通非参数自助法的实现,用于对单个统计量进行自助抽样(例如,均值、中位数、回归拟合的R^2等)。

> `from mlxtend.evaluate import bootstrap`

概述

自助法提供了一种简单有效的方式,通过模拟来估计统计量的分布,通过从现有样本中重复抽样(或生成)新样本。请注意,自助法并不需要对样本统计量或数据集的正态分布做出任何假设。

使用自助法,我们可以估计样本统计量并计算均值的标准误差和置信区间,仿佛我们是从一个无限总体中提取了多个样本。简单来说,自助法过程可以描述如下:

  1. 进行有放回的抽样
  2. 计算样本统计量
  3. 重复步骤1-2 n 次
  4. 计算标准差(统计量的均值标准误差)
  5. 计算置信区间

或者,简单地说,我们可以将自助法视为通过对原始数据集进行重抽样,从一个总体中提取潜在的无尽数量的新样本。

请注意,当前文献中“自助法重抽样”的术语使用得相当宽松;许多研究人员和从业者用它来定义我们从原始数据集中提取的自助法样本的数量。然而,在本文件和代码注释的上下文中,我们使用自助法重抽样的原始定义,并用其指代从自助法样本计算出的统计量。

参考文献

示例 1 -- 均值的自助法

这个简单的例子说明了如何通过自助法估计样本的均值。

import numpy as np
from mlxtend.evaluate import bootstrap


rng = np.random.RandomState(123)
x = rng.normal(loc=5., size=100)
original, std_err, ci_bounds = bootstrap(x, num_rounds=1000, func=np.mean, ci=0.95, seed=123)
print('Mean: %.2f, SE: +/- %.2f, CI95: [%.2f, %.2f]' % (original, 
                                                             std_err, 
                                                             ci_bounds[0],
                                                             ci_bounds[1]))

Mean: 5.03, SE: +/- 0.11, CI95: [4.80, 5.26]

示例 2 - 引导回归拟合

这个例子展示了如何在训练数据上引导回归拟合的 $R^2$ 值。

from mlxtend.data import autompg_data

from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

X, y = autompg_data()


lr = LinearRegression()

def r2_fit(X, model=lr):
    x, y = X[:, 0].reshape(-1, 1), X[:, 1]
    pred = lr.fit(x, y).predict(x)
    return r2_score(y, pred)


original, std_err, ci_bounds = bootstrap(X, num_rounds=1000,
                                         func=r2_fit,
                                         ci=0.95,
                                         seed=123)
print('Mean: %.2f, SE: +/- %.2f, CI95: [%.2f, %.2f]' % (original, 
                                                             std_err, 
                                                             ci_bounds[0],
                                                             ci_bounds[1]))

Mean: 0.90, SE: +/- 0.01, CI95: [0.89, 0.92]

API

bootstrap(x, func, num_rounds=1000, ci=0.95, ddof=1, seed=None)

Implements the ordinary nonparametric bootstrap

Parameters

Returns

Examples

>>> from mlxtend.evaluate import bootstrap
>>> rng = np.random.RandomState(123)
>>> x = rng.normal(loc=5., size=100)
>>> original, std_err, ci_bounds = bootstrap(x,
...                                          num_rounds=1000,
...                                          func=np.mean,
...                                          ci=0.95,
...                                          seed=123)
>>> print('Mean: %.2f, SE: +/- %.2f, CI95: [%.2f, %.2f]' % (original,
...                                                         std_err,
...                                                         ci_bounds[0],
...                                                         ci_bounds[1]))
Mean: 5.03, SE: +/- 0.11, CI95: [4.80, 5.26]
>>>

For more usage examples, please see https://rasbt.github.io/mlxtend/user_guide/evaluate/bootstrap/