comparison pipeline.xml @ 7:99038af8deda draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/sklearn commit 57f4407e278a615f47a377a3328782b1d8e0b54d
author bgruening
date Sun, 30 Dec 2018 01:52:15 -0500
parents 52c4e0ef580a
children 913ee94945f3
comparison
equal deleted inserted replaced
6:52c4e0ef580a 7:99038af8deda
3 <macros> 3 <macros>
4 <import>main_macros.xml</import> 4 <import>main_macros.xml</import>
5 </macros> 5 </macros>
6 <expand macro="python_requirements"> 6 <expand macro="python_requirements">
7 <requirement type="package" version="0.6">skrebate</requirement> 7 <requirement type="package" version="0.6">skrebate</requirement>
8 <requirement type="package" version="0.4.2">imbalanced-learn</requirement>
8 </expand> 9 </expand>
9 <expand macro="macro_stdio"/> 10 <expand macro="macro_stdio"/>
10 <version_command>echo "@VERSION@"</version_command> 11 <version_command>echo "@VERSION@"</version_command>
11 <command> 12 <command>
12 <![CDATA[ 13 <![CDATA[
15 </command> 16 </command>
16 <configfiles> 17 <configfiles>
17 <inputs name="inputs" /> 18 <inputs name="inputs" />
18 <configfile name="sklearn_pipeline_script"> 19 <configfile name="sklearn_pipeline_script">
19 <![CDATA[ 20 <![CDATA[
20 import sys
21 import os
22 import json 21 import json
23 import pprint 22 import pprint
24 import skrebate 23 import skrebate
24 import imblearn
25 from imblearn import under_sampling, over_sampling, combine
26 from imblearn.pipeline import Pipeline as imbPipeline
25 from sklearn import (preprocessing, svm, linear_model, ensemble, naive_bayes, 27 from sklearn import (preprocessing, svm, linear_model, ensemble, naive_bayes,
26 tree, neighbors, decomposition, kernel_approximation, cluster) 28 tree, neighbors, decomposition, kernel_approximation, cluster)
27 from sklearn.pipeline import Pipeline 29 from sklearn.pipeline import Pipeline
28 30
29 exec(open("$__tool_directory__/utils.py").read(), globals()) 31 with open('$__tool_directory__/sk_whitelist.json', 'r') as f:
32 sk_whitelist = json.load(f)
33 exec(open('$__tool_directory__/utils.py').read(), globals())
34
35 warnings.filterwarnings('ignore')
30 36
31 safe_eval = SafeEval() 37 safe_eval = SafeEval()
32 38
33 input_json_path = sys.argv[1] 39 input_json_path = sys.argv[1]
34 with open(input_json_path, "r") as param_handler: 40 with open(input_json_path, 'r') as param_handler:
35 params = json.load(param_handler) 41 params = json.load(param_handler)
36 42
43 #if $final_estimator.estimator_selector.selected_module == 'customer_estimator':
44 params['final_estimator']['estimator_selector']['c_estimator'] =\
45 '$final_estimator.estimator_selector.c_estimator'
46 #end if
47
37 pipeline_steps = [] 48 pipeline_steps = []
38 49
39 def get_component(input_json, check_none=False): 50 def get_component(input_json, check_none=False):
51 is_imblearn = False
40 if input_json['component_type'] == 'None': 52 if input_json['component_type'] == 'None':
41 if not check_none: 53 if not check_none:
42 return 54 return None, False
43 else: 55 else:
44 sys.exit("The pre-processing component type can't be None when the number of components is greater than 1.") 56 sys.exit("The pre-processing component type can't be None when the number of components is greater than 1.")
45 if input_json['component_type'] == 'pre_processor': 57 if input_json['component_type'] == 'pre_processor':
46 preprocessor = input_json["pre_processors"]["selected_pre_processor"] 58 preprocessor = input_json['pre_processors']['selected_pre_processor']
47 pre_processor_options = input_json["pre_processors"]["options"] 59 pre_processor_options = input_json['pre_processors']['options']
48 my_class = getattr(preprocessing, preprocessor) 60 my_class = getattr(preprocessing, preprocessor)
49 obj = my_class(**pre_processor_options) 61 obj = my_class(**pre_processor_options)
50 elif input_json['component_type'] == 'feature_selection': 62 elif input_json['component_type'] == 'feature_selection':
51 obj = feature_selector(input_json['fs_algorithm_selector']) 63 obj = feature_selector(input_json['fs_algorithm_selector'])
52 elif input_json['component_type'] == 'decomposition': 64 elif input_json['component_type'] == 'decomposition':
53 algorithm = input_json['matrix_decomposition_selector']['select_algorithm'] 65 algorithm = input_json['matrix_decomposition_selector']['select_algorithm']
54 obj = getattr(decomposition, algorithm)() 66 obj = getattr(decomposition, algorithm)()
55 options = input_json['matrix_decomposition_selector']['text_params'].strip() 67 options = input_json['matrix_decomposition_selector']['text_params'].strip()
56 if options != "": 68 if options != '':
57 options = safe_eval('dict(' + options + ')') 69 options = safe_eval( 'dict(' + options + ')' )
58 obj.set_params(**options) 70 obj.set_params(**options)
59 elif input_json['component_type'] == 'kernel_approximation': 71 elif input_json['component_type'] == 'kernel_approximation':
60 algorithm = input_json['kernel_approximation_selector']['select_algorithm'] 72 algorithm = input_json['kernel_approximation_selector']['select_algorithm']
61 obj = getattr(kernel_approximation, algorithm)() 73 obj = getattr(kernel_approximation, algorithm)()
62 options = input_json['kernel_approximation_selector']['text_params'].strip() 74 options = input_json['kernel_approximation_selector']['text_params'].strip()
63 if options != "": 75 if options != '':
64 options = safe_eval('dict(' + options + ')') 76 options = safe_eval( 'dict(' + options + ')' )
65 obj.set_params(**options) 77 obj.set_params(**options)
66 elif input_json['component_type'] == 'FeatureAgglomeration': 78 elif input_json['component_type'] == 'FeatureAgglomeration':
67 algorithm = input_json['FeatureAgglomeration_selector']['select_algorithm'] 79 algorithm = input_json['FeatureAgglomeration_selector']['select_algorithm']
68 obj = getattr(cluster, algorithm)() 80 obj = getattr(cluster, algorithm)()
69 options = input_json['FeatureAgglomeration_selector']['text_params'].strip() 81 options = input_json['FeatureAgglomeration_selector']['text_params'].strip()
70 if options != "": 82 if options != '':
71 options = safe_eval('dict(' + options + ')') 83 options = safe_eval( 'dict(' + options + ')' )
72 obj.set_params(**options) 84 obj.set_params(**options)
73 elif input_json['component_type'] == 'skrebate': 85 elif input_json['component_type'] == 'skrebate':
74 algorithm = input_json['skrebate_selector']['select_algorithm'] 86 algorithm = input_json['skrebate_selector']['select_algorithm']
75 if algorithm == 'TuRF': 87 if algorithm == 'TuRF':
76 obj = getattr(skrebate, algorithm)(core_algorithm='ReliefF') 88 obj = getattr(skrebate, algorithm)(core_algorithm='ReliefF')
77 else: 89 else:
78 obj = getattr(skrebate, algorithm)() 90 obj = getattr(skrebate, algorithm)()
79 options = input_json['skrebate_selector']['text_params'].strip() 91 options = input_json['skrebate_selector']['text_params'].strip()
80 if options != "": 92 if options != '':
81 options = safe_eval('dict(' + options + ')') 93 options = safe_eval( 'dict(' + options + ')' )
94 obj.set_params(**options)
95 elif input_json['component_type'] == 'imblearn':
96 is_imblearn = True
97 algorithm = input_json['imblearn_selector']['select_algorithm']
98 if algorithm == 'over_sampling.SMOTENC':
99 obj = over_sampling.SMOTENC(categorical_features=[])
100 else:
101 globals = algorithm.split('.')
102 mod, klass = globals[0], globals[1]
103 obj = getattr(getattr(imblearn, mod), klass)()
104 options = input_json['imblearn_selector']['text_params'].strip()
105 if options != '':
106 options = safe_eval( 'dict(' + options + ')' )
82 obj.set_params(**options) 107 obj.set_params(**options)
83 if 'n_jobs' in obj.get_params(): 108 if 'n_jobs' in obj.get_params():
84 obj.set_params( n_jobs=N_JOBS ) 109 obj.set_params( n_jobs=N_JOBS )
85 return obj 110 return obj, is_imblearn
86 111
112 has_imblearn = False
87 if len(params['pipeline_component']) == 1: 113 if len(params['pipeline_component']) == 1:
88 step_obj = get_component( params['pipeline_component'][0]['component_selector']) 114 step_obj, is_imblearn = get_component( params['pipeline_component'][0]['component_selector'])
89 if step_obj: 115 if step_obj:
90 pipeline_steps.append( ('preprocessing_1', step_obj) ) 116 pipeline_steps.append( ('preprocessing_1', step_obj) )
117 if is_imblearn:
118 has_imblearn = True
91 else: 119 else:
92 for i, c in enumerate(params['pipeline_component']): 120 for i, c in enumerate(params['pipeline_component']):
93 step_obj = get_component( c['component_selector'], check_none=True ) 121 step_obj, is_imblearn = get_component( c['component_selector'], check_none=True )
94 pipeline_steps.append( ('preprocessing_' + str(i+1), step_obj) ) 122 pipeline_steps.append( ('preprocessing_' + str(i+1), step_obj) )
123 if is_imblearn:
124 has_imblearn = True
95 125
96 # Set up final estimator and add to pipeline. 126 # Set up final estimator and add to pipeline.
97 estimator_json = params["final_estimator"]['estimator_selector'] 127 estimator_json = params['final_estimator']['estimator_selector']
98 estimator = get_estimator(estimator_json) 128 if estimator_json['selected_module'] == 'none':
99 129 if len(pipeline_steps) == 0:
100 pipeline_steps.append( ('estimator', estimator) ) 130 sys.exit("No pipeline steps specified!")
101 131 else: # turn the last pre-process component to final estimator
102 pipeline = Pipeline(pipeline_steps) 132 pipeline_steps[-1] = ('estimator', pipeline_steps[-1][-1])
133 else:
134 estimator = get_estimator(estimator_json)
135 pipeline_steps.append( ('estimator', estimator) )
136
137 if has_imblearn:
138 pipeline = imbPipeline(pipeline_steps)
139 else:
140 pipeline = Pipeline(pipeline_steps)
103 pprint.pprint(pipeline.named_steps) 141 pprint.pprint(pipeline.named_steps)
104 142
105 with open("$outfile", 'wb') as out_handler: 143 with open('$outfile', 'wb') as out_handler:
106 pickle.dump(pipeline, out_handler, pickle.HIGHEST_PROTOCOL) 144 pickle.dump(pipeline, out_handler, pickle.HIGHEST_PROTOCOL)
107 145
108 ]]> 146 ]]>
109 </configfile> 147 </configfile>
110 </configfiles> 148 </configfiles>
116 <option value="pre_processor">Sklearn Preprocessor</option> 154 <option value="pre_processor">Sklearn Preprocessor</option>
117 <option value="feature_selection">Feature Selection</option> 155 <option value="feature_selection">Feature Selection</option>
118 <option value="decomposition">Matrix Decomposition</option> 156 <option value="decomposition">Matrix Decomposition</option>
119 <option value="kernel_approximation">Kernel Approximation</option> 157 <option value="kernel_approximation">Kernel Approximation</option>
120 <option value="FeatureAgglomeration">Agglomerate Features</option> 158 <option value="FeatureAgglomeration">Agglomerate Features</option>
121 <option value="skrebate">Skrebate algorithm</option> 159 <option value="skrebate">SK-rebate feature selection</option>
160 <option value="imblearn">imbalanced-learn sampling</option>
122 </param> 161 </param>
123 <when value="None"/> 162 <when value="None"/>
124 <when value="pre_processor"> 163 <when value="pre_processor">
125 <conditional name="pre_processors"> 164 <conditional name="pre_processors">
126 <expand macro="sparse_preprocessors_ext" /> 165 <expand macro="sparse_preprocessors_ext" />
127 <expand macro="sparse_preprocessor_options_ext" /> 166 <expand macro="sparse_preprocessor_options_ext" />
128 </conditional> 167 </conditional>
129 </when> 168 </when>
130 <when value="feature_selection"> 169 <when value="feature_selection">
131 <expand macro="feature_selection_all"> 170 <expand macro="feature_selection_pipeline"/>
132 <expand macro="fs_selectfrommodel_no_prefitted"/>
133 </expand>
134 </when> 171 </when>
135 <when value="decomposition"> 172 <when value="decomposition">
136 <expand macro="matrix_decomposition_all"/> 173 <expand macro="matrix_decomposition_all"/>
137 </when> 174 </when>
138 <when value="kernel_approximation"> 175 <when value="kernel_approximation">
142 <expand macro="FeatureAgglomeration"/> 179 <expand macro="FeatureAgglomeration"/>
143 </when> 180 </when>
144 <when value="skrebate"> 181 <when value="skrebate">
145 <expand macro="skrebate"/> 182 <expand macro="skrebate"/>
146 </when> 183 </when>
184 <when value="imblearn">
185 <expand macro="imbalanced_learn_sampling"/>
186 </when>
147 </conditional> 187 </conditional>
148 </repeat> 188 </repeat>
149 <section name="final_estimator" title="Final Estimator" expanded="true"> 189 <section name="final_estimator" title="Final Estimator" expanded="true">
150 <expand macro="estimator_selector_all" /> 190 <conditional name="estimator_selector">
191 <param name="selected_module" type="select" label="Choose the module that contains target estimator:" >
192 <expand macro="estimator_module_options">
193 <option value="customer_estimator">Load a customer estimator</option>
194 <option value="none">none -- The last component of pre-processing step will turn to a final estimator</option>
195 </expand>
196 </param>
197 <expand macro="estimator_suboptions">
198 <when value="customer_estimator">
199 <param name="c_estimator" type="data" format="zip" label="Choose the dataset containing the customer estimator or pipeline:"/>
200 </when>
201 <when value="none"/>
202 </expand>
203 </conditional>
151 </section> 204 </section>
152 </inputs> 205 </inputs>
153 <outputs> 206 <outputs>
154 <data format="zip" name="outfile"/> 207 <data format="zip" name="outfile"/>
155 </outputs> 208 </outputs>
173 </conditional> 226 </conditional>
174 </repeat> 227 </repeat>
175 <param name="selected_module" value="svm"/> 228 <param name="selected_module" value="svm"/>
176 <param name="selected_estimator" value="SVR"/> 229 <param name="selected_estimator" value="SVR"/>
177 <param name="text_params" value="kernel='linear'"/> 230 <param name="text_params" value="kernel='linear'"/>
178 <output name="outfile" file="pipeline01" compare="sim_size" delta="1"/> 231 <output name="outfile" file="pipeline01" compare="sim_size" delta="5"/>
179 </test> 232 </test>
180 <test> 233 <test>
181 <conditional name="component_selector"> 234 <conditional name="component_selector">
182 <param name="component_type" value="pre_processor"/> 235 <param name="component_type" value="pre_processor"/>
183 <conditional name="pre_processors"> 236 <conditional name="pre_processors">
184 <param name="selected_pre_processor" value="RobustScaler"/> 237 <param name="selected_pre_processor" value="RobustScaler"/>
185 </conditional> 238 </conditional>
186 </conditional> 239 </conditional>
187 <param name="selected_module" value="linear_model"/> 240 <param name="selected_module" value="linear_model"/>
188 <param name="selected_estimator" value="LassoCV"/> 241 <param name="selected_estimator" value="LassoCV"/>
189 <output name="outfile" file="pipeline02" compare="sim_size" delta="1"/> 242 <output name="outfile" file="pipeline02" compare="sim_size" delta="5"/>
190 </test> 243 </test>
191 <test> 244 <test>
192 <conditional name="component_selector"> 245 <conditional name="component_selector">
193 <param name="component_type" value="pre_processor"/> 246 <param name="component_type" value="pre_processor"/>
194 <conditional name="pre_processors"> 247 <conditional name="pre_processors">
195 <param name="selected_pre_processor" value="RobustScaler"/> 248 <param name="selected_pre_processor" value="RobustScaler"/>
196 </conditional> 249 </conditional>
197 </conditional> 250 </conditional>
198 <param name="selected_module" value="xgboost"/> 251 <param name="selected_module" value="xgboost"/>
199 <param name="selected_estimator" value="XGBClassifier"/> 252 <param name="selected_estimator" value="XGBClassifier"/>
200 <output name="outfile" file="pipeline03" compare="sim_size" delta="1"/> 253 <output name="outfile" file="pipeline03" compare="sim_size" delta="5"/>
201 </test> 254 </test>
202 <test> 255 <test>
203 <conditional name="component_selector"> 256 <conditional name="component_selector">
204 <param name="component_type" value="feature_selection"/> 257 <param name="component_type" value="feature_selection"/>
205 <conditional name="fs_algorithm_selector"> 258 <conditional name="fs_algorithm_selector">
214 </conditional> 267 </conditional>
215 <section name="final_estimator"> 268 <section name="final_estimator">
216 <param name="selected_module" value="svm"/> 269 <param name="selected_module" value="svm"/>
217 <param name="selected_estimator" value="LinearSVC"/> 270 <param name="selected_estimator" value="LinearSVC"/>
218 </section> 271 </section>
219 <output name="outfile" file="pipeline04" compare="sim_size" delta="1"/> 272 <output name="outfile" file="pipeline04" compare="sim_size" delta="5"/>
220 </test> 273 </test>
221 <test> 274 <test>
222 <conditional name="component_selector"> 275 <conditional name="component_selector">
223 <param name="component_type" value="None"/> 276 <param name="component_type" value="None"/>
224 </conditional> 277 </conditional>
225 <param name="selected_module" value="ensemble"/> 278 <param name="selected_module" value="ensemble"/>
226 <param name="selected_estimator" value="RandomForestRegressor"/> 279 <param name="selected_estimator" value="RandomForestRegressor"/>
227 <param name="text_params" value="n_estimators=100, random_state=42"/> 280 <param name="text_params" value="n_estimators=100, random_state=42"/>
228 <output name="outfile" file="pipeline05" compare="sim_size" delta="1"/> 281 <output name="outfile" file="pipeline05" compare="sim_size" delta="5"/>
229 </test> 282 </test>
230 <test> 283 <test>
231 <conditional name="component_selector"> 284 <conditional name="component_selector">
232 <param name="component_type" value="decomposition"/> 285 <param name="component_type" value="decomposition"/>
233 <conditional name="matrix_decomposition_selector"> 286 <conditional name="matrix_decomposition_selector">
234 <param name="select_algorithm" value="PCA"/> 287 <param name="select_algorithm" value="PCA"/>
235 </conditional> 288 </conditional>
236 </conditional> 289 </conditional>
237 <param name="selected_module" value="ensemble"/> 290 <param name="selected_module" value="ensemble"/>
238 <param name="selected_estimator" value="AdaBoostRegressor"/> 291 <param name="selected_estimator" value="AdaBoostRegressor"/>
239 <output name="outfile" file="pipeline06" compare="sim_size" delta="1"/> 292 <output name="outfile" file="pipeline06" compare="sim_size" delta="5"/>
240 </test> 293 </test>
241 <test> 294 <test>
242 <conditional name="component_selector"> 295 <conditional name="component_selector">
243 <param name="component_type" value="kernel_approximation"/> 296 <param name="component_type" value="kernel_approximation"/>
244 <conditional name="kernel_approximation_selector"> 297 <conditional name="kernel_approximation_selector">
246 <param name="text_params" value="n_components=10, gamma=2.0"/> 299 <param name="text_params" value="n_components=10, gamma=2.0"/>
247 </conditional> 300 </conditional>
248 </conditional> 301 </conditional>
249 <param name="selected_module" value="ensemble"/> 302 <param name="selected_module" value="ensemble"/>
250 <param name="selected_estimator" value="AdaBoostClassifier"/> 303 <param name="selected_estimator" value="AdaBoostClassifier"/>
251 <output name="outfile" file="pipeline07" compare="sim_size" delta="1"/> 304 <output name="outfile" file="pipeline07" compare="sim_size" delta="5"/>
252 </test> 305 </test>
253 <test> 306 <test>
254 <conditional name="component_selector"> 307 <conditional name="component_selector">
255 <param name="component_type" value="FeatureAgglomeration"/> 308 <param name="component_type" value="FeatureAgglomeration"/>
256 <conditional name="FeatureAgglomeration_selector"> 309 <conditional name="FeatureAgglomeration_selector">
258 <param name="text_params" value="n_clusters=3, affinity='euclidean'"/> 311 <param name="text_params" value="n_clusters=3, affinity='euclidean'"/>
259 </conditional> 312 </conditional>
260 </conditional> 313 </conditional>
261 <param name="selected_module" value="ensemble"/> 314 <param name="selected_module" value="ensemble"/>
262 <param name="selected_estimator" value="AdaBoostClassifier"/> 315 <param name="selected_estimator" value="AdaBoostClassifier"/>
263 <output name="outfile" file="pipeline08" compare="sim_size" delta="1"/> 316 <output name="outfile" file="pipeline08" compare="sim_size" delta="5"/>
264 </test> 317 </test>
265 <test> 318 <test>
266 <conditional name="component_selector"> 319 <conditional name="component_selector">
267 <param name="component_type" value="skrebate"/> 320 <param name="component_type" value="skrebate"/>
268 <conditional name="skrebate_selector"> 321 <conditional name="skrebate_selector">
270 <param name="text_params" value="n_features_to_select=3, n_neighbors=100"/> 323 <param name="text_params" value="n_features_to_select=3, n_neighbors=100"/>
271 </conditional> 324 </conditional>
272 </conditional> 325 </conditional>
273 <param name="selected_module" value="ensemble"/> 326 <param name="selected_module" value="ensemble"/>
274 <param name="selected_estimator" value="RandomForestRegressor"/> 327 <param name="selected_estimator" value="RandomForestRegressor"/>
275 <output name="outfile" file="pipeline09" compare="sim_size" delta="1"/> 328 <output name="outfile" file="pipeline09" compare="sim_size" delta="5"/>
276 </test> 329 </test>
277 <test> 330 <test>
278 <conditional name="component_selector"> 331 <conditional name="component_selector">
279 <param name="component_type" value="skrebate"/> 332 <param name="component_type" value="None"/>
280 <conditional name="skrebate_selector"> 333 </conditional>
281 <param name="select_algorithm" value="TuRF"/> 334 <param name="selected_module" value="ensemble"/>
282 <param name="text_params" value=""/> 335 <param name="selected_estimator" value="AdaBoostRegressor"/>
283 </conditional> 336 <output name="outfile" file="pipeline10" compare="sim_size" delta="5"/>
284 </conditional> 337 </test>
285 <param name="selected_module" value="ensemble"/> 338 <test>
286 <param name="selected_estimator" value="RandomForestRegressor"/> 339 <conditional name="component_selector">
287 <output name="outfile" file="pipeline10" compare="sim_size" delta="1"/> 340 <param name="component_type" value="imblearn"/>
341 <conditional name="imblearn_selector">
342 <param name="select_algorithm" value="under_sampling.EditedNearestNeighbours"/>
343 </conditional>
344 </conditional>
345 <param name="selected_module" value="ensemble"/>
346 <param name="selected_estimator" value="RandomForestClassifier"/>
347 <output name="outfile" file="pipeline11" compare="sim_size" delta="5"/>
288 </test> 348 </test>
289 <test expect_failure="true"> 349 <test expect_failure="true">
290 <conditional name="component_selector"> 350 <conditional name="component_selector">
291 <param name="component_type" value="None"/> 351 <param name="component_type" value="None"/>
292 </conditional> 352 </conditional>
293 <param name="selected_module" value="ensemble"/> 353 <param name="selected_module" value="ensemble"/>
294 <param name="selected_estimator" value="RandomForestRegressor"/> 354 <param name="selected_estimator" value="RandomForestRegressor"/>
295 <param name="text_params" value="n_estimators=__import__('os').system('ls ~')"/> 355 <param name="text_params" value="n_estimators=__import__('os').system('ls ~')"/>
356 </test>
357 <test>
358 <conditional name="component_selector">
359 <param name="component_type" value="feature_selection"/>
360 <conditional name="fs_algorithm_selector">
361 <param name="selected_algorithm" value="RFE"/>
362 <conditional name="estimator_selector">
363 <param name="selected_module" value="xgboost"/>
364 <param name="selected_estimator" value="XGBRegressor"/>
365 <param name="text_params" value="random_state=0"/>
366 </conditional>
367 </conditional>
368 </conditional>
369 <section name="final_estimator">
370 <conditional name="estimator_selector">
371 <param name="selected_module" value="none"/>
372 </conditional>
373 </section>
374 <output name="outfile" file="pipeline12" compare="sim_size" delta="5"/>
296 </test> 375 </test>
297 </tests> 376 </tests>
298 <help> 377 <help>
299 <![CDATA[ 378 <![CDATA[
300 **What it does** 379 **What it does**
326 ]]> 405 ]]>
327 </help> 406 </help>
328 <expand macro="sklearn_citation"> 407 <expand macro="sklearn_citation">
329 <expand macro="skrebate_citation"/> 408 <expand macro="skrebate_citation"/>
330 <expand macro="xgboost_citation"/> 409 <expand macro="xgboost_citation"/>
410 <expand macro="imblearn_citation"/>
331 </expand> 411 </expand>
332 </tool> 412 </tool>