@@ -1214,8 +1214,8 @@ def learning_curve(estimator, X, y, *, groups=None,
12141214 train_sizes = np .linspace (0.1 , 1.0 , 5 ), cv = None ,
12151215 scoring = None , exploit_incremental_learning = False ,
12161216 n_jobs = None , pre_dispatch = "all" , verbose = 0 , shuffle = False ,
1217- random_state = None , error_score = np .nan ,
1218- return_times = False ):
1217+ random_state = None , error_score = np .nan , return_times = False ,
1218+ fit_params = None ):
12191219 """Learning curve.
12201220
12211221 Determines cross-validated training and test scores for different training
@@ -1319,6 +1319,11 @@ def learning_curve(estimator, X, y, *, groups=None,
13191319 return_times : bool, default=False
13201320 Whether to return the fit and score times.
13211321
1322+ fit_params : dict, default=None
1323+ Parameters to pass to the fit method of the estimator.
1324+
1325+ .. versionadded:: 0.24
1326+
13221327 Returns
13231328 -------
13241329 train_sizes_abs : array of shape (n_unique_ticks,)
@@ -1377,7 +1382,8 @@ def learning_curve(estimator, X, y, *, groups=None,
13771382 classes = np .unique (y ) if is_classifier (estimator ) else None
13781383 out = parallel (delayed (_incremental_fit_estimator )(
13791384 clone (estimator ), X , y , classes , train , test , train_sizes_abs ,
1380- scorer , verbose , return_times , error_score = error_score )
1385+ scorer , verbose , return_times , error_score = error_score ,
1386+ fit_params = fit_params )
13811387 for train , test in cv_iter
13821388 )
13831389 out = np .asarray (out ).transpose ((2 , 1 , 0 ))
@@ -1389,7 +1395,7 @@ def learning_curve(estimator, X, y, *, groups=None,
13891395
13901396 results = parallel (delayed (_fit_and_score )(
13911397 clone (estimator ), X , y , scorer , train , test , verbose ,
1392- parameters = None , fit_params = None , return_train_score = True ,
1398+ parameters = None , fit_params = fit_params , return_train_score = True ,
13931399 error_score = error_score , return_times = return_times )
13941400 for train , test in train_test_proportions
13951401 )
@@ -1472,10 +1478,12 @@ def _translate_train_sizes(train_sizes, n_max_training_samples):
14721478
14731479def _incremental_fit_estimator (estimator , X , y , classes , train , test ,
14741480 train_sizes , scorer , verbose ,
1475- return_times , error_score ):
1481+ return_times , error_score , fit_params ):
14761482 """Train estimator on training subsets incrementally and compute scores."""
14771483 train_scores , test_scores , fit_times , score_times = [], [], [], []
14781484 partitions = zip (train_sizes , np .split (train , train_sizes )[:- 1 ])
1485+ if fit_params is None :
1486+ fit_params = {}
14791487 for n_train_samples , partial_train in partitions :
14801488 train_subset = train [:n_train_samples ]
14811489 X_train , y_train = _safe_split (estimator , X , y , train_subset )
@@ -1484,10 +1492,11 @@ def _incremental_fit_estimator(estimator, X, y, classes, train, test,
14841492 X_test , y_test = _safe_split (estimator , X , y , test , train_subset )
14851493 start_fit = time .time ()
14861494 if y_partial_train is None :
1487- estimator .partial_fit (X_partial_train , classes = classes )
1495+ estimator .partial_fit (X_partial_train , classes = classes ,
1496+ ** fit_params )
14881497 else :
14891498 estimator .partial_fit (X_partial_train , y_partial_train ,
1490- classes = classes )
1499+ classes = classes , ** fit_params )
14911500 fit_time = time .time () - start_fit
14921501 fit_times .append (fit_time )
14931502
0 commit comments