未知变量声明

问题描述:

我一直在阅读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(),而不必担心再次声明它们。只有模型的相关参数才会发生变化,其余部分只会在没有任何影响的情况下出现。 –

我认为利用这种类型声明的一种方法是让代码更加模块化。像这样:

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

我明白了,但是由于我们明确声明和初始化这些变量,它们将如何在算法中使用。 –