2017-04-10 7 views
1

StringIndexerを、私のデータセットの1000以上のカテゴリをランク付けする手段として使用して、相対頻度を示すインデックスを生成することを望んでいました。このインデックスをモデルの数値フィーチャとして使用できます。残念ながら、StringIndexは、デフォルトではインデックスにカテゴリを指定しているメタデータを保存しています。このモデルではインデックスにcategory variableを使用します。StringIndexerを使用して数値変数を生成する方法は?

これを無効にする方法はありますか?そのため、インデックス変数は数値変数として使用できますか?

編集:MLパイプラインのステージとして文字列インデクサーを使用しているため、データフレームを直接操作する必要がありません。また、私はこのパイプラインを保存してロードするので、カスタムデータトランスフォーマーは実用的ではないかもしれません。 Sparkが現在書かれているので、これは不可能だと思う。

答えて

4

データのインデックスを作成し、メタデータを置き換えることができます。のは、あなたのデータは次のようになりましょう:

import spark.implicits._ 
import org.apache.spark.ml.feature.StringIndexer 

val indexer = new StringIndexer().setInputCol("raw").setOutputCol("indexed") 

val df = Seq("a", "b", "b", "c", "c", "c").toDF("raw") 
val indexed = indexer.fit(df).transform(df) 

我々はNumericAttributeが必要になります:

import org.apache.spark.ml.attribute.NumericAttribute 

とメタデータ:

val meta = NumericAttribute.defaultAttr.withName("indexed").toMetadata 

最後に、私たちはasメソッドを使用してメタデータを置き換えることができます。

indexed.withColumn("indexed", $"indexed".as("indexed", meta)) 
関連する問題