2017-09-26 12 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

このタイプの宣言を利用する1つの方法は、コードをモジュール化することです。

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

私はそれを知っていますが、これらの変数を明示的に宣言して初期化するので、アルゴリズムでどのように使用されるのでしょうか。 –