sklearn的RidgeCV选项的差异

时间:2015-04-30 18:05:00

标签: python scikit-learn

对于在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。其他值与“特征”情况下的情况相同,这是预期的。

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

在fit 3中,我理解应该是计算上更强的等效于0和1我至少匹配fit1的结果,但我不相信为什么。

我目前按顺序排列的理论是:

  1. 我对这些选项的理解有些不对。
  2. 当涉及到nan时,选择最佳参数时会发生一些不太合适的事情,例如fit1(虽然我不明白为什么这会影响fit3)
  3. 这是一个特别特殊的数据集,据我所知,由于功能相对较少,它可能不适合正则化。
  4. 别的。
  5. 有谁能帮我理解这里发生的事情?

1 个答案:

答案 0 :(得分:0)

我相信,这里发生了一些事情。

数据中存在相关结构,cv = 10不会随机播放。如果在使用boston, target = shuffle(boston, target, random_state=3)之前对数据进行洗牌,那么它似乎非常依赖于随机状态。

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

你怎么说NaN弹出来了,我再也没有看到它。 无论如何,我同意这里发生了一些奇怪的事情。随意在问题跟踪器上打开一个问题。