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

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