2016-08-22 20 views
1

我是ML新手,我正在使用Spark ml構建預測系統。我讀到,特徵工程的一個主要部分就是在做所需的預測時發現每個特徵的重要性。在我的問題中,我有三個分類特徵和兩個字符串特徵。我使用OneHotEncoding技術來轉換分類特徵,並使用簡單的HashingTF機制來轉換字符串特徵。然後,這些信息作爲管線的各個階段輸入,包括ml NaiveBayesVectorAssembler(將所有特徵組裝成一個列),分別使用訓練和測試數據集進行擬合和轉換。spark ml:如何找到功能重要性

一切都很好,除了我如何確定每個功能的重要性?我知道我現在只有少數功能,但我會盡快添加。我遇到的最接近的是ChiSqSelector spark ml模塊,但它似乎只適用於分類功能。

謝謝,任何線索讚賞!

+0

你可以開發一個特徵選擇基於信息增益,即在一個特徵向量和標籤向量之間的信息增益。我們的目標是選擇一些功能的子集,以最大化它們和標籤之間的信息增益,並最大限度地減少功能本身的信息增益。 GitHub上有幾個示例代碼。 –

+0

@ Umberto你能指點我一些這些例子嗎?非常感謝! – void

回答

2

使用ChiSqSelector是好的,您可以簡單地離散您的連續功能(HashingTF值)。一個例子是在提供:http://spark.apache.org/docs/latest/mllib-feature-extraction.html,我複製到這裏感興趣的部分:

// Discretize data in 16 equal bins since ChiSqSelector requires categorical features 
// Even though features are doubles, the ChiSqSelector treats each unique value as a category 
val discretizedData = data.map { lp => 
    LabeledPoint(lp.label, Vectors.dense(lp.features.toArray.map { x => (x/16).floor })) }