未知变量声明
问题描述:
我一直在阅读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'的数据类型是不同的。我知道每个参数的描述以及为什么它们用于其他算法,但我无法理解此声明背后的原因。不胜感激这个实现的任何解释。谢谢。
答
我认为利用这种类型声明的一种方法是让代码更加模块化。像这样:
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
我明白了,但是由于我们明确声明和初始化这些变量,它们将如何在算法中使用。 –
您可以使用此行为链接任何文章,以便我们可以更好地了解为什么它被完成。从上面的代码中,它没有用(因为它不会在sklearn的任何地方使用),除了易于更改算法。在这里,我们可以将'model = LogisticRegression()'更改为model = GradientBoostingClassifier(),而不必担心再次声明它们。只有模型的相关参数才会发生变化,其余部分只会在没有任何影响的情况下出现。 –