[PYTHON] Wie man Shogun benutzt

Ein Memorandum von SHOGUN, einer Bibliothek für maschinelles Lernen, die unter hier verfügbar ist. Die Installationsmethode wird hier beschrieben.

1. Beschriften


Ein Beispiel für eine binäre Bezeichnung, die eine binäre Bezeichnung ist. Dargestellt durch -1 oder 1. Es kann aus einem Array oder einer CSV-Datei erstellt werden.

from modshogun import BinaryLabels

#Generiere zufällig 5 Labels
label = BinaryLabels(5)

label.get_num_labels() 
→ 5

label.get_values()
→ array([  2.00000000e+000,   2.00000000e+000,   1.38338381e-322,0.00000000e+000,   0.00000000e+000])

from modshogun import CSVFile

#Kann aus einer im Voraus erstellten CSV-Datei erstellt werden
label_from_csv = BinaryLabels(CSVFile(file_path))

2. Funktionen


Es kann aus einer Numpy-Matrix oder einer CSV-Datei erstellt werden. Beachten Sie, dass eine Feature-Menge in einer Spalte und nicht in einer Zeile ausgedrückt wird.

from modshogun import RealFeatures
import numpy as np

#3x3 Zufallsmatrix
feat_arr = np.random.rand(3, 3)
→ array([[ 0.02818103,  0.72093824,  0.92727711],
       [ 0.66853622,  0.14594737,  0.90522684],
       [ 0.97941639,  0.14188234,  0.80854797]])

#Initialisierung realer Features
features = RealFeatures(feat_arr)

#Anzeige der Funktionsmenge
features.get_feature_matrix(features)
→ array([[ 0.02818103,  0.72093824,  0.92727711],
       [ 0.66853622,  0.14594737,  0.90522684],
       [ 0.97941639,  0.14188234,  0.80854797]])

#Rufen Sie die Feature-Menge einer bestimmten Spalte ab
features.get_feature_vector(1)
→array([ 0.72093824,  0.14594737,  0.14188234])

#Arten von Funktionen(Anzahl der Reihen)
features.get_num_features()
→3

#Anzahl der Funktionen(Anzahl der Spalten)
features.get_num_vectors()
→3

from modshogun import CSVFile

#Dies kann natürlich auch aus einer CSV-Datei gelesen werden.
feats_from_csv = RealFeatures(CSVFile(file_path))

3. Kernel


Ein Beispiel mit einem Chi-Quadrat-Kernel.

from modshogun import Chi2Kernel, RealFeatures, CSVFile

#Trainingsdaten
feats_train = RealFeatures(CSVFile(file_path))

#Testdaten
feats_test = RealFeatures(CSVFile(file_path))

#Kernelbreite
width = 1.4

#size_Cache-Einstellungen
size_cache = 10

#Kernel-Generierung
kernel = Chi2Kernel(feats_train, feats_train, width, size_cache)

#Kernel-Training
kernel.init(feats_train, feats_test)

4.SVMLight


Klassifizierung nach Support Vector Machine mit SVMLight

from modshogun import SVMLight, CSVFile, BinaryLabels, RealFeatures, Chi2Kernel

feats_train = RealFeatures(CSVFile(train_data_file_path))
feats_test = RealFeatures(CSVFile(test_data_file_path))

kernel = Chi2Kernel(feats_train, feats_train, 1.4, 10)

labels = BinaryLabels(CSVFile(label_traindat_path))
 
C = 1.2
epsilon = 1e-5
num_threads = 1
svm = SVMLight(C, kernel, labels)
svm.set_epsilon(epsilon)
svm.parallel.set_num_threads(num_threads)
svm.train()

kernel.init(feats_train, feats_test)
res = svm.apply().get_labels()

res
→array(Ergebnisetikett)

5. Kreuztest


Importieren Sie die CrossValidation-Klasse. So initialisieren Sie CrossValidation

from modshogun import LibLinear, BinalyLabels, RealFeatures, CrossValidationSplitting, ContingencyTableEvaluation, CSVFile, ACCURACY

#Sorter
classifier = LibLinear(L2R_L2LOSS_SVC)
#Funktionswert
features = RealFeatures(CSVFile(feature_file_path))
#Etikette
labels = BinalyLabels(CSVFile(label_file_path))


#SplittingStrategy scheint in der Lage zu sein, anzugeben, wie die Daten aufgeteilt werden sollen. Ich weiß nicht viel darüber. In diesem Beispiel ist es in fünf Teile unterteilt.
splitting_strategy = CrossValidationSplitting(labels, 5)

#Bewertungskriterien Klasse. GENAUIGKEIT ist nur eine in EContingencyTableMeasureType deklarierte Konstante.
evaluation_criterium = ContingencyTableEvaluation(ACCURACY)

#Kreuzvalidierungsklasse.
cross_validation = CrossValidation(classifier, features, labels. splitting_strategy, evaluation_criterium)
cross_validation.set_autolock(False)

#Einstellen der Anzahl der Wiederholungen
cross_validation.set_num_runs(10)

#95%Vertrauensintervall einstellen? ich bin mir nicht sicher
cross_validation.set_conf_int_alpha(0.05)

#Der Rückgabewert ist die CEvaluationResult-Klasse
result = cross_validation.evaluate()

#Sie können den Durchschnittswert der Kreuztestergebnisse erhalten.
print result.mean

#Klicken Sie hier, wenn Sie alles andere ausgeben möchten
print result.print_result()

6. Rastersuche


Wenn Sie dies bisher tun können, kann die Rastersuche ganz einfach durchgeführt werden. GridSearchModelSelection der CModelSelection-Klasse

Wenn Sie es übergeben und initialisieren, können Sie das Raster bereits durchsuchen.

---Lassen Sie bis zur Initialisierung der CrossValidation-Klasse mit LibLinear aus---

from modshogun import ModelSelectionParameters, R_EXP
from modsghoun import GridSearchModelSelection

#Ein Objekt, das zu ändernde Parameter speichert
param_tree_root = ModelSelectionParameters()

#Parameter C1
C1 = ModelSelectionParameters("C1")
param_tree_root.append_child(c1)

build_values()Minimalwert, Maximalwert, Schritt(Parametererhöhung)Einstellen. R._EXP(Index),R_LOG(Log),R_LINEAR(linear)Es gibt drei Typen, Details sind jedoch unbekannt.
c1.build_values(-1.0, 0.0, R_EXP)

c2 = ModelSelectionParameters("C2")
param_tree_root.append_child(c2)
c2.build_values(-1.0, 0.0, R_EXP)

#Drucken Sie hier_tree()Wenn Sie param ausführen_tree_Sie können sehen, dass die Wurzel eine Baumstruktur hat.
param_tree_root.print_tree()
→root with
	 with values: vector=[0.5,1]
	 with values: vector=[0.5,1]

#Rastersuchklasse generieren
model_selection = GridSearchModelSelection(cross_validation, param_tree_root)

#Dadurch werden automatisch die besten Parameter ermittelt und ein Objekt der Klasse CParameterCombination zurückgegeben. Wenn Sie True als Argument übergeben, wird die Kombination jedes Parameters und des Ergebnisses ausgegeben.
best_parameters = model_selection.select_model()

#Es ist auch möglich, die am besten zurückgegebenen Parameter als Klassifikator- oder Modellparameter anzuwenden.
best_parameters.apply_to_machine(classifier)
result = cross_validation.evaluate()

7. Speichern und laden Sie das erstellte Modell


Objekte können mit den Funktionen save_serializable () und load_serializable () von CSGObject gespeichert und geladen werden, das die Grundlage für fast alle Klassen bildet.

from modshogun import SerializableAsciiFile
from modshogun import MulticlassLabels
from numpy import array

save_labels = MulticlassLabels(array([1.0, 2, 3]))

#Dateinameneinstellung Unterstützt csv und asc
save_file = SerializableAsciiFile("foo.csv", "w")
#Datei speichern
save_labels.save_serializable(save_file)

load_file = SerializableAsciiFile("foo.csv", "r")
load_labels = MulticlassLabels()
load_labels.load_serializable(load_file)
→[ 1.  2.  3.]

8. Spuckprotokoll


Sie können Protokolle für jedes Objekt ausspucken. Übergeben Sie MSG_DEBUG nur für das Debug-Protokoll und MSG_ERROR nur für das Fehlerprotokoll. Mit EMessageType deklariert.

from modshogun import MSG_DEBUG, MSG_ERROR
from modshogun import Chi2Kernel
from modshogun import LibSVM

kernel = Chi2Kernel()
svm = LibSVM()

kernel.io.set_loglevel(MSG_DEBUG)
svm.io.set_loglevel(MSG_ERROR)

abschließend


Es ist etwas chaotisch. Wenn Sie also Anfragen haben, kommentieren Sie diese bitte.

Recommended Posts

Wie man Shogun benutzt
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
Verwendung von Pandas 2
Verwendung von Virtualenv
Verwendung von numpy.vectorize
Verwendung von pytest_report_header
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Verwendung von Qt Designer
Verwendung der Suche sortiert
[gensim] Verwendung von Doc2Vec
python3: Verwendung der Flasche (2)
Verstehen Sie, wie man Django-Filter verwendet
Verwendung des Generators
[Python] Verwendung von Liste 1
Verwendung von FastAPI ③ OpenAPI
Wie benutzt man Python Argparse?
Verwendung von IPython Notebook
Wie man Pandas Rolling benutzt
[Hinweis] Verwendung von virtualenv
Verwendung von Redispy-Wörterbüchern
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Go] Verwendung von "... (3 Perioden)"
So bedienen Sie GeoIp2 von Django
[Python] Verwendung von input ()
Wie benutzt man den Dekorateur?
[Einführung] Verwendung von open3d
Wie benutzt man Python Lambda?
So verwenden Sie Jupyter Notebook
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
So verwenden Sie Google Colaboratory
Verwendung von Python-Bytes