Source code for brew.generation.random_subspace
from brew.base import Ensemble
from brew.combination.rules import majority_vote_rule
from .base import PoolGenerator
import numpy as np
from sklearn.ensemble import BaggingClassifier
[docs]class RandomSubspace(PoolGenerator):
def __init__(self, base_classifier=None, n_classifiers=100, combination_rule=majority_vote_rule, max_features=0.5):
self.base_classifier = base_classifier
self.n_classifiers = n_classifiers
self.combination_rule = combination_rule
self.sk_random_subspace = BaggingClassifier(base_estimator=base_classifier,
n_estimators=n_classifiers, max_samples=1.0, max_features=max_features)
self.classifiers = None
self.ensemble = None
def fit(self, X, y):
self.X = X
self.y = y
self.sk_random_subspace.fit(X, y)
self.classifiers = self.sk_random_subspace.estimators_
self.ensemble = Ensemble(classifiers=self.classifiers)
self.classes_ = set(y)
return self
def predict(self, X):
#TODO usar combinator
y = []
for i in range(X.shape[0]):
d = {}
mx = None
for idx, classifier in enumerate(self.classifiers):
mask = np.zeros(X.shape[1], bool)
mask[self.sk_random_subspace.estimators_features_[idx]] = True
[out] = classifier.predict(X[i][mask])
d[out] = d[out] + 1 if out in d else 1
if mx == None or d[mx] < d[out]:
mx = out
y = y + [mx]
y = map(lambda e: self.sk_random_subspace.classes_[e], y)
return np.asarray(y)