Feature Selectors 1: VectorSlicer

Feature Selectors 1: VectorSlicer

简介

VectorSlicer是一个转换器输入特征向量,输出原始特征向量子集。VectorSlicer接收带有特定索引的向量列,通过对这些索引的值进行筛选得到新的向量集。可接受如下两种索引:

1、整数索引—代表向量中特征的的索引,setIndices()
2、字符串索引—代表向量中特征的名字,这要求向量列有AttributeGroup,因为这根据Attribute来匹配名字字段

    指定整数或者字符串类型都是可以的。另外,同时使用整数索引和字符串名字也是可以的。同时注意,至少选择一个特征,不能重复选择同一特征(整数索引和名字索引对应的特征不能叠)。注意如果使用名字特征,当遇到空值的时候将会报错。
    输出向量将会首先按照所选的数字索引排序(按输入顺序),其次按名字排序(按输入顺序)。

代码

    val spark = SparkSession
    .builder()
    .appName("learn")
    .master("local")
    .getOrCreate()
    
    val data = Arrays.asList(
      Row(Vectors.sparse(3, Seq((0, -2.0), (1, 2.3)))),
      Row(Vectors.dense(-2.0, 2.3, 0.0))
    )
    
    val defaultAttr = NumericAttribute.defaultAttr
    val attrs = Array("f1", "f2", "f3").map(defaultAttr.withName)
    val attrGroup = new AttributeGroup("userFeatures", attrs.asInstanceOf[Array[Attribute]])
    
    val dataset = spark.createDataFrame(data, StructType(Array(attrGroup.toStructField())))
    
    val slicer = new VectorSlicer().setInputCol("userFeatures").setOutputCol("features")
    
    slicer.setIndices(Array(1)).setNames(Array("f3"))
    // or slicer.setIndices(Array(1, 2)), or slicer.setNames(Array("f2", "f3"))
    
    val output = slicer.transform(dataset)
    output.show(false)  
+--------------------+-------------+
|userFeatures        |features     |
+--------------------+-------------+
|(3,[0,1],[-2.0,2.3])|(2,[0],[2.3])|
|[-2.0,2.3,0.0]      |[2.3,0.0]    |
+--------------------+-------------+

本文来自 行者小朱 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u012050154/article/details/60766387?utm_source=copy

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章