sklearn 的 RidgeCV 选项的差异

Differences in sklearn's RidgeCV options

我对在 RidgeCV 的某些论点下似乎大于预期的差异感到有点困惑。令我困惑的变体如下:

from sklearn.linear_model import RidgeCV
from sklearn.datasets import load_boston
from sklearn.preprocessing import scale 

boston = scale(load_boston().data)
target = load_boston().target

alphas = np.linspace(0,200)
fit0 = RidgeCV(alphas=alphas, store_cv_values=True, 
gcv_mode='eigen').fit(boston, target)
fit0.alpha_
#4.0816326530612246

alphas = np.linspace(0,200)
fit1 = RidgeCV(alphas=alphas, store_cv_values=True, gcv_mode='svd').fit(boston, target)
fit1.alpha_
#0.0

fit2 = RidgeCV(alphas=alphas, cv=10).fit(boston, target)
fit2.alpha_
#114.28571428571429

fit3 = RidgeCV(alphas=alphas, cv=len(target)).fit(boston, target)
fit3.alpha_
#0.0

在第一种情况下,fit0,使用gcv_mode='eigen',选择的alpha参数似乎总是alphas中的第一个非零alpha。

在fit1中,总是选择alpha=0,这有点奇怪,因为0关联的cv_value是nan。其他值与 'eigen' 情况下的情况相同,这是预期的。

在 fit2 中,我得到了我认为是最合理的答案,一个介于范围中间的值。显然,这部分是由折叠的随机分配决定的。

在 fit 3 中,我理解它应该是计算更密集的,相当于 0 和 1 我确实至少匹配 fit1 的结果,但我不相信为什么。

我目前的合理性排序的理论是:

  1. 我对这些选项的作用的理解有误。
  2. 当涉及 nan 时,选择最佳参数时会发生一些不太符合规范的事情,例如 fit1(尽管我不明白为什么这会影响 fit3)
  3. 这是一个特别特殊的数据集,据我所知,鉴于特征数量相对较少,它可能不是正则化的理想选择。
  4. 其他。

任何人都可以帮助我了解这里发生的事情吗?

我相信这里发生了几件事。

数据中存在关联结构,cv=10不打乱。如果在使用 boston, target = shuffle(boston, target, random_state=3) 之前打乱数据,它似乎非常依赖于随机状态。

我不知道为什么特征模式如此不同,可能是由于数据集问题,但我不确定。

你说哪里弹出NaN,我reproducing的时候没看到。 无论如何,我同意这里发生了一些奇怪的事情。随意在问题跟踪器上打开一个问题。