SubspaceScout
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sheshe import SubspaceScout, ModalBoundaryClustering
X, y = load_iris(return_X_y=True)
scout = SubspaceScout().fit(X, y)
pair = scout.results_[0]["features"]
ModalBoundaryClustering().fit(X[:, pair], y).plot_classes(X[:, pair], y)
plt.show()
Identifica subconjuntos de características informativos para que ModalBoundaryClustering se ejecute solo donde importa en espacios de alta dimensión. Usa información mutua u opcionalmente calificadores basados en modelos para clasificar interacciones y emplea búsqueda en haz para enumerar subespacios prometedores.
Formulación matemática
La información mutua entre un subconjunto X y el objetivo Y es I(X;Y)=∑_{x,y} p(x,y) log(p(x,y)/(p(x)p(y))).
El objetivo de sinergia para un conjunto S es Synergy(S) = I(S;Y) - ∑_{i∈S} I(X_i;Y), capturando información más allá de las características individuales.
La búsqueda en haz crece subespacios orden por orden y retiene aquellos con mayores puntuaciones.
Ejemplo
from sheshe import SubspaceScout
scout = SubspaceScout()
scout.fit(X, y)
subspaces = scout.results_
Ejemplos de uso
from sheshe import SubspaceScout
scout = SubspaceScout(random_state=0)
scout.fit(X, y) # fit
from sheshe import SubspaceScout
scout = SubspaceScout(random_state=0).fit(X, y)
results = scout.results_ # access discovered subspaces
Ejemplos adicionales
from sheshe import SubspaceScout
scout = SubspaceScout(
# model_method='lightgbm', # por defecto usa información mutua
max_order=4,
top_m=50,
base_pairs_limit=12,
beam_width=10,
extend_candidate_pool=16,
branch_per_parent=4,
marginal_gain_min=1e-3,
max_eval_per_order=150,
sample_size=4096,
time_budget_s=None,
task='classification',
random_state=0,
)
subspaces = scout.fit(X, y)
Parámetros
model_method(Noneo"lightgbm"o"ebm", por defectoNone): modelo usado para puntuar subespacios.Noneusa información mutua.max_order(int, por defecto3): tamaño máximo de combinaciones de características a explorar.n_bins(int, por defecto8): número de bins para discretizar características.top_m(int, por defecto20): número de características preseleccionadas por información mutua individual.branch_per_parent(int, por defecto5): máximo de extensiones generadas por subespacio padre.density_occup_min(float, por defecto0.03): ocupación mínima para que un subespacio sea válido.min_support(int, por defecto30): número mínimo de muestras requerido en un subespacio.sample_size(intoNone, por defecto4096): tamaño de muestra opcional para acelerar cálculos.task("classification"o"regression", por defecto"classification"): tipo de tarea.random_state(int, por defecto0): semilla para reproducibilidad.base_pairs_limit(int, por defecto12): número máximo de pares semilla para búsquedas de orden superior.beam_width(int, por defecto12): número de candidatos retenidos en cada orden durante la búsqueda en haz.extend_candidate_pool(intoNone, por defecto16): características candidatas aleatorias por padre cuando el orden ≥3.marginal_gain_min(float, por defecto1e-3): ganancia mínima de sinergia para aceptar una extensión.max_eval_per_order(intoNone, por defecto1000): límite de evaluaciones de información mutua por orden.time_budget_s(floatoNone, por defectoNone): presupuesto de tiempo global en segundos parafit.objective("mi_joint"o"mi_synergy", por defecto"mi_joint"): puntuación usada para ordenar subespacios.min_per_order(int, por defecto1): número mínimo de subespacios a conservar por orden.
Métodos
fit(X, y)– descubre subespacios y los almacena enresults_.