Boruta ist eine der Methoden zur Merkmalsauswahl, bei der die Bedeutung von Merkmalen verwendet wird.
Ich habe anhand der Erklärung auf der folgenden Seite studiert. Es ist eine sehr leicht verständliche Erklärung und bei Experimenten sehr hilfreich.
Der Algorithmus von Boruta verwendet die Nullhypothese, um zu bestimmen, ob ein Merkmal für die Vorhersage gültig ist. Die Wichtigkeit dieses Merkmalsbetrags entspricht der Wichtigkeit des Merkmalsbetrags, der nicht zur Diskriminierung (Rückgabe) beiträgt. ", Und führen Sie den Test durch. Wenn die Nullhypothese korrekt ist, sollten die Wichtigkeit eines Merkmals und die Kapazität von Merkmalen, die nicht zur Diskriminierung (Rückkehr) beitragen, zufällig sein, und die Wahrscheinlichkeit, dass ein Merkmal wichtiger wird, beträgt $ p = 0,5. Es sollte der Binomialverteilung von $ folgen.
Was mich hier interessiert hat, ist nicht ein Schatten-Feature, sondern die gleiche Nummer wie die ursprüngliche Feature-Dimension. Dann wird der Größenvergleich durch "die höchste Wichtigkeit eines bestimmten Merkmals VS Schattenmerkmal" durchgeführt.
Das obige Bild stammt aus [Charakteristische Auswahlmethode Boruta unter Verwendung eines zufälligen Waldes und Tests](https://aotamasaki.hatenablog.com/entry/2019/01/05/195813)So sieht auch Implementierung von boruta_py aus.
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()
...
Wenn jedoch die Wahrscheinlichkeitsvariable, die die maximale Merkmalsbedeutung des Schattenmerkmals darstellt, $ S_ {\ mathrm {max}} $ ist,
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
Deshalb,
\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
Wenn die Nullhypothese korrekt ist, sollte die Wahrscheinlichkeit, dass ein Merkmal größer als die maximale Merkmalsbedeutung des Schattenmerkmals ist, der Binomialverteilung von $ p = (1/2) ^ 4 $ folgen.
%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
#Anzahl von Versuchen
N = 100
#Anzahl der Vorkommen während der Anzahl der Versuche(Array)
k = np.arange(N+1)
#Diagramm grafisch darstellen
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()
Wie Sie in der Grafik sehen können, unterscheidet es sich erheblich vom Ablehnungsbereich.
Ich habe bisher geschrieben, aber wenn ich tatsächlich "Boruta" benutze, funktioniert es dann richtig? Stimmt etwas mit der Denkweise nicht?
Recommended Posts