VectorIndexer:对类别特征进行索引然后将原始特征值转换为索引。索引后的类别特征可以帮助决策树等算法恰当的处理类别型特征,并得到较好结果。
def VectorIndexerTest(): Unit = {
import org.apache.spark.ml.feature.VectorIndexer
val spark: SparkSession = SparkSession.builder().appName("implicits").master("local[2]").getOrCreate()
val data = spark.read.format("libsvm").load("F:/sparkData/mllib/sample_libsvm_data.txt")
val indexer = new VectorIndexer()
.setInputCol("features")
.setOutputCol("indexed")
//定义输入输出列和最大类别数为10,某一个特征
//(即某一列)中多于10个取值视为连续值
.setMaxCategories(10)
val indexerModel = indexer.fit(data)
val categoricalFeatures: Set[Int] = indexerModel.categoryMaps.keys.toSet
println(s"Chose ${categoricalFeatures.size} " +
s"categorical features: ${categoricalFeatures.mkString(", ")}")
// 创建新的“索引”列,并将分类值转换为索引
val indexedData = indexerModel.transform(data)
indexedData.show()
}