PySpark中的分层交叉验证

PySpark中的分层交叉验证,pyspark,apache-spark-ml,Pyspark,Apache Spark Ml,我正在python中使用ApacheSparkAPI,PySpark(--3.0.0版),理想情况下,我希望以分层的方式执行标记数据的交叉验证,因为我的数据高度不平衡!我目前正在使用以下模块 来自pyspark.ml.tuning导入交叉验证程序 在scikit中,可以通过定义一个StratifiedKFold并将其放置在任何网格搜索函数的cv参数中来了解这一点。这确保了给定估计器训练的每个K倍都以比例代表的方式包含标记数据 PySpark中是否有类似的版本 我很想问Spark团队的这个问题,

我正在python中使用ApacheSparkAPI,PySpark(--3.0.0版),理想情况下,我希望以分层的方式执行标记数据的交叉验证,因为我的数据高度不平衡!我目前正在使用以下模块

来自pyspark.ml.tuning导入交叉验证程序
在scikit中,可以通过定义一个
StratifiedKFold
并将其放置在任何网格搜索函数的
cv
参数中来了解这一点。这确保了给定估计器训练的每个K倍都以比例代表的方式包含标记数据

PySpark中是否有类似的版本


我很想问Spark团队的这个问题,或者作为一个改进建议,但是他们既不允许bug报告也不允许改进建议,他们需要附带的源代码建议,这比我的技能稍高

我认为Spark ML目前不支持分层交叉验证

不过,您可以看看
火花分层器
。它是一个Spark ML分层交叉验证程序组件,几年前由HackerRank开源[1]。你可以看看

它可以通过运行
pip安装火花分层器
来安装

一些示例代码可以帮助您继续:

来自pyspark.ml导入管道
从pyspark.ml.linalg导入向量
从pyspark.ml.classification导入逻辑回归
从pyspark.ml.evaluation导入BinaryClassificationEvaluator
从pyspark.ml.tuning导入ParamGridBuilder
从pyspark.sql导入SparkSession
从spark_stratifier导入StratifiedCrossValidator
spark=SparkSession.builder.master(“本地”).getOrCreate()
data=spark.createDataFrame([
(1.0,向量密集([0.0,1.1,0.1]),
(0.0,向量密集([2.0,1.0,-1.0]),
(0.0,向量密集([2.0,1.3,1.0]),
(1.0,Vectors.dense([0.0,1.2,-0.5]),[“标签”,“特征])
lr=逻辑回归(最大值=10)
管道=管道(阶段=[lr])
paramGrid=ParamGridBuilder()\
.addGrid(lr.regParam[0.1,0.01])\
.build()
scv=分层交叉验证程序(
估算器=管道,
参数映射=参数网格,
evaluator=BinaryClassificationEvaluator(),
numFolds=2
)
模型=scv.fit(数据)

[1] :

我认为Spark ML目前不支持分层交叉验证

不过,您可以看看
火花分层器
。它是一个Spark ML分层交叉验证程序组件,几年前由HackerRank开源[1]。你可以看看

它可以通过运行
pip安装火花分层器
来安装

一些示例代码可以帮助您继续:

来自pyspark.ml导入管道
从pyspark.ml.linalg导入向量
从pyspark.ml.classification导入逻辑回归
从pyspark.ml.evaluation导入BinaryClassificationEvaluator
从pyspark.ml.tuning导入ParamGridBuilder
从pyspark.sql导入SparkSession
从spark_stratifier导入StratifiedCrossValidator
spark=SparkSession.builder.master(“本地”).getOrCreate()
data=spark.createDataFrame([
(1.0,向量密集([0.0,1.1,0.1]),
(0.0,向量密集([2.0,1.0,-1.0]),
(0.0,向量密集([2.0,1.3,1.0]),
(1.0,Vectors.dense([0.0,1.2,-0.5]),[“标签”,“特征])
lr=逻辑回归(最大值=10)
管道=管道(阶段=[lr])
paramGrid=ParamGridBuilder()\
.addGrid(lr.regParam[0.1,0.01])\
.build()
scv=分层交叉验证程序(
估算器=管道,
参数映射=参数网格,
evaluator=BinaryClassificationEvaluator(),
numFolds=2
)
模型=scv.fit(数据)

[1] :

由于我用PySpark 3.0.0编写了代码并安装了所有相关的依赖项,
spark stratifier
似乎不喜欢它,并抛出了一个与
Py4JError
相关的冗长错误。当我重新安装PySpark 3.0.0时,它也不起作用,因为我在PySpark 3.0.0中编写了代码并安装了所有相关的依赖项,
spark stratifier
似乎不喜欢它,并抛出了一个与
Py4JError
相关的长时间错误。当我重新安装PySpark 3.0.0时,它也不起作用