【问题标题】:How does the ridge regressor in cross_val_score uses the alphas?cross_val_score 中的岭回归器如何使用 alpha?
【发布时间】:2020-10-05 13:01:14
【问题描述】:

下面有一些简单的岭回归算法的代码。该程序的重​​点是通过计算每个 alpha 的交叉 val 分数来检查哪个 alpha 值最适合在此回归中使用。我不明白的是它如何在 for 部分中选择 alpha?我的意思是,我知道它会遍历该日志空间中的每个 alpha,但是 ridge = Ridge(normalize=True) 没有任何 alpha 参数,所以为什么不每次都使用默认参数(alpha=1.0) ?在 cross_val_score 函数中,它只是调用岭回归器,根本没有指定前面定义的 ridge.alpha 变量。

alpha_space = np.logspace(-4, 0, 50)
ridge_scores = []
ridge_scores_std = []

#Create a ridge regressor: ridge
ridge = Ridge(normalize=True)

# Compute scores over range of alphas
for alpha in alpha_space:

# Specify the alpha value to use: ridge.alpha
ridge.alpha = alpha

# Perform 10-fold CV: ridge_cv_scores
ridge_cv_scores = cross_val_score(ridge,X,y,cv=10)

# Append the mean of ridge_cv_scores to ridge_scores
ridge_scores.append(np.mean(ridge_cv_scores))

# Append the std of ridge_cv_scores to ridge_scores_std
ridge_scores_std.append(np.std(ridge_cv_scores))

【问题讨论】:

  • 这应该是一个工作代码吗?你能正确设置缩进吗?但是是的,您需要输入 alpha
  • 是的,这段代码在我编译和运行它时确实有效,它给不同的 alpha 提供了不同的结果,但我不明白如何。

标签: python function regression


【解决方案1】:

原因在于以下代码行:

# Specify the alpha value to use: ridge.alpha
ridge.alpha = alpha

岭实例,初始化:

ridge = Ridge(normalize=True)

有一个内部的 'alpha' 属性,您可以通过不同的方式设置和更改它。一种方法是您似乎熟悉的方法,即在启动 Ridge 时指定 alpha 参数,例如:

ridge1 = Ridge(alpha=0.5, normalize=True)

另一种方法,即您发布的代码中使用的方法,是在 不指定 alpha 的情况下初始化岭,然后在以后设置/指定它。如何?通过 Ridge 的内部属性称为 'alpha'。如您所知,要访问类的属性,您需要使用点符号。

所以这样做:

ridge2 = Ridge(normalize=True)
ridge2.alpha = 0.5

您正在实现与 ridge1 实例相同的效果。这就是它在 for 循环中的工作方式。通过在 ridge.alpha 上设置一个新值,山脊实例的“内部”alpha 值实际上会发生变化。

希望对你有帮助,否则我可以试着画个图来进一步说明。

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2017-02-12
    • 2022-07-15
    • 2016-11-28
    • 2012-10-07
    相关资源
    最近更新 更多