pyspark需要澄清logisticregression中的标签索引

pu3pd22g  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(538)

我正在使用pyspark 2.4.5。
我有spark dataframe,有x个特性。我有我的目标标签与3类“高”,“中”,“低”。
在建立逻辑回归模型之前,我正在做标签索引。
到目前为止还不错。
我有什么问题?每当我想做模型建设我做标签索引。每次我做标签索引时,pyspark都会对索引进行洗牌。对于第一次运行,当目标标签值为“高”时,如果下次指定0时它被指定为1。
我需要什么帮助?我需要一个解决方案,以便总是我的目标标签值必须指定为high:2. 为了medium:1 and 为了low:2
我想到的解决方案没有使用标签索引,我可以创建一个新的列,并根据我的需要Map目标值。我们可以这样做吗?当我预测分数时,我可以考虑与我在培训期间所做的相同Map吗
如果标签索引是唯一的方式,那么任何参考链接将如何有帮助。我总是希望将标签索引Map为high:2. 为了medium:1 and 为了low:2
任何解决方案或参考链接将非常有用

wnvonmuf

wnvonmuf1#

您可以创建基于规则的列-

df.withColumn("label_index", expr("case when(label='High') then 2 when(label='Medium') then 1 else 0 end"))
nkkqxpd9

nkkqxpd92#

字符串索引器根据频率分配值。可能是在每次运行过程中随机分割,您的样本是不同的目标标签。最好的方法是在预测过程中使用indextostring()。
因此,您可以在培训时保存字符串索引器模型,并在preidction期间使用它。不管指定的整数是什么,你都会得到高、低、中的预测值。

ind_str = IndexToString(inputCol='prediction',outputCol='pred_label',labels=pipeline_label.stages[0].labels)

在上述案例中,我在培训期间储存了管道。因此,在预测过程中,我将管道加载回,并使用管道的阶段0,即stringindexer。
同样的情况也可以在没有管道的情况下通过模型来实现

相关问题