特征变化--->特征向量中部分特征到类别索引的转换(VectorIndexer)

VectorIndexer:

倘若所有特征都已经被组织在一个向量中,又想对其中某些单个分量进行处理时,Spark ML提供了VectorIndexer类来解决向量数据集中的类别性特征转换。

通过为其提供maxCategories超参数,它可以自动识别哪些特征是类别型的,并且将原始值转换为类别索引。它基于不同特征值的数量来识别哪些特征需要被类别化,那些取值可能性最多不超过maxCategories的特征需要会被认为是类别型的。

package Spark_MLlib

import org.apache.spark.ml.feature.VectorIndexer
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.SparkSession


object 特征变换_VectorIndexer {
  val spark=SparkSession.builder().master("local[2]").appName("IndexToString").getOrCreate()
  import spark.implicits._

  def main(args: Array[String]): Unit = {
    val data=Seq(
      Vectors.dense(-1,1,1,8,56),
      Vectors.dense(-1,3,-1,-9,88),
      Vectors.dense(0,5,1,10,96),
      Vectors.dense(0,5,1,11,589),
      Vectors.dense(0,5,1,11,688)

    )
    val df=spark.createDataFrame(data.map(Tuple1.apply)).toDF("features")
    val indexer= new VectorIndexer().setInputCol("features").setOutputCol("indexed").setMaxCategories(4)  //那些取值可能性最多不超过maxCategories的特征会被认为是类别型的,进而将原始值转换为类别索引
    val indexer_model=indexer.fit(df)
    val categoricalFeatures= indexer_model.categoryMaps.keys.toSet
    println(s"Chose ${categoricalFeatures.size} categorical features: " + categoricalFeatures.mkString(", "))
   val indexed=indexer_model.transform(df)
    indexed.show(false)

  }
}

结果:

Chose 4 categorical features: 0, 1, 2, 3

+-------------------------+-----------------------+
|features                 |indexed                |
+-------------------------+-----------------------+
|[-1.0,1.0,1.0,8.0,56.0]  |[1.0,0.0,1.0,1.0,56.0] |
|[-1.0,3.0,-1.0,-9.0,88.0]|[1.0,1.0,0.0,0.0,88.0] |
|[0.0,5.0,1.0,10.0,96.0]  |[0.0,2.0,1.0,2.0,96.0] |
|[0.0,5.0,1.0,11.0,589.0] |[0.0,2.0,1.0,3.0,589.0]|
|[0.0,5.0,1.0,11.0,688.0] |[0.0,2.0,1.0,3.0,688.0]|
+-------------------------+-----------------------+

转载于:https://www.cnblogs.com/soyo/p/7763845.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值