Boruta est l'une des méthodes de sélection de fonctionnalités utilisant l'importance des fonctionnalités.
J'ai étudié en me référant à l'explication sur le site suivant. C'est une explication très facile à comprendre, et elle est très utile pour les expériences.
L'algorithme de Boruta utilise l'hypothèse nulle pour déterminer si une caractéristique est valide pour la prédiction. L'importance de ce montant de fonction est la même que celle du montant de fonction qui ne contribue pas à la discrimination (retour). ", Et effectuez le test. Si l'hypothèse nulle est correcte, l'importance d'une caractéristique et la capacité des caractéristiques qui ne contribuent pas à la discrimination (retour) doivent être aléatoires, et la probabilité qu'une caractéristique devienne plus importante est $ p = 0,5. Il doit suivre la distribution binomiale de $.
Ce qui m'intéressait ici, ce n'est pas une fonction d'ombre, mais le même nombre que la dimension de la fonction d'origine. Ensuite, la comparaison de taille est effectuée par "la plus haute importance d'une certaine fonctionnalité VS Shadow Feature".
L'image ci-dessus est tirée de [Méthode de sélection des caractéristiques Boruta utilisant une forêt aléatoire et un test](https://aotamasaki.hatenablog.com/entry/2019/01/05/195813)Implémentation de boruta_py ressemble également à cela.
def _do_tests(self, dec_reg, hit_reg, _iter):
active_features = np.where(dec_reg >= 0)[0]
hits = hit_reg[active_features]
# get uncorrected p values based on hit_reg
to_accept_ps = sp.stats.binom.sf(hits - 1, _iter, .5).flatten()
to_reject_ps = sp.stats.binom.cdf(hits, _iter, .5).flatten()
...
Cependant, si la variable de probabilité qui représente la plus grande importance de fonctionnalité de Shadow Feature est $ S_ {\ mathrm {max}} $,
S_{\mathrm{max}} \leq F_1 \Leftrightarrow S_1\leq F_1 \wedge S_2\leq F_1 \wedge S_3\leq F_1 \wedge S_4\leq F_1
Donc,
\mathrm{Pr}(S_{\mathrm{max}} \leq F_1) = \mathrm{Pr}(S_1 \leq F_1)\mathrm{Pr}(S_2 \leq F_1)\mathrm{Pr}(S_3 \leq F_1)\mathrm{Pr}(S_4 \leq F_1) = \left(\frac{1}{2}\right)^4
Si l'hypothèse nulle est correcte, alors la probabilité qu'une caractéristique soit supérieure à l'importance maximale de la fonction d'ombre doit suivre la distribution binomiale de $ p = (1/2) ^ 4 $.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import binom
plt.rcParams['font.family'] = 'IPAPGothic'
plt.rcParams["figure.figsize"] = [12, 6]
plt.rcParams['font.size'] = 20
plt.rcParams['xtick.labelsize'] = 15
plt.rcParams['ytick.labelsize'] = 15
#Nombre d'essais
N = 100
#Nombre d'occurrences pendant le nombre d'essais(Tableau)
k = np.arange(N+1)
#Tracer sur le graphique
fig, ax = plt.subplots(1,1)
ax.plot(k, binom.pmf(k, N, p=0.5), 'bo', ms=8, label='p=0.5')
ax.vlines(k, 0, binom.pmf(k, N, p), colors='b', lw=1, alpha=0.2)
ax.plot(k, binom.pmf(k, N, p=0.5**4), 'x', ms=8, color='r', label='p=0.5^4')
ax.vlines(k, 0, binom.pmf(k, N, p=0.5**4), colors='r', lw=1, alpha=0.2)
ax.set_xlabel('iterarion')
ax.set_ylabel('probability')
ax.legend()
plt.show()
Comme vous pouvez le voir sur le graphique, il est assez différent de la zone de rejet.
J'ai écrit jusqu'à présent, mais quand j'utilise réellement Boruta
, cela fonctionne-t-il correctement? Alors, y a-t-il quelque chose qui cloche dans la façon de penser?
Recommended Posts