【发布时间】:2018-11-18 11:20:36
【问题描述】:
我有一个简单的岭回归模型,如下所示:
import numpy as np
import sklearn.linear_model
import sklearn.model_selection
import matplotlib.pyplot as plt
n_samples_train, n_samples_test, n_features = 75, 150, 500
np.random.seed(0)
coef = np.random.randn(n_features)
coef[50:] = 0.0 # only the top 10 features are impacting the model
X = np.random.randn(n_samples_train + n_samples_test, n_features)
y = np.dot(X, coef)
ridge = linear_model.Ridge(alpha=0.1, fit_intercept=False)
fit_params = {'alpha': 0.1, 'alpha': 1, 'alpha': 10}
ms = model_selection.cross_validate(ridge, X, y, cv=10, verbose=3, scoring='neg_mean_squared_error', n_jobs=-1, return_train_score=True)
f = plt.figure(figsize=(10,7))
ax = f.add_subplot(111)
_ = ax.scatter(np.arange(len(ms['train_score'])), ms['train_score'])
_ = ax.scatter(np.arange(len(ms['train_score'])), ms['test_score'])
ax.set_xlabel('Regularization Parameter')
ax.set_ylabel('Negative '+r'$MSE$')
这会生成一些虚拟数据。它将拟合 alpha=0.1 的 Ridge 回归,然后绘制训练和测试误差。 我的问题是如何在模型选择中加入 fit_params? 我尝试使用该字典 fit_params,但它给了我一个错误。文档没有说明键应该是什么(我怀疑它实际上是样本权重......),在这种情况下,如何使用不同的 alpha 对选择进行建模? (RidgeCV 不起作用,因为它不会绘制训练/测试错误图)
为什么不使用 RidgeCV?:
1) 如果您想存储 cv_errors,RidgeCV 可以与 leave-one-out 一起使用,但不能与 10 倍验证(或除 LOO 之外的任何交叉验证)一起使用。
错误信息:
---------------------------------------------------------------------------
RemoteTraceback Traceback (most recent call last)
RemoteTraceback:
"""
Traceback (most recent call last):
File "/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 350, in __call__
return self.func(*args, **kwargs)
File "/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in __call__
return [func(*args, **kwargs) for func, args, kwargs in self.items]
File "/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in <listcomp>
return [func(*args, **kwargs) for func, args, kwargs in self.items]
File "/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/model_selection/_validation.py", line 458, in _fit_and_score
estimator.fit(X_train, y_train, **fit_params)
TypeError: fit() got an unexpected keyword argument 'alpha'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/nazariy/anaconda/envs/logging/lib/python3.6/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 359, in __call__
raise TransportableException(text, e_type)
sklearn.externals.joblib.my_exceptions.TransportableException: TransportableException
___________________________________________________________________________
TypeError Thu Jun 7 19:32:53 2018
PID: 1372 Python 3.6.4: /home/nazariy/anaconda/envs/logging/bin/python
...........................................................................
/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=<sklearn.externals.joblib.parallel.BatchedCalls object>)
126 def __init__(self, iterator_slice):
127 self.items = list(iterator_slice)
128 self._size = len(self.items)
129
130 def __call__(self):
--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]
self.items = [(<function _fit_and_score>, (Ridge(alpha=0.1, copy_X=True, fit_intercept=Fals...lse, random_state=None, solver='auto', tol=0.001), array([[ 1],
[ 2],
[ 3],
[ ... [ 7],
[ 8],
[ 9],
[10]]), array([ 1. , 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1]), {'score': make_scorer(mean_squared_error, greater_is_better=False)}, array([1, 2, 3, 4, 5, 6, 7, 8, 9]), array([0]), 3, None, {'alpha': 10}), {'return_times': True, 'return_train_score': True})]
132
133 def __len__(self):
134 return self._size
135
...........................................................................
/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)
126 def __init__(self, iterator_slice):
127 self.items = list(iterator_slice)
128 self._size = len(self.items)
129
130 def __call__(self):
--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]
func = <function _fit_and_score>
args = (Ridge(alpha=0.1, copy_X=True, fit_intercept=Fals...lse, random_state=None, solver='auto', tol=0.001), array([[ 1],
[ 2],
[ 3],
[ ... [ 7],
[ 8],
[ 9],
[10]]), array([ 1. , 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1]), {'score': make_scorer(mean_squared_error, greater_is_better=False)}, array([1, 2, 3, 4, 5, 6, 7, 8, 9]), array([0]), 3, None, {'alpha': 10})
kwargs = {'return_times': True, 'return_train_score': True}
132
133 def __len__(self):
134 return self._size
135
...........................................................................
/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in _fit_and_score(estimator=Ridge(alpha=0.1, copy_X=True, fit_intercept=Fals...lse, random_state=None, solver='auto', tol=0.001), X=array([[ 1],
[ 2],
[ 3],
[ ... [ 7],
[ 8],
[ 9],
[10]]), y=array([ 1. , 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1]), scorer={'score': make_scorer(mean_squared_error, greater_is_better=False)}, train=array([1, 2, 3, 4, 5, 6, 7, 8, 9]), test=array([0]), verbose=3, parameters=None, fit_params={'alpha': 10}, return_train_score=True, return_parameters=False, return_n_test_samples=False, return_times=True, error_score='raise')
453
454 try:
455 if y_train is None:
456 estimator.fit(X_train, **fit_params)
457 else:
--> 458 estimator.fit(X_train, y_train, **fit_params)
estimator.fit = <bound method Ridge.fit of Ridge(alpha=0.1, copy...se, random_state=None, solver='auto', tol=0.001)>
X_train = array([[ 2],
[ 3],
[ 4],
[ ... [ 7],
[ 8],
[ 9],
[10]])
y_train = array([ 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1])
fit_params = {'alpha': 10}
459
460 except Exception as e:
461 # Note fit time as time until error
462 fit_time = time.time() - start_time
TypeError: fit() got an unexpected keyword argument 'alpha'
___________________________________________________________________________
"""
The above exception was the direct cause of the following exception:
TransportableException Traceback (most recent call last)
~/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py in retrieve(self)
698 if getattr(self._backend, 'supports_timeout', False):
--> 699 self._output.extend(job.get(timeout=self.timeout))
700 else:
~/anaconda/envs/logging/lib/python3.6/multiprocessing/pool.py in get(self, timeout)
643 else:
--> 644 raise self._value
645
TransportableException: TransportableException
___________________________________________________________________________
TypeError Thu Jun 7 19:32:53 2018
PID: 1372 Python 3.6.4: /home/nazariy/anaconda/envs/logging/bin/python
...........................................................................
/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=<sklearn.externals.joblib.parallel.BatchedCalls object>)
126 def __init__(self, iterator_slice):
127 self.items = list(iterator_slice)
128 self._size = len(self.items)
129
130 def __call__(self):
--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]
self.items = [(<function _fit_and_score>, (Ridge(alpha=0.1, copy_X=True, fit_intercept=Fals...lse, random_state=None, solver='auto', tol=0.001), array([[ 1],
[ 2],
[ 3],
[ ... [ 7],
[ 8],
[ 9],
[10]]), array([ 1. , 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1]), {'score': make_scorer(mean_squared_error, greater_is_better=False)}, array([1, 2, 3, 4, 5, 6, 7, 8, 9]), array([0]), 3, None, {'alpha': 10}), {'return_times': True, 'return_train_score': True})]
132
133 def __len__(self):
134 return self._size
135
...........................................................................
/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)
126 def __init__(self, iterator_slice):
127 self.items = list(iterator_slice)
128 self._size = len(self.items)
129
130 def __call__(self):
--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]
func = <function _fit_and_score>
args = (Ridge(alpha=0.1, copy_X=True, fit_intercept=Fals...lse, random_state=None, solver='auto', tol=0.001), array([[ 1],
[ 2],
[ 3],
[ ... [ 7],
[ 8],
[ 9],
[10]]), array([ 1. , 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1]), {'score': make_scorer(mean_squared_error, greater_is_better=False)}, array([1, 2, 3, 4, 5, 6, 7, 8, 9]), array([0]), 3, None, {'alpha': 10})
kwargs = {'return_times': True, 'return_train_score': True}
132
133 def __len__(self):
134 return self._size
135
...........................................................................
/home/nazariy/anaconda/envs/logging/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in _fit_and_score(estimator=Ridge(alpha=0.1, copy_X=True, fit_intercept=Fals...lse, random_state=None, solver='auto', tol=0.001), X=array([[ 1],
[ 2],
[ 3],
[ ... [ 7],
[ 8],
[ 9],
[10]]), y=array([ 1. , 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1]), scorer={'score': make_scorer(mean_squared_error, greater_is_better=False)}, train=array([1, 2, 3, 4, 5, 6, 7, 8, 9]), test=array([0]), verbose=3, parameters=None, fit_params={'alpha': 10}, return_train_score=True, return_parameters=False, return_n_test_samples=False, return_times=True, error_score='raise')
453
454 try:
455 if y_train is None:
456 estimator.fit(X_train, **fit_params)
457 else:
--> 458 estimator.fit(X_train, y_train, **fit_params)
estimator.fit = <bound method Ridge.fit of Ridge(alpha=0.1, copy...se, random_state=None, solver='auto', tol=0.001)>
X_train = array([[ 2],
[ 3],
[ 4],
[ ... [ 7],
[ 8],
[ 9],
[10]])
y_train = array([ 3.5, 4. , 4.9, 6.1, 7.2, 8.1, 8.9, 10. , 11.1])
fit_params = {'alpha': 10}
459
460 except Exception as e:
461 # Note fit time as time until error
462 fit_time = time.time() - start_time
TypeError: fit() got an unexpected keyword argument 'alpha'
___________________________________________________________________________
During handling of the above exception, another exception occurred:
【问题讨论】:
-
请包含错误信息;另外,解释一下为什么 RidgeCV(这里是显而易见的选择)不起作用,包括一个例子
-
thanx,但是您能否给出确切的错误消息,而不是不必要的东西(EDIT EDIT 等)??
标签: python scikit-learn