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:當我想使測試數據相同功能選擇火車的數據,我發現,我不知道怎麼做,在斯卡拉。

回答

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) 

如果你想要的功能,人類可讀的列表,你可以分析轉換後的列元數據如下所示Tagging columns as Categorical in Spark

+0

不,我的意思是我可以使用chisqModel.transform(testData)如果測試數據沒有標籤? – Rick

+0

檢查答案中的類型:) – zero323

+0

如果它幫助只是upvote /接受答案:) – zero323