-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Konfigurationsparameter für approximative Verfahren #269
Comments
Hallo, ich habe gerade folgendes Problem: |
Du meinst im Cython-Code? Zu welchem Zweck brauchst du das denn dort? Ich war eigentlich der Meinung, dass das nur im C++-Code gebraucht wird und tatsächlich wird dieser Typ auch bisher nirgendwo sonst verwendet. Du musst übrigens in Cython-Wrappern ( |
Ah okay, dann brauch ich ja zum Beispiel |
Genau. |
Um die approximativen Verfahren aus #226 verwenden zu können, wird eine Möglichkeit benötigt um den Algorithmus so zu konfigurieren dass diese verwendet werden. Hierfür sind folgende Änderungen notwendig:
Damit aus dem Cython-Code heraus, die neuen C++-Klassen verwendet werden können, müssen entsprechende Deklarationen hinzugefügt werden:
thresholds.pxd
muss im Blockcdef extern from "cpp/thresholds.h"
, analog zu der KlasseExactThresholdsImpl
, eine Deklaration für die KlasseApproximateThresholdsImpl
hinzugefügt werden.binning.pxd
muss das selbe für die KlassenIBinning
,EqualFrequencyBinning
undEqualWidthBinning
gemacht werden.Es werden Cython-Wrapper-Klassen für die neuen C++-Klassen benötigt, die aus dem Python-Code heraus instanziiert werden können.
binning.pxd
müssen neue Cython-KlassenBinning
,EqualWidthBinning
undEqualFrequencyBinning
definiert werden, die dann in einer neuen Dateibinning.pyx
implementiert werden. Eine gute Vorlage hierfür sind die KlassenInstanceSubSampling
,Bagging
undRandomInstanceSubsetSelection
aussub_sampling.pxd/pyx
.thresholds.pxd
muss, analog zur KlasseExactThresholdsFactory
, eine neue Cython-KlasseApproximateThresholdsFactory
definiert werden, die dann inthresholds.pyx
implementiert wird. Diese Klasse muss ein Objekt der Cython-KlasseBinning
und die Anzahl zu verwendender Bins als Konstruktorargumente entgegen nehmen und als Klassenattribute speichern so dass sie in dercreate
-Funktion an das zu erzeugende Objekt der C++-KlasseApproximateThresholdsImpl
übergeben werden können.Es muss ein neues Kommandozeilenargument zu der Klasse
ArgumentParserBuilder
inargs.py
hinzugefügt werden. Da die Verfahren prinzipiell sowohl für den Boosting-Regellerner, als auch für den SeCo-Regellerner verwendet werden können, sollte das neue Argument innerhalb der Funktionadd_rule_learner_arguments
hinzugefügt werden. Als Name für das Argument, würde sich--feature-binning
anbieten. Der Typ mussoptional_string
sein. Außerdem kann es nichts schaden, das neue Argument in der Readme-Datei zu dokumentieren. Das Argument--instance-sub-sampling
hat eine ähnliche Semantik. Insbesondere, dass man zusätzliche, optionale Argumente als Python-Dictionary angeben kann so wie es in der Readme für dieses Argument beschrieben wird. Das ist in unserem Fall praktisch um zusätzlich zum Namen der zu verwendenden Binning-Methode auf die Anzahl-Bins angeben zu können.In
rule_learners.py
muss eine neue Funktioncreate_thresholds_factory
hinzugefügt werden, die ein Objekt der Cython-KlasseThresholdsFactory
zurückgibt. Als Vorlage eignet sich die Funktioncreate_instance_sub_sampling
. Mit Hilfe der Funktionparse_prefix_and_dict
kann der Wert des oben definierten Kommandozeilenarguments abgefragt werden und anschließend, falls der Wertequal-width
oderequal-frequency
ist, außerdem der Wert für ein zusätzliches, optionales argumentnum_bins
ermittelt werden. Dieser Wert kann dann zur Instanziierung eines neuen Objekts der Cython-KlasseBinning
genutzt werden, das wiederum als Konstruktorarugment an ein neues Objekt vom TypApproximateThresholdsFactory
übergeben wird. Falls der WertNone
an diecreate_thresholds_factory
-Methode übergeben wird, muss stattdessen ein Objekt vom TypExactThresholdsFactory
zurück gegeben werden.In
boosting_learners.py
undseco_learners.py
gibt es jeweils eine Funktion_create_sequential_rule_induction
in der aktuell ein Objekt vom TypExactThresholdsFactory
initialisiert wird. Statt diesem Objekt muss der Rückgabewert der neuen Funktioncreate_thresholds_factory
verwendet werden.The text was updated successfully, but these errors were encountered: