2016-01-11 50 views
2

我有一組的N個數據點X = {X 1 ,...,X Ñ}和一組N個目標值/類ÿ = {y ,...,y n}。考慮到「窗口」(缺少更好的術語)的數據點(例如,數據點),構建給定的特徵向量。我可能要堆疊 「的最後4個數據點」,即,x I-4,X I-3,X I-2,X I-1用於Y 的預測。scikit學習定製變壓器/管道,改變X和Y

顯然,對於窗口大小爲4的這樣的特徵向量不能爲前三個目標值構建,我想簡單地刪除它們。同樣對於最後的數據點x n

這不會是一個問題,除非我想這是作爲sklearn管道的一部分發生的。到目前爲止,我已經成功地爲其他任務編寫了一些自定義變換器,但那些不能(據我所知)更改Y矩陣。

有沒有辦法做到這一點,我不知道或者我堅持做這個作爲管道外的預處理? (這意味着,我將無法使用GridsearchCV來查找最佳窗口大小和移位。)

我試過尋找這個,但是我想出的所有是this question,它處理從X矩陣。在那裏接受的答案讓我想到,我想要做的並不是scikit-learn支持的,但我想確保。

回答

2

你是對的,你不能在sklearn Pipeline內調整你的目標。這並不意味着你不能進行網格搜索,但這確實意味着你可能不得不以更多的手動方式去做。我會建議您編寫一個函數,在y上進行轉換和過濾,然後手動循環通過ParameterGrid創建的調整網格。如果這沒有意義,您可以使用代碼編輯您的帖子,以獲得進一步的幫助。

+0

看到示例庫是的,這就是我的意思。我不能將我的管道轉儲到一個GridSearchCV中,我發現這是執行CV最方便的方法。我相當肯定我可以讓它手動工作。謝謝 –

0

我正在努力解決類似的問題,並發現不幸的是,你不能傳遞變壓器之間的y值。話雖如此,我用一種骯髒的方式繞過了這個問題。

我將y值存儲爲變換器的實例屬性。這樣,當管道調用fit_transform時,我可以在transform方法中訪問它們。然後,變換方法傳遞下一個估計器預期的元組(X,self.y_stored)。這意味着我必須編寫包裝估算器,它非常難看,但它的工作原理!

0

我們開發了PipeGraph,這是一種管道擴展,允許用戶定義像Scikit-Learn對象鏈一樣的複雜圖形。特別是,它可以通過爲每個步驟定義適當的步驟鏈來解決變換任何變量的問題。你可以在https://mcasl.github.io/PipeGraph/auto_examples/index.html