【问题标题】:unknown variable declaration未知变量声明
【发布时间】:2018-03-07 06:30:05
【问题描述】:

我一直在阅读 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' 数据类型不同。我知道每个参数的描述以及为什么在其他算法中使用它们,但我无法理解这个声明背后的原因。非常感谢对此实现的任何解释。谢谢。

【问题讨论】:

  • 您能否链接任何使用此行为的文章,以便我们更好地了解其原因。从上面的代码中,它没有用(因为它不会在 sklearn 中的任何地方使用),除了易于更改算法。在这里,我们只需将 model = LogisticRegression() 更改为 model = GradientBoostingClassifier() 而不必担心再次声明它们。只有模型的相关参数会被改变,其余的只会在那里,没有任何影响。

标签: python scikit-learn logistic-regression


【解决方案1】:

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

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')

所以即使你改变你的回归量,你只需要改变上面的单行。同样,这完全取决于个人的编程风格以及人们如何习惯它。有些人喜欢在定义本身中声明参数,而有些人喜欢在你的问题中明确地这样做。

【讨论】:

  • 我明白了,但是由于我们明确声明和初始化这些变量,它们将如何在算法中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多