2017-09-26 154 views
0

我一直在閱讀kaggle中的幾個代碼,並且遇到了模糊的實現。直到今天,我從來不知道我們可以在模型的外部聲明一個變量。未知變量聲明

from sklearn.linear_model import LogisticRegression 
... 
model = LogisticRegression() 
.... 
model.loss = 0.01 
model.penalty = 'l1' 
model.l1_ratio = True 
model.alpha = 'auto' 
model.fit(x_train, y_train) 

我知道,在sklearn迴歸沒有任何除了懲罰這些參數的,我發現在sklearn本身另一個線性算法SGDClassifier,這實際上接受所有這些參數而是「損失」 ,'l1_ratio','alpha'的數據類型是不同的。我知道每個參數的描述以及爲什麼它們用於其他算法,但我無法理解此聲明背後的原因。不勝感激這個實現的任何解釋。謝謝。

+0

您可以使用此行爲鏈接任何文章,以便我們可以更好地瞭解爲什麼它被完成。從上面的代碼中,它沒有用(因爲它不會在sklearn的任何地方使用),除了易於更改算法。在這裏,我們可以將'model = LogisticRegression()'更改爲model = GradientBoostingClassifier(),而不必擔心再次聲明它們。只有模型的相關參數纔會發生變化,其餘部分只會在沒有任何影響的情況下出現。 –

回答

0

我認爲利用這種類型聲明的一種方法是讓代碼更加模塊化。像這樣:

def get_clf(clf_type,loss,penalty): 
    my_clf = clf_type 
    my_clf.loss = loss 
    my_clf.penalty = penalty 
    return my_clf 

現在這可以被視爲一個通用的函數,使您的代碼更模塊化。所以每當你需要創建一個分類,你可以致電:

model = get_clf(LogisiticRegression(),0.01,'l1') 

所以,即使你改變你的迴歸,你只需要改變上述單行。再次,這是關於編程的個人風格以及如何使用它的一切。有些人喜歡在定義本身中聲明參數,有些則明確地在你的問題中進行。

+0

我明白了,但是由於我們明確聲明和初始化這些變量,它們將如何在算法中使用。 –