我有点困惑,在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参数似乎总是alpha中的第一个非零alpha。
在fit1中,总是选择alpha=0,这有点奇怪,因为与0相关的cv_value是nan。其他值与预期的"本征"情况下的值相同。
在fit2中,我得到了我认为是最合理的答案,一个介于区间中间的值。显然,这在一定程度上是由褶皱的随机分配决定的。
在fit3中,我知道它在计算上应该更密集,相当于0和1,我至少匹配了fit1的结果,但我不确定为什么。
我目前的可用性理论是:
- 我对这些选项的作用的理解有些不正确
- 当nan参与fit1的情况时,选择的最佳参数不太符合犹太规范(尽管我不明白为什么这会影响fit3)
- 这是一个特别特殊的数据集,我知道考虑到相对较少的特征,它可能不是正则化的好候选者
- 还有别的
有人能帮我了解这里发生了什么吗?
我相信这里正在发生一些事情。
数据中存在相关结构,cv=10不混洗。如果在使用boston, target = shuffle(boston, target, random_state=3)
之前对数据进行混洗,那么它似乎非常依赖于随机状态。
我不知道为什么特征模式如此不同,可能是由于数据集问题,但我不确定。
你说NaN在哪里弹出,我在繁殖时看不到。无论如何,我同意这里正在发生一些奇怪的事情。请随时在问题跟踪器上打开问题。