Ein Memorandum von SHOGUN, einer Bibliothek für maschinelles Lernen, die unter hier verfügbar ist. Die Installationsmethode wird hier beschrieben.
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))
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))
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)
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()
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()
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.]
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)
Es ist etwas chaotisch. Wenn Sie also Anfragen haben, kommentieren Sie diese bitte.
Recommended Posts