sara_adam
sara_adam

Reputation: 63

GridSearchCV in scikit-learn(sklearn): TypeError: 'KFold' object is not iterable

I'm trying to find best values of C & gamma for SVR() estimator using GridSearchCV() but I get this error

TypeError: 'KFold' object is not iterable

This the code

from sklearn.grid_search import GridSearchCV
from sklearn.model_selection import KFold
C_range = np.logspace(-2, 10, 13)
gamma_range = np.logspace(-9, 3, 13)
param_grid = dict(gamma=gamma_range, C=C_range)
cv = KFold(n_splits=5, shuffle=False, random_state=None)
grid = GridSearchCV(SVR(kernel='rbf'), param_grid=param_grid, cv=cv)
grid.fit(X, y)

print("The best parameters are %s with a score of %0.2f"
  % (grid.best_params_, grid.best_score_))

Upvotes: 3

Views: 5582

Answers (2)

seralouk
seralouk

Reputation: 33197

Similar problem solved by:

Replacing:

from sklearn.grid_search import GridSearchCV

with

from sklearn.model_selection import GridSearchCV

Upvotes: 6

Farseer
Farseer

Reputation: 4172

cv is an object in your case. You should use KFold in order to create batches of data, and pass these batches to GridSearchCV in cv argument.

Here an example on how to create splits, using KFold:

>>> from sklearn.model_selection import KFold
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([1, 2, 3, 4])
>>> kf = KFold(n_splits=2)
>>> kf.get_n_splits(X)
2
>>> print(kf)  
KFold(n_splits=2, random_state=None, shuffle=False)
>>> for train_index, test_index in kf.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)
...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]
TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1] TEST: [2 3]

Upvotes: 1

Related Questions