Apache spark 在分类特征的stringindex之后进行VectorIndex有意义吗?

Apache spark 在分类特征的stringindex之后进行VectorIndex有意义吗?,apache-spark,machine-learning,Apache Spark,Machine Learning,假设我的数据框架中有一堆分类字符串列。然后我做以下转换: 列索引 然后,我使用VectorAssembler将所有转换的列组装成一个向量特征列 在“新矢量要素”列上执行矢量索引器 问题:对于第3步,它是否有意义,或者是重复的工作?我认为第1步已经完成了索引。是的,如果您打算使用基于火花树的算法(RandomForestClassifier或GBMClassizer),并且具有高基数特性,那么这是有意义的 例如,对于StringIndexer,将分类列中的值转换为1到65000范围内的整数。它将

假设我的数据框架中有一堆分类字符串列。然后我做以下转换:


  • 列索引
  • 然后,我使用VectorAssembler将所有转换的列组装成一个向量特征列
  • 在“新矢量要素”列上执行矢量索引器

  • 问题:对于第3步,它是否有意义,或者是重复的工作?我认为第1步已经完成了索引。

    是的,如果您打算使用基于火花树的算法(RandomForestClassifier或GBMClassizer),并且具有高基数特性,那么这是有意义的

    例如,对于StringIndexer,将分类列中的值转换为1到65000范围内的整数。它将把它保存在元数据中作为NominalAttribute。然后在rf分类器中,它将作为分类特征

    对于基于树的算法,您必须指定

    任何分类功能中的类别数必须大于等于2且大于等于


    过高的
    maxBins
    参数将导致性能降低。要解决此问题,需要将
    vectoridexer
    一起使用。例如,setMaxCategories(64)
    。这将仅将那些根据spark ml关于决策树的文档具有的变量视为分类变量,其中有一行描述了ml和mllib之间的差异,这里我引用
    使用数据帧元数据来区分连续和分类特征,我认为第3步的重要性。