为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用spark-ml处理分类功能?

如何使用spark-ml处理分类功能?

弑天下 2019-11-28 13:42:59
如何使用 spark-ml 和不 处理分类数据spark-mllib?如果文档不是很清楚,似乎分类器(例如RandomForestClassifier)LogisticRegression具有一个featuresCol参数,该参数指定中的要素列的名称DataFrame,一个labelCol参数,其指定中的标记类的列的名称DataFrame。显然,我要在预测中使用多个特征,因此我尝试使用VectorAssembler将所有特征放在下的单个向量中featuresCol。但是,VectorAssembler仅接受数字类型,布尔类型和向量类型(根据Spark网站),因此我无法将字符串放入特征向量中。我应该如何进行?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

我将从另一个角度提供答案,因为我还想知道Spark ML(不是MLlib)中基于树的模型的分类功能,并且文档尚不清楚一切如何工作。

当您使用pyspark.ml.feature.StringIndexer额外的元数据转换数据框中的列时,该数据框中会存储额外的元数据,这些元数据专门将转换后的功能标记为分类功能。

当您打印数据框时,您将看到一个数字值(这是一个与类别值之一相对应的索引),如果您查看模式,您将看到新的转换列是type double。但是,您pyspark.ml.feature.StringIndexer.transform用来创建的新列不仅是普通的双列,而且还具有与之相关的额外元数据,这非常重要。您可以通过查看metadata数据框的架构中适当字段的属性来检查此元数据(可以通过查看yourdataframe.schema来访问数据框的架构对象)

这些额外的元数据有两个重要含义:

  1. 当您.fit()使用基于树的模型进行调用时,它将扫描数据帧的元数据,并识别您使用诸如转换器(例如,pyspark.ml.feature.StringIndexer如上所述)分类编码的字段(如上所述,还有其他转换器也将具有此效果,例如pyspark.ml.feature.VectorIndexer)。因此,在Spark ML中使用基于树的模型时,在用StringIndxer转换特征后,不必对特征进行一键热编码(但是,在使用其他不使用特征的模型时,仍必须进行一键热编码)自然地处理线性回归等类别。)

  2. 因为此元数据存储在数据帧中,所以您可以随时使用pyspark.ml.feature.IndexToString将数字索引恢复为原始分类值(通常是字符串)的方法。


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 783 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信