[PYTHON] Un commentaire sur l'algorithme de Boruta

Omission

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.

commentaire

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".

スクリーンショット 2020-05-16 0.07.35.png 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()
スクリーンショット 2020-05-16 1.36.19.png

Comme vous pouvez le voir sur le graphique, il est assez différent de la zone de rejet.

Herbe

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

Un commentaire sur l'algorithme de Boruta
Algorithme A * (édition Python)
Créer une salle de classe sur Jupyterhub
Construire un environnement Python sur Mac
matplotlib: insérer un commentaire dans le graphique de l'axe des temps
Gymnastique algorithmique 24 Inverser une liste liée
Construire un environnement Python sur Ubuntu
Créer un environnement Python sur Mac (2017/4)
Installez Arch Linux sur DeskMini A300
Ecrire des algorithmes A * (A-star) en Python
Exécutez un serveur Linux avec GCP
Créer un service SlackBot sur Pepper
Implémenter l'application Django sur Hy
Exécutez Matplotlib sur un conteneur Docker
Créer un environnement Linux sur Windows 10
Créer un environnement python dans centos
Exécutez headless-chrome sur une image basée sur Debian
Commentaire sur Pull Request de CircleCI
Utilisation d'une console série sur Ubuntu 20.04
Exécutez TensorFlow2 sur le serveur VPS
Implémentation d'un algorithme simple en Python 2
Exécutez un algorithme simple en Python
Enregistrez le package avec PyPI
Créer un environnement python3 sur CentOS7
Gymnastique algorithmique 22 Mise au carré d'un tableau trié
Cause une erreur de bus sur x86