在字符串索引后对分类特征进行vecterindex是否有意义?

时间:2017-05-18 02:33:57

标签: apache-spark machine-learning

假设我的数据框中有一堆分类字符串列。然后我在下面进行转换:

  1. StringIndex列
  2. 然后我使用VectorAssembler将所有转换后的列组合成一个矢量要素列
  3. 在新的矢量要素列上执行VectorIndexer。
  4. 问题:对于第3步,是否有意义,还是重复工作?我认为第1步已经完成了索引。

1 个答案:

答案 0 :(得分:0)

是的,如果您要使用基于Spark树的算法(RandomForestClassifier或GBMClassifier)并且您具有高基数功能,那么这是有意义的。

E.g。 for criteo dataset StringIndexer会将分类列中的值转换为范围1到65000的整数。它会将此值作为NominalAttribute保存在元数据中。然后在RFClassifier中它将extract this from metadata作为分类特征。

对于基于树的算法,您必须指定<{1}} parameter

  

必须>&gt; = 2且&gt; =任何分类要素中的类别数。

maxBins参数太高会导致性能下降。要解决此问题,请将maxBinsVectorIndexer一起使用。这将仅将具有&lt; 64唯一值的那些变量视为分类变量。