gpt4 book ai didi

python - 带有 SVM 的 GridSearch 产生 IndexError

转载 作者:行者123 更新时间:2023-11-30 08:54:27 25 4
gpt4 key购买 nike

我正在使用 SVM 构建分类器,并希望执行网格搜索来帮助自动查找最佳模型。代码如下:

from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.multiclass import OneVsRestClassifier

X.shape # (22343, 323)
y.shape # (22343, 1)

X_train, X_test, y_train, y_test = train_test_split(
X, Y, test_size=0.4, random_state=0
)

tuned_parameters = [
{
'estimator__kernel': ['rbf'],
'estimator__gamma': [1e-3, 1e-4],
'estimator__C': [1, 10, 100, 1000]
},
{
'estimator__kernel': ['linear'],
'estimator__C': [1, 10, 100, 1000]
}
]

model_to_set = OneVsRestClassifier(SVC(), n_jobs=-1)
clf = GridSearchCV(model_to_set, tuned_parameters)
clf.fit(X_train, y_train)

我收到以下错误消息(这不是整个堆栈跟踪。只是最后 3 个调用):

----------------------------------------------------
/anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py in split(self, X, y, groups)
88 X, y, groups = indexable(X, y, groups)
89 indices = np.arange(_num_samples(X))
---> 90 for test_index in self._iter_test_masks(X, y, groups):
91 train_index = indices[np.logical_not(test_index)]
92 test_index = indices[test_index]

/anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py in _iter_test_masks(self, X, y, groups)
606
607 def _iter_test_masks(self, X, y=None, groups=None):
--> 608 test_folds = self._make_test_folds(X, y)
609 for i in range(self.n_splits):
610 yield test_folds == i

/anaconda/lib/python3.5/site-packages/sklearn/model_selection/_split.py in _make_test_folds(self, X, y, groups)
593 for test_fold_indices, per_cls_splits in enumerate(zip(*per_cls_cvs)):
594 for cls, (_, test_split) in zip(unique_y, per_cls_splits):
--> 595 cls_test_folds = test_folds[y == cls]
596 # the test split can be too big because we used
597 # KFold(...).split(X[:max(c, n_splits)]) when data is not 100%

IndexError: too many indices for array

此外,当我尝试 reshape 数组以使 y 为 (22343,) 时,我发现即使我将tuned_pa​​rameters 仅设置为默认值,GridSearch 也永远不会完成。

如果有帮助的话,这里是所有软件包的版本:

Python:3.5.2

scikit 学习:0.18

Pandas :0.19.0

最佳答案

看来你的实现没有错误。

但是,正如 sklearn 文档中提到的,“拟合时间复杂度大于样本数量的二次方,这使得很难扩展到具有多个的数据集>10000 样本”。 See documentation here

就您而言,您有 22343 样本,这可能会导致一些计算问题/内存问题。这就是为什么当您制作默认简历时需要花费大量时间。尝试使用 10000 个或更少的样本来减少训练集。

关于python - 带有 SVM 的 GridSearch 产生 IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39902562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com