ml_sampler, 模型辅助随机抽样

分享于 

8分钟阅读

GitHub

  繁體 雙語
Model assisted random sampling.
  • 源代码名称:ml_sampler
  • 源代码网址:http://www.github.com/facebookincubator/ml_sampler
  • ml_sampler源代码文档
  • ml_sampler源代码下载
  • Git URL:
    git://www.github.com/facebookincubator/ml_sampler.git
    Git Clone代码到本地:
    git clone http://www.github.com/facebookincubator/ml_sampler
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/facebookincubator/ml_sampler
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    ml_sampler---模型辅助采样

    使用机器学习来获取'更佳'样本 !

    问题

    你希望在大量的人群中查找'有趣'东西,并且:

    • 这是个大量的''
    • 有几个有趣的东西
    • 我们的样本相关的误差栏相对于有趣的卷大
    • 我们没有几个有趣的例子
    • 很难知道有什么有趣的- 可以能需要用人来评估它
    • 人口随时间变化( 可能通过我们的干预)

    要点

    有时我们有关于我们要测量的人口的额外信息。 这种情况下我们可以利用这些信息来获取更准确的样本。 一个典型的例子是概率与大小( PPS ) 抽样的比例。 这里我们有关于每个潜在样本的相对重量的信息,并且可以利用这些信息来。

    如果我们决定在一个群体中找到'有趣'个体的数量? - 如果我们有一个产生与 P(interesting) 相关的分数的模型- 我们也应该能够使用这个信息 !

    我们可以将这些信息用于超越示例有趣的东西- - 然后为了在普通计算中减少。 记录 1 - ( 2x oversample,1/2 重量),记录 2 - ( 3x oversample,1/3 重量)。 记录N - ( 1/10 oversample,5x 重)

    在许多情况下,这可以减少与采样相关的错误( 横栏),同时提供和无偏估计'有趣'事件的普及。

    激励示例

    在对付垃圾邮件时,一个很有用的问题是'生态系统中垃圾邮件的总体流行是什么'。 当我们将垃圾邮件的总体普遍性提升到零时,我们会遇到一些有趣的度量挑战:

    • 我们手动查看这些项目,因此我们花费了大部分时间来查看( 浪费的努力)。
    • 我们可能会依赖垃圾邮件样本来决定如何最佳优先排序。 更多垃圾邮件示例帮助我们更加有效。 较低的总体普及率意味着我们很少有( false 底片) 来检查。
    • 抽样方法相关的误差线相对于估计的百分比大。 比如 1% ( +/- 0.5 %) vs 20% +/- 0.5 %). 减少与样本相关的误差栏有助于我们更自信地决定我们所做的决定。 当存在较大的类不平衡时,这一点尤其重要。

    ml_sampler---收益

    • 可以显著减少样本方差并增加'有趣'项的数量。
    • 为取样的填充生成无偏估计。
    • 利用现有的python 库( scipy & numpy ) 实现。

    演示

    我们演示了三种不同的取样方法。 在这个场景中,我们希望了解更广泛的人口中'正'示例的百分比。 每种方法都有不同的特性,我们将研究。 我们使用一个模型来分类'正'实例和一些已知的ROC性能( 更高的ROC AUC表示更好的模型)。 我们将演示每个方法在模型性能改变时的行为。 有关这里场景的更多详细信息,请参见各种偏差方法的比较。

    我们考虑以下抽样方法:

    • PPS样本- 与尺寸抽样的典型概率比例。 它不会从模型性能的改进中获益。 这是其他两种方法的比较点。 理想情况下,我们应该按照正常元素采样的百分比和出现的误差条件来 MATCH 方法。
    • 得分值- 与模型分数比例的示例。 如果成绩为 [1] == and score ==,我们应该将记录 [1] 采样为 sampled sampled,但记录的[1] 将是 weighted 1.0/2.
    • 分数频率- 尝试在模型分数中大致采取一致的样本- 这通常是上述两种方法之间的安全。 Prevalence 分析:当模型性能下降,且 ROC AUC points误差最小时,'评分值'具有较大的方差。 对于这个数据集,'评分频率'在模型性能之间产生了最佳。 Percent of Positive Samples 分析:'评分值'在抽样阳性示例中增加了最佳的百分比。 'Score分数'击败 PPS,但一般样例比'得分值"。

    示例用法

    
    
    
    
    import ml_sampler
    
    
    import numpy as np
    
    
    
    population_size = 1000000
    
    
    
    # assign different weights to each record
    
    
    impression_weights = np.random.exponential(scale=10, size=population_size)
    
    
    
    # some score that we magically assign
    
    
    scores = np.random.normal(scale=10, size=population_size)
    
    
    scores = [max(0.001, x) for x in scores] # scores need to be positive
    
    
    
    # in real life we would have to evaluate each sample manually or use an oracle
    
    
    # in this example we are just going to make is_positve correlate with scores
    
    
    is_positive = (scores * np.random.normal(scale=10, size=population_size) ) > 100
    
    
    
    sample_index, p_sample = ml_sampler.biased_sample(
    
    
     biases=scores,
    
    
     weights=impression_weights,
    
    
     num_samples=3000
    
    
    )
    
    
    
    # in real life we would have to evaluate each sample manually or with an oracle
    
    
    sample_is_positive = is_positive[sample_index]
    
    
    
    sample_impression_weights = impression_weights[sample_index]
    
    
    
    est_positive_volume = ml_sampler.estimator(sample_impression_weights,
    
    
     p_sample,
    
    
     sample_is_positive)
    
    
    
    

    扩展介绍示例

    模型辅助样例。

    比较各种偏差法的比较。

    要求

    ml_sampler需要numpy和 scipy。 使用 numpy 1.11.2和 scipy 0.18.1测试。

    安装

    
    
    
    
    # clone ml_sampler
    
    
    cd ml_sampler
    
    
    pip install -r requirements.txt
    
    
    python setup.py install
    
    
    
    

    ml_sampler的工作原理

    假设我们有一个分类器可以估计一个记录将是'有趣'的概率。 我们可以将这些信息用于超越示例有趣的东西,但是对于普通计算的目的来说减少了。

    在许多情况下,这可以减少与采样相关的错误( 横栏),同时提供和无偏估计'有趣'事件的普及。

    进一步的信息

    请看我们的文件,或者在示例/ 目录中的笔记本。

    这个仓库由 Spencer Beecher和 Emanuel Strauss共同合作。 特别感谢 Daniel Olmedilla。

    有关如何帮助的信息,请参阅贡献文件。

    许可证

    ml_sampler是bsd授权的我们还提供额外的专利授权。


    模式  sam  rand  随机