当前位置: 首页 > 面试题库 >

Scikit学习平衡子采样

方砚
2023-03-14
问题内容

我正在尝试为我的大型不平衡数据集创建N个平衡随机子样本。有没有一种方法可以简单地通过scikit-learn /
pandas来做到这一点,或者我必须自己实现它?任何指向此功能的代码的指针?

这些子样本应该是随机的,并且在我将每个样本送入非常大的分类器集合中的各个分类器时可以重叠。

在Weka中,有一个名为spreadsubsample的工具,在sklearn中是否有等效工具?
http://wiki.pentaho.com/display/DATAMINING/SpreadSubsample

(我知道加权,但这不是我想要的。)


问题答案:

这是我的第一个版本,似乎工作正常,可以随时复制或就如何提高效率提出建议(一般来说,我在编程方面有很长的经验,而使用python或numpy则没有那么长的经验)

函数创建单个随机平衡子样本。

编辑:子样本的大小现在对少数类进行了抽样,这可能应该更改。

def balanced_subsample(x,y,subsample_size=1.0):

    class_xs = []
    min_elems = None

    for yi in np.unique(y):
        elems = x[(y == yi)]
        class_xs.append((yi, elems))
        if min_elems == None or elems.shape[0] < min_elems:
            min_elems = elems.shape[0]

    use_elems = min_elems
    if subsample_size < 1:
        use_elems = int(min_elems*subsample_size)

    xs = []
    ys = []

    for ci,this_xs in class_xs:
        if len(this_xs) > use_elems:
            np.random.shuffle(this_xs)

        x_ = this_xs[:use_elems]
        y_ = np.empty(use_elems)
        y_.fill(ci)

        xs.append(x_)
        ys.append(y_)

    xs = np.concatenate(xs)
    ys = np.concatenate(ys)

    return xs,ys

对于试图通过Pandas DataFrame进行上述操作的任何人,您都需要进行一些更改:

  1. 更换np.random.shuffle用线

this_xs = this_xs.reindex(np.random.permutation(this_xs.index))

  1. 更换np.concatenate用线

xs = pd.concat(xs) ys = pd.Series(data=np.concatenate(ys),name='target')



 类似资料:
  • 从sklearn加载流行数字数据集。数据集模块,并将其分配给可变数字。 分割数字。将数据分为两组,分别命名为X_train和X_test。还有,分割数字。目标分为两组Y_训练和Y_测试。 提示:使用sklearn中的训练测试分割方法。模型选择;将随机_状态设置为30;并进行分层抽样。使用默认参数,从X_序列集和Y_序列标签构建SVM分类器。将模型命名为svm_clf。 在测试数据集上评估模型的准确

  • 问题内容: 在选择主成分数(k)时,我们选择k为最小值,以便保留例如99%的方差。 但是,在Python Scikit学习中,我不是100%确定等于“保留了99%的方差”吗?谁能启发?谢谢。 Python Scikit学习PCA手册在这里 http://scikit- learn.org/stable/modules/generation/sklearn.decomposition.PCA.htm

  • 我正在使用scikit-learn 0.14的GridSearchCV,但总是得到以下警告: /Library/Frameworks/epd 64 . framework/Versions/7.2/lib/python 2.7/site-packages/sk learn/grid _ search . py:706:deprecation warning:忽略GridSearchCV的附加参数!

  • 我正在解决“破解编码面试”中的以下问题:实现一个函数来检查二叉树是否平衡。平衡树是这样一种树:任何节点的两个子树的高度相差不会超过一个。 这本书的示例解决方案(复制如下)假设从节点发出的树是平衡的,如果(a)节点的左子树和右子树是平衡的;和(b)节点本身是平衡的。我在试图理解为什么会这样?以上两个条件的满足如何证明从节点发出的整个树是平衡的? 谢啦

  • 问题内容: 使用train_test_split()时如何获取数据的原始索引? 我所拥有的是以下 但这并没有给出原始数据的索引。一种解决方法是将索引添加到数据(例如),然后将其传递到内部,然后再次扩展。有没有更清洁的解决方案? 问题答案: Scikit learning在Pandas上的表现非常好,因此我建议您使用它。这是一个例子: 您可以直接在DataFrame / Series上调用任何sci

  • 先决条件 Numpy, Scipy IPython matplotlib scikit-learn (http://scikit-learn.org) 警告:从版本0.9(在2011年9月发布)起,scikit-learn导入路径从scikits.learn 改为 sklearn 3.5.1 加载样例数据集 首先,我们将加载一些数据来玩玩。我们将使用的数据是知名的非常简单的花数据鸢尾花数据集。 我