from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline, make_pipeline
class FactoryEstimator(object):
def __repr__(self):
return "ConstructedEstimator(" + str(self.params) + ")"
# for "is_classifier" ugh
@property
def steps(self):
return self.constructor(self.params).steps
def __init__(self, **params):
self.params = params
self.constructor = params['constructor']
def get_params(self, deep=None):
return self.params
def set_params(self, **params):
self.params.update(params)
return self
def fit(self, X, y):
self.estimator_ = self.constructor(self.params)
self.estimator_.fit(X, y)
return self
def predict(self, X):
return self.estimator_.predict(X)
func = lambda x: make_pipeline(StandardScaler(with_mean=x['with_mean']), SVC(gamma=x['gamma'], C=x['C']))
est = FactoryEstimator(constructor=func, with_mean=True, C=1, gamma=.1)
grid = GridSearchCV(est, param_grid={'C': [.1, 1, 10], 'gamma': [0.001, 0.1, 1, 0]}, scoring='accuracy')
grid.fit(X, y)
print(grid.best_score_)
0.986666666667
est = ConstructedEstimator(constructor=func, with_mean=True, C=1, gamma=.1)
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
est.fit(X, y)
ConstructedEstimator({'C': 1, 'with_mean': True, 'gamma': 0.1, 'constructor': <function <lambda> at 0x7fbcafa3cc08>})
est.predict(X)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
from sklearn.grid_search import GridSearchCV
grid.fit(X, y)
Fitting 3 folds for each of 12 candidates, totalling 36 fits [CV] C=0.1, gamma=0.001 .............................................. [CV] ..................... C=0.1, gamma=0.001, score=0.882353 - 0.0s [CV] C=0.1, gamma=0.001 .............................................. [CV] ..................... C=0.1, gamma=0.001, score=0.882353 - 0.0s [CV] C=0.1, gamma=0.001 .............................................. [CV] ..................... C=0.1, gamma=0.001, score=0.875000 - 0.0s [CV] C=0.1, gamma=0.1 ................................................ [CV] ....................... C=0.1, gamma=0.1, score=0.843137 - 0.0s [CV] C=0.1, gamma=0.1 ................................................ [CV] ....................... C=0.1, gamma=0.1, score=0.882353 - 0.0s [CV] C=0.1, gamma=0.1 ................................................ [CV] ....................... C=0.1, gamma=0.1, score=0.895833 - 0.0s [CV] C=0.1, gamma=1 .................................................. [CV] ......................... C=0.1, gamma=1, score=0.901961 - 0.0s [CV] C=0.1, gamma=1 .................................................. [CV] ......................... C=0.1, gamma=1, score=0.921569 - 0.0s [CV] C=0.1, gamma=1 .................................................. [CV] ......................... C=0.1, gamma=1, score=0.937500 - 0.0s [CV] C=0.1, gamma=0 .................................................. [CV] ......................... C=0.1, gamma=0, score=0.882353 - 0.0s [CV] C=0.1, gamma=0 .................................................. [CV] ......................... C=0.1, gamma=0, score=0.921569 - 0.0s [CV] C=0.1, gamma=0 .................................................. [CV] ......................... C=0.1, gamma=0, score=0.958333 - 0.0s [CV] C=1, gamma=0.001 ................................................ [CV] ....................... C=1, gamma=0.001, score=0.882353 - 0.0s [CV] C=1, gamma=0.001 ................................................ [CV] ....................... C=1, gamma=0.001, score=0.882353 - 0.0s [CV] C=1, gamma=0.001 ................................................ [CV] ....................... C=1, gamma=0.001, score=0.875000 - 0.0s [CV] C=1, gamma=0.1 .................................................. [CV] ......................... C=1, gamma=0.1, score=0.980392 - 0.0s [CV] C=1, gamma=0.1 .................................................. [CV] ......................... C=1, gamma=0.1, score=0.921569 - 0.0s [CV] C=1, gamma=0.1 .................................................. [CV] ......................... C=1, gamma=0.1, score=0.958333 - 0.0s [CV] C=1, gamma=1 .................................................... [CV] ........................... C=1, gamma=1, score=0.980392 - 0.0s [CV] C=1, gamma=1 .................................................... [CV] ........................... C=1, gamma=1, score=0.921569 - 0.0s [CV] C=1, gamma=1 .................................................... [CV] ........................... C=1, gamma=1, score=0.958333 - 0.0s [CV] C=1, gamma=0 .................................................... [CV] ........................... C=1, gamma=0, score=0.980392 - 0.0s [CV] C=1, gamma=0 .................................................... [CV] ........................... C=1, gamma=0, score=0.901961 - 0.0s [CV] C=1, gamma=0 .................................................... [CV] ........................... C=1, gamma=0, score=0.979167 - 0.0s [CV] C=10, gamma=0.001 ............................................... [CV] ...................... C=10, gamma=0.001, score=0.862745 - 0.0s
[Parallel(n_jobs=1)]: Done 1 jobs | elapsed: 0.0s [Parallel(n_jobs=1)]: Done 2 jobs | elapsed: 0.0s [Parallel(n_jobs=1)]: Done 5 jobs | elapsed: 0.0s [Parallel(n_jobs=1)]: Done 8 jobs | elapsed: 0.0s [Parallel(n_jobs=1)]: Done 13 jobs | elapsed: 0.0s [Parallel(n_jobs=1)]: Done 18 jobs | elapsed: 0.0s [Parallel(n_jobs=1)]: Done 25 jobs | elapsed: 0.1s [Parallel(n_jobs=1)]: Done 32 jobs | elapsed: 0.1s
[CV] C=10, gamma=0.001 ............................................... [CV] ...................... C=10, gamma=0.001, score=0.921569 - 0.0s [CV] C=10, gamma=0.001 ............................................... [CV] ...................... C=10, gamma=0.001, score=0.916667 - 0.0s [CV] C=10, gamma=0.1 ................................................. [CV] ........................ C=10, gamma=0.1, score=1.000000 - 0.0s [CV] C=10, gamma=0.1 ................................................. [CV] ........................ C=10, gamma=0.1, score=0.901961 - 0.0s [CV] C=10, gamma=0.1 ................................................. [CV] ........................ C=10, gamma=0.1, score=1.000000 - 0.0s [CV] C=10, gamma=1 ................................................... [CV] .......................... C=10, gamma=1, score=0.980392 - 0.0s [CV] C=10, gamma=1 ................................................... [CV] .......................... C=10, gamma=1, score=0.901961 - 0.0s [CV] C=10, gamma=1 ................................................... [CV] .......................... C=10, gamma=1, score=0.979167 - 0.0s [CV] C=10, gamma=0 ................................................... [CV] .......................... C=10, gamma=0, score=1.000000 - 0.0s [CV] C=10, gamma=0 ................................................... [CV] .......................... C=10, gamma=0, score=0.960784 - 0.0s [CV] C=10, gamma=0 ................................................... [CV] .......................... C=10, gamma=0, score=1.000000 - 0.0s
[Parallel(n_jobs=1)]: Done 36 out of 36 | elapsed: 0.1s finished
GridSearchCV(cv=None, error_score='raise', estimator=ConstructedEstimator({'C': 1, 'with_mean': True, 'gamma': 0.1, 'constructor': <function <lambda> at 0x7fbcafa3cc08>}), fit_params={}, iid=True, loss_func=None, n_jobs=1, param_grid={'C': [0.1, 1, 10], 'gamma': [0.001, 0.1, 1, 0]}, pre_dispatch='2*n_jobs', refit=True, score_func=None, scoring='accuracy', verbose=10)
grid.best_estimator_
ConstructedEstimator({'C': 10, 'with_mean': True, 'constructor': <function <lambda> at 0x7fbcafa3cc08>, 'gamma': 0})
grid.best_estimator_
ConstructedEstimator({'C': 10, 'with_mean': True, 'constructor': <function <lambda> at 0x7fbcafa3cc08>, 'gamma': 0})
grid.predict(X)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2])
from sklearn.cross_validation import cross_val_score
est = ConstructedEstimator(constructor=func, with_mean=True, C=1, gamma=.1)
cross_val_score(est, X, y, scoring="accuracy")
array([ 0.98039216, 0.92156863, 0.95833333])
est.fit(X, y)
ConstructedEstimator({'C': 1, 'with_mean': True, 'gamma': 0.1, 'constructor': <function <lambda> at 0x7fce58dab9b0>})
bla = func({'C':1, 'with_mean': True, 'gamma': 0.1})
bla.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('svc', SVC(C=1, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.1, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False))])
bla.score(X, y)
0.97999999999999998
cross_val_score(bla, X, y, scoring="accuracy")
array([ 0.98039216, 0.92156863, 0.95833333])
est.steps_
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-23-a669ad2434c8> in <module>() ----> 1 est.steps_ <ipython-input-18-bf6ee296da91> in steps_(self) 8 @property 9 def steps_(self): ---> 10 return self.constructor(self.params).steps_ 11 12 def __init__(self, **params): AttributeError: 'Pipeline' object has no attribute 'steps_'