2016-12-19 24 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是按值調用的。通過共享呼叫 意味着語言中的值基於對象而不是基本類型,即所有值都是「盒裝的」。

通過共享呼叫的語義從呼叫相差在於 分配給該函數內函數參數參考不可見 給調用者(不像通過引用語義)[編輯],所以 例如如果傳遞了一個變量,則不可能在調用者的作用域中模擬該變量的 賦值。但是,由於 函數可以訪問與調用者相同的對象(不會創建副本 ),因此對於這些對象的突變(如果對象可變),在 之內,函數對調用者可見,這可能看起來不同 來自按值調用的語義。調用程序可以看到 函數中可變對象的突變,因爲該對象不會被複制或被克隆 - 它是共享的。

相關問題