如果作为参数传递,机器学习模型是否会被更改?

时间:2016-12-19 19:29:14

标签: python machine-learning scikit-learn

我正在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是如何更改的,因此令人困惑。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

是的,传递给该函数的模型对象是可变的,并且由fit方法进行了变异。 Python的评估策略是call-by-sharing,因此更改将反映在调用者中。

  

通过共享进行呼叫(也称为按对象呼叫或通过呼叫进行呼叫)   对象共享)是一种首先由Barbara命名的评估策略   Liskov等。对于1974年的CLU语言。[5]它被语言使用   例如Python,[6] Iota,[7] Java(用于对象引用),Ruby,   JavaScript,Scheme,OCaml,AppleScript等等。然而   术语"通过分享呼叫"不常用;术语是   不同来源不一致。例如,在Java中   社区,他们说Java是按价值呼叫的。通过分享来电话   意味着语言中的值基于对象而不是   原始类型,即所有值都是"盒装"。

     

共享呼叫的语义不同于参考呼叫   函数内函数参数的赋值是不可见的   调用者(与引用语义不同)[引用需要],所以   例如如果传递了变量,则无法模拟变量   在呼叫者的范围内对该变量进行分配。但是,自从   function可以访问与调用者相同的对象(没有副本   如果对象是可变的,那些对这些对象的突变   该函数对调用者可见,这看起来可能不同   来自价值语义的调用。一个可变对象的突变   函数对调用者可见,因为该对象未被复制或   克隆 - 它是共享的。