|
6 | 6 | import warnings |
7 | 7 | from sklearn.model_selection._search import BaseSearchCV |
8 | 8 |
|
| 9 | +from build.lib.openml.exceptions import PyOpenMLError |
9 | 10 | from .. import config |
10 | 11 | from ..flows import sklearn_to_flow |
11 | 12 | from ..exceptions import OpenMLCacheException |
@@ -55,8 +56,9 @@ def run_task(task, model): |
55 | 56 |
|
56 | 57 | try: |
57 | 58 | run.data_content, run.trace_content = _run_task_get_arffcontent(model, task, class_labels) |
58 | | - except AttributeError as message: |
| 59 | + except PyOpenMLError as message: |
59 | 60 | run.error_message = str(message) |
| 61 | + warnings.warn("Run terminated with error: %s" %run.error_message) |
60 | 62 |
|
61 | 63 | # now generate the flow |
62 | 64 | flow = sklearn_to_flow(model) |
@@ -124,17 +126,25 @@ def _run_task_get_arffcontent(model, task, class_labels): |
124 | 126 | testX = X[test_indices] |
125 | 127 | testY = Y[test_indices] |
126 | 128 |
|
127 | | - model.fit(trainX, trainY) |
128 | | - if isinstance(model, BaseSearchCV): |
129 | | - _add_results_to_arfftrace(arff_tracecontent, fold_no, model, rep_no) |
| 129 | + try: |
| 130 | + model.fit(trainX, trainY) |
| 131 | + |
| 132 | + if isinstance(model, BaseSearchCV): |
| 133 | + _add_results_to_arfftrace(arff_tracecontent, fold_no, model, rep_no) |
| 134 | + model_classes = model.best_estimator_.classes_ |
| 135 | + else: |
| 136 | + model_classes = model.classes_ |
| 137 | + except AttributeError as e: |
| 138 | + # typically happens when training a regressor on classification task |
| 139 | + raise PyOpenMLError(str(e)) |
130 | 140 |
|
131 | 141 | ProbaY = model.predict_proba(testX) |
132 | 142 | PredY = model.predict(testX) |
133 | 143 | if ProbaY.shape[1] != len(class_labels): |
134 | 144 | warnings.warn("Repeat %d Fold %d: estimator only predicted for %d/%d classes!" %(rep_no, fold_no, ProbaY.shape[1], len(class_labels))) |
135 | 145 |
|
136 | 146 | for i in range(0, len(test_indices)): |
137 | | - arff_line = _prediction_to_row(rep_no, fold_no, test_indices[i], class_labels[testY[i]], PredY[i], ProbaY[i], class_labels, model.classes_) |
| 147 | + arff_line = _prediction_to_row(rep_no, fold_no, test_indices[i], class_labels[testY[i]], PredY[i], ProbaY[i], class_labels, model_classes) |
138 | 148 | arff_datacontent.append(arff_line) |
139 | 149 |
|
140 | 150 | fold_no = fold_no + 1 |
|
0 commit comments