@@ -99,40 +99,18 @@ def __init__(self, steps, verbose=False):
99
99
transforms = estimators [:- 1 ]
100
100
estimator = estimators [- 1 ]
101
101
102
- for i , t in enumerate (transforms ):
103
- if hasattr (t , "fit" ):
104
- transforms [i ].fit = self ._wrap_timer (t .fit , names [i ], "fit" )
105
-
106
- if hasattr (t , "transform" ):
107
- transforms [i ].transform = self ._wrap_timer (t .transform ,
108
- names [i ], "transform" )
109
-
102
+ for t in transforms :
110
103
if (not (hasattr (t , "fit" ) or hasattr (t , "fit_transform" )) or not
111
104
hasattr (t , "transform" )):
112
105
raise TypeError ("All intermediate steps of the chain should "
113
106
"be transforms and implement fit and transform"
114
107
" '%s' (type %s) doesn't)" % (t , type (t )))
115
108
116
- if hasattr (estimator , "fit" ):
117
- estimator .fit = self ._wrap_timer (estimator .fit , names [- 1 ], "fit" )
118
- else :
109
+ if not hasattr (estimator , "fit" ):
119
110
raise TypeError ("Last step of chain should implement fit "
120
111
"'%s' (type %s) doesn't)"
121
112
% (estimator , type (estimator )))
122
113
123
- def _wrap_timer (self , f , name , action ):
124
- def timed_f (* args , ** kwargs ):
125
- start_time = time .time ()
126
- ret = f (* args , ** kwargs )
127
- elapsed_time = time .time () - start_time
128
- time_str = logger .short_format_time (elapsed_time )
129
- if self .verbose :
130
- print ('[Pipeline] %s, %s, %s' % (name , action , time_str ))
131
-
132
- return ret
133
-
134
- return timed_f
135
-
136
114
@property
137
115
def _estimator_type (self ):
138
116
return self .steps [- 1 ][1 ]._estimator_type
@@ -166,11 +144,16 @@ def _pre_transform(self, X, y=None, **fit_params):
166
144
fit_params_steps [step ][param ] = pval
167
145
Xt = X
168
146
for name , transform in self .steps [:- 1 ]:
147
+ start_time = time .time ()
169
148
if hasattr (transform , "fit_transform" ):
170
149
Xt = transform .fit_transform (Xt , y , ** fit_params_steps [name ])
171
150
else :
172
151
Xt = transform .fit (Xt , y , ** fit_params_steps [name ]) \
173
152
.transform (Xt )
153
+ if self .verbose :
154
+ elapsed = time .time () - start_time
155
+ print ('[Pipeline] %s ... %s' % (name , elapsed ))
156
+
174
157
return Xt , fit_params_steps [self .steps [- 1 ][0 ]]
175
158
176
159
def fit (self , X , y = None , ** fit_params ):
@@ -187,7 +170,12 @@ def fit(self, X, y=None, **fit_params):
187
170
the pipeline.
188
171
"""
189
172
Xt , fit_params = self ._pre_transform (X , y , ** fit_params )
173
+ start_time = time .time ()
190
174
self .steps [- 1 ][- 1 ].fit (Xt , y , ** fit_params )
175
+ if self .verbose :
176
+ elapsed = time .time () - start_time
177
+ print ('[Pipeline] %s ... %s' % (self .steps [- 1 ][0 ], elapsed ))
178
+
191
179
return self
192
180
193
181
def fit_transform (self , X , y = None , ** fit_params ):
@@ -206,10 +194,16 @@ def fit_transform(self, X, y=None, **fit_params):
206
194
the pipeline.
207
195
"""
208
196
Xt , fit_params = self ._pre_transform (X , y , ** fit_params )
197
+ start_time = time .time ()
209
198
if hasattr (self .steps [- 1 ][- 1 ], 'fit_transform' ):
210
- return self .steps [- 1 ][- 1 ].fit_transform (Xt , y , ** fit_params )
199
+ ret = self .steps [- 1 ][- 1 ].fit_transform (Xt , y , ** fit_params )
211
200
else :
212
- return self .steps [- 1 ][- 1 ].fit (Xt , y , ** fit_params ).transform (Xt )
201
+ ret = self .steps [- 1 ][- 1 ].fit (Xt , y , ** fit_params ).transform (Xt )
202
+
203
+ if self .verbose :
204
+ elapsed = time .time () - start_time
205
+ print ('[Pipeline] %s ... %s' % (self .steps [- 1 ][0 ], elapsed ))
206
+ return ret
213
207
214
208
@if_delegate_has_method (delegate = '_final_estimator' )
215
209
def predict (self , X ):
0 commit comments