VectorIndexer
VectorIndexer是一个Estimator,用来将某个一组数字类型的属性值转化成数字编码index,以便后续其他适用于数字编码的算法使用。多个属性值被组合成一个Vector字段作为输入。
在fit期间如果某一个属性中出现的属性值<=最大分组阈值,则该属性会被认为是离散属性(categorical feature)并进行编码,编码规则是对该属性每个出现的离散数值给出从0~离散数值数量-1的数字,属性数值越小,给出的编码数字就越小(和StringIndexer算法类似,但编码规则不同);属性值>分组阈值的属性被认为是连续属性(continuous feature),输出中将保留原数值。
在transform阶段,VectorIndexer并不像StringIndexer那样具备处理fit时没有碰到过的离散属性值(连续值不影响)或者Null值的能力,如果出现就会抛出 java.util.NoSuchElementException: key not found: xx
异常,后续spark应该会加上处理这些未知值的选项。
参数
- inputCol: 需要给出编码的属性组合后的向量属性名称
- outputCol: 编码后的属性名称 (默认值: vecIdx_######_output)
- maxCategories: 最大分组阈值 (默认值: 20)
model方法
- categoryMaps: 返回一个类型为Map[Int, Map[Double, Int]]的Map,最顶层的key是被编码的离散属性在整个输入属性向量中的编号,value也是一个Map,其中key为该属性中的属性值,value为该值被最终映射成的编码。
例子
1 | val data = Array( |