2

私はScalaに取り組んでいます。大きな質問があります。ChiSqSelector は次元を正常に削減しているようですが、どの機能が削減され、どの機能が残っているかを特定できません。どの機能が削減されたかを知るにはどうすればよいですか?

[WrappedArray(a, b, c),(5,[1,2,3],[1,1,1]),(2,[0],[1])]
[WrappedArray(b, d, e),(5,[0,2,4],[1,1,2]),(2,[1],[2])]
[WrappedArray(a, c, d),(5,[0,1,3],[1,1,1]),(2,[0],[1])]

PS: テスト データを機能選択された列車データと同じにしたいとき、scala でそれを行う方法がわからないことがわかりました。

4

1 に答える 1

2

のMLlibバージョンを使用すると、次のChiSqSelectorことが可能になりselectedFeaturesます。

mllibModel: org.apache.spark.mllib.feature.ChiSqSelectorModel = ???
val features: Array[Int] = mllib.selectedFeatures

それにもかかわらず、テスト データを使用する場合は、トレーニング データセットでトレーニングされたセレクターを使用することをお勧めします。手動で選択する必要はありません。

val testData: RDD[org.apache.spark.mllib.linalg.Vector] = ???
mllibModel.transform(testData)

同じルールがMLバージョンにも適用されます。selectedFeaturesインデックスの配列を抽出するために使用できます。

val mlModel: org.apache.spark.ml.feature.ChiSqSelectorModel = ???
val features: Array[Int] = mlModel.selectedFeatures

ただし、モデルを保持して新しいデータで再利用することをお勧めします。

val testData: RDD[org.apache.spark.sql.DataFrame] = ???
mlModel.transform(testData)

人間が読める機能のリストが必要な場合は、Spark で列にカテゴリとしてタグ付けするに示すように、変換後に列のメタデータを分析できます。

于 2016-03-09T09:12:05.593 に答える