2015-05-30 66 views
1

我有一個機器學習算法,它涉及一系列步驟,例如清理數據,準備訓練數據等。每個步驟都存儲在python類的單獨方法中。我想知道構建我的類的最佳實踐方式是如何在類實例化時自動執行這些步驟。實例化時自動調用Python類方法的最佳方式

這是我所做的(代碼是說明性的,但這種方法適用於真正的算法)。它感覺有點笨重。有沒有更優雅的方式?

class Kaggle(): 
    """ 
    An algorithm 
    """ 

    def __init__(self): 
     self.bar = 1 

    def step_one(self, some_text_data): 
     self.bar = 1 ** 2 
     # Do some data cleaning 
     # return processed data 

    def step_two(self): 
     foo = step_one(baz) 
     # do some more processing 

    def step_three(self): 
     bar = step_two() 
     # output results 

    def run(self): 
     self.step_one() 
     self.step_two() 
     self.step_three() 

if __name__ == "__main__": 
    kaggle = Kaggle() 
    kaggle.run() 
+0

把他們都在'__init__'方法 –

+0

你代碼看起來相當乾淨,不言自明。易於閱讀,非常清晰。它有什麼「笨拙的」? –

+0

@EwanMellor必須手動調用'run()'方法。 –

回答

3

如果你的目標是該對象是「在類實例化自動執行」,只是把self.run()INIT

def __init__(self): 
    self.bar = 1 
    self.run() 
2

把所有的電話放在你的__init__方法中。這不是你想要達到的目標嗎?您可以添加一個帶有默認值的標誌,如果您願意,您可以不運行測試。

def __init__(self, runtests=True): 
    self.bar = 1 
    if runtests: 
     self.step_one() 
     self.step_two() 
     self.step_three() 
+0

我喜歡這種方法。我認爲接受的答案應該是最有效的(特別是因爲這是在ML上下文中) - 在init方法中調用step方法還是在init方法中調用的單獨方法中更快(如in @ Alexander的解決方案如下)? –

+1

如果還想在初始化後一起運行測試,最好在'__init__'中調用run方法以避免重複構成完整測試集。 –

相關問題