【问题标题】:pyspark oversample classes by every target variablepyspark 通过每个目标变量对类进行过采样
【发布时间】:2020-10-23 10:30:50
【问题描述】:

我想知道是否有任何方法可以使用 pyspark 对数据进行过采样。

我有 10 个类的目标变量的数据集。截至目前,我正在参加每个班级并像下面这样进行过采样以匹配

transformed_04=transformed.where(F.col('nps_score')==4)
transformed_03=transformed.where(F.col('nps_score')==3)
transformed_02=transformed.where(F.col('nps_score')==2)
transformed_01=transformed.where(F.col('nps_score')==1)
transformed_00=transformed.where(F.col('nps_score')==0)

transformed_04_more_rows=transformed_04.sample(True,11.3,9)
transformed_03_more_rows=transformed_03.sample(True,16.3,9)
transformed_02_more_rows=transformed_03.sample(True,12,9)

最后用 union all 加入所有数据帧

transformed_04_more_rows.unionAll(transformed_03_more_rows).unionAll(transformed_02_more_rows)

我正在手动检查采样值。例如,如果第 4 类有 2000 行,而第 2 类有 10 行,则手动检查并相应地提供值 16,12,如上面代码中提供的那样

请原谅我提到的代码不完整。只是为了给出我提出的观点。我想知道 pyspark 中是否有像 SMOTE 这样的自动化方式。

我看过下面的链接, Oversampling or SMOTE in Pyspark

它说我的目标类必须只有两个。如果我删除条件,它会给我带来一些数据类型问题

任何人都可以帮助我在 pyspark 中检查每个类并提供采样值的实现非常痛苦,请帮助

【问题讨论】:

    标签: python pyspark sampling apache-spark-ml oversampling


    【解决方案1】:

    查看 spark 的 sampleBy 函数,这使我们能够分层采样。 https://spark.apache.org/docs/2.4.0/api/python/pyspark.sql.html?highlight=sampleby#pyspark.sql.DataFrame.sampleBy

    对于每个类,您可以在字典中提供您想要的样本分数并在 sampleBy 中使用它,试试看。 要确定分数,您可以根据目标列进行聚合计数,归一化为 (0,1) 并对其进行调整。

    【讨论】:

    • 谢谢 raghu :)。 sampled = dataset.sampleBy("key", fractions={0: 0.1, 1: 0.2}, seed=0) 在这里他们告诉类/键 0 它是 0.1 和类/键 0.2 所以我应该如何考虑这个百分比?如果我需要将第 10 课重复 20 次,我应该给 0.2 或 2.0 吗?
    • 啊,现在我明白了.. 目前 pyspark 仅支持 (0,1) 范围内的采样。只是一个 hack-sample 2 次(可能在一个循环中),其中 1 用于需要的类,0 用于其他类并将它们联合起来。顺便说一句,indextostring 方法成功了吗?
    • 其实我也卡在那里了。我在此阶段使用随机森林来获取特征重要性标签索引已使用 stringIndex 形成。在获得特征重要性之后。我正在构建 lr 模型。在此阶段,当我尝试通过将 labe_indexer 作为参数传递给 pipeline 来构建管道时。它向我抛出错误标签列已经存在
    • 只是一个 hack-sample 2 次(可能在一个循环中),其中 1 用于需要的类,0 用于其他类并将它们联合起来。顺便说一句,indextostring 方法是否有效。这个我不明白。我是否应该使用 0.2/0.1 值检查蛮力以匹配更高的分数
    • df.select(list(set(df.columns)))
    猜你喜欢
    • 2018-08-21
    • 2017-06-08
    • 2020-07-04
    • 2018-01-13
    • 2020-11-17
    • 1970-01-01
    • 2019-05-24
    • 2013-06-23
    • 2021-04-20
    相关资源
    最近更新 更多