pyspark按每个目标变量进行过采样

我想知道是否有任何方法可以使用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)

最后将所有数据框与所有工会并入

transformed_04_more_rows.unionAll(transformed_03_more_rows).unionAll(transformed_02_more_rows)

采样值我正在手动检查。例如,如果第四类有2000行,第二类有10行手动检查,并根据上面的代码提供相应的值16,12

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

我在下面看到了链接, Oversampling or SMOTE in Pyspark

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

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

iCMS 回答:pyspark按每个目标变量进行过采样

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

在每种情况下,

您都可以在字典中提供所需的样本分数,并在sampleBy中使用它,然后尝试一下。 要确定分数,您可以根据目标列进行聚合计数,将其归一化为(0,1)并对其进行调整。

本文链接:https://www.f2er.com/2011077.html

大家都在问