Add feature name and importance

This commit is contained in:
Florent Guiotte 2020-05-30 16:23:35 +02:00
parent 7bff8e20d2
commit d12197661b
2 changed files with 14 additions and 5 deletions

View File

@ -33,5 +33,6 @@ def run(gt, rasters, coords, remove=None):
X = np.concatenate(X) X = np.concatenate(X)
y = np.concatenate(y) y = np.concatenate(y)
groups = np.concatenate(groups) groups = np.concatenate(groups)
Xn = rasters[0].keys()
return X, y, groups return X, y, groups, Xn

View File

@ -21,6 +21,7 @@ class Jurse2(Protocol):
def __init__(self, expe): def __init__(self, expe):
super().__init__(expe, self.__class__.__name__) super().__init__(expe, self.__class__.__name__)
self._results = {}
def _run(self): def _run(self):
self._log.info('Load data') self._log.info('Load data')
@ -44,9 +45,7 @@ class Jurse2(Protocol):
self._log.info('Run metrics') self._log.info('Run metrics')
metrics = self._run_metrics(classification, descriptors) metrics = self._run_metrics(classification, descriptors)
results = {} self._results['metrics'] = metrics
results['metrics'] = metrics
self._results = results
def _load_data(self): def _load_data(self):
data_loader = self._expe['data_loader'] data_loader = self._expe['data_loader']
@ -65,7 +64,7 @@ class Jurse2(Protocol):
return att return att
def _compute_classification(self, descriptors): def _compute_classification(self, descriptors):
X, y, groups = descriptors X, y, groups, Xn = descriptors
# CrossVal and ML # CrossVal and ML
cv = self._expe['cross_validation'] cv = self._expe['cross_validation']
@ -76,6 +75,7 @@ class Jurse2(Protocol):
y_pred = np.zeros_like(y) y_pred = np.zeros_like(y)
cl_feature_importances = []
cvi = cross_val(**cv['parameters']) cvi = cross_val(**cv['parameters'])
for train_index, test_index in cvi.split(X, y, groups): for train_index, test_index in cvi.split(X, y, groups):
cli = classifier(**cl['parameters']) cli = classifier(**cl['parameters'])
@ -86,6 +86,14 @@ class Jurse2(Protocol):
self._log.info(' - predict') self._log.info(' - predict')
y_pred[test_index] = cli.predict(X[test_index]) y_pred[test_index] = cli.predict(X[test_index])
cl_feature_importances += [classifier.feature_importances_.copy()]
cl_feature_importances = np.array(cl_feature_importances)
self._results['features'] = {
'name': Xn,
'importance': cl_feature_importances.tolist()
}
return y_pred return y_pred
def _get_results(self): def _get_results(self):