2016-12-19 5 views
0

私はPythonで機械学習アルゴリズムを作成しています。 は、私が持っていると言う:パラメーターとして渡すと機械学習モデルが変更されますか?

alg = DecisionTreeClassifier(random_state=1) 

その後、私はフィット

def fit(X,Y,alg): 
    alg.fit(X,Y) 

関数を作成し、私のメインの中で、私はこの作品はウィル

fit(X, Y, alg) 
Y_pred = alg.predict(X_test) 

呼び出しますか?それとも、algは実際に外にフィットすることは決してありませんか?

私はこの質問How do I pass a variable by reference?を読んだことがありますが、変数algがどのように変更されたかわからないので、混乱しています。

ありがとうございました。

答えて

4

はい、その関数に渡すモデルオブジェクトは変更可能であり、fitメソッドで変更されています。 Pythonの評価方法はcall-by-sharingなので、変更は呼び出し元に反映されます。 (また、オブジェクトによってコールと呼ばまたは オブジェクトを共有することによって呼び出し)を共有することにより

コールはバーバラ リスコフらによって命名評価戦略です。 1974年の言語CLUのために。[5]これは、Python、[6] Iota、[7] Java(オブジェクト参照用)、Ruby、 JavaScript、Scheme、OCaml、AppleScriptなどの言語 で使用されています。しかし、 という用語は、「共有によって呼び出す」という言葉は一般的ではありません。さまざまな情報源に矛盾する用語が です。たとえば、Java コミュニティでは、Javaは値渡しであると言います。共有による呼び出し は、言語の値が プリミティブタイプではなくオブジェクトに基づいていること、つまりすべての値が「ボックス化」されていることを意味します。 (参照セマンティクスによって異なり)呼び出し元に

共有によるコールのセマンティクスは関数内の引数として機能すること 割り当てにおいて参照することにより呼び出し異なる見えない [要出典]、そう 例えば変数が渡された場合は、呼び出し元のスコープ内の変数に 割り当てをシミュレートすることはできません。しかし、 関数は呼び出し元と同じオブジェクトにアクセスできるため( はコピーされません)、これらのオブジェクトに対する変更は、オブジェクトが変更可能であれば、 内の関数は呼び出し側に表示され、 呼び出しによる値のセマンティクス。 関数内の変更可能なオブジェクトの突然変異は、オブジェクトがコピーされていないか、または が複製されているため、呼び出し元に表示されます。

関連する問題