【问题标题】:AttributeError: 'numpy.ndarray' object has no attribute '_iter_test_masks' [closed]AttributeError:“numpy.ndarray”对象没有属性“_iter_test_masks”[关闭]
【发布时间】:2020-11-17 16:50:40
【问题描述】:

我正在尝试使用 sklearn GridSearchCV 执行 K 折交叉验证来选择用于 KernelDensity 估计的带宽。

当我实现grid.fit(data) 时,我收到错误:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\mubar\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sklearn\utils\validation.py", line 73, in inner_f
    return f(**kwargs)
  File "C:\Users\mubar\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sklearn\model_selection\_search.py", line 736, in fit
    self._run_search(evaluate_candidates)
  File "C:\Users\mubar\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sklearn\model_selection\_search.py", line 1188, in _run_search
    evaluate_candidates(ParameterGrid(self.param_grid))
  File "C:\Users\mubar\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sklearn\model_selection\_search.py", line 714, in evaluate_candidates
    in product(candidate_params,
  File "C:\Users\mubar\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sklearn\model_selection\_split.py", line 80, in split
    for test_index in self._iter_test_masks(X, y, groups):
AttributeError: 'numpy.ndarray' object has no attribute '_iter_test_masks'

这是我的代码:

import numpy as np
from sklearn.model_selection import GridSearchCV, LeaveOneOut

train = np.random.rand(12,2)
target = np.array([0,0,1,2,3,3,3,4,5,5,6,6])

bw = np.linspace(0.01,0.1,10)
grid = GridSearchCV(KernelDensity(kernel='gaussian'),
                    {'bandwidth': bw},
                    cv=LeaveOneOut)
grid.fit(train,target[:,None])

【问题讨论】:

  • 为什么是target[:,None](尽管问题仍然存在,即使只是target)?
  • 只是为了使数组成为二维的,正如我在其他示例中看到的那样,但你是对的,没有必要。

标签: numpy scikit-learn cross-validation kernel-density gridsearchcv


【解决方案1】:

您只是忘记在您的 GridSearchCV 定义中实例化 LeaveOneOut 交叉验证器。

train = np.random.rand(12,2)
target = np.array([0,0,1,2,3,3,3,4,5,5,6,6])

bw = np.linspace(0.01,0.1,10)
grid = GridSearchCV(KernelDensity(kernel='gaussian'),
                    {'bandwidth': bw},
                    cv=LeaveOneOut() # <-- typo was here
)

grid.fit(train,target[:,None])

这将解决问题。

【讨论】:

  • 不错的收获(我自己没抓住)。
猜你喜欢
  • 2020-12-03
  • 2020-11-29
  • 2020-10-06
  • 2018-01-25
  • 2016-06-29
  • 2020-03-25
  • 2013-12-07
  • 2017-10-16
  • 2020-02-23
相关资源
最近更新 更多