Ich frage mich, was maschinelles Lernen ist, und wenn ich es so schreibe, wie ich es mir vorstellen kann, sieht es so aus.
--Kategorie --Rückkehr --Diskriminierung
Es mag andere geben, aber ich kann nicht an sie denken. Ich verwende Irisdaten, wenn ich hier in R ein Tutorial empfehle, aber ich frage mich, ob es in Python ist. → Es scheint zu geben.
Versuchen Sie zuerst R. Das Erstellen eines Klassifikators in R mithilfe von SVM, NeuralNet, NaiveBayse, RandomForest usw. ist fast kein Grund zum Nachdenken. Unter Verwendung jeder Clustering-Methode wird ein Trainingssatz verwendet, um einen Klassifizierer zu erstellen, und der Testsatz wird ausgewertet, um festzustellen, ob er vom Klassifizierer korrekt klassifiziert werden kann.
Wenn Sie in R Daten (Iris) ausführen, können Sie die Daten von Show, Iris oder Tintenfisch verwenden.
Dies ist eine Datentabelle aller 150 Proben mit Iris-Sorten (setosa, versicolor, virginica) als erklärenden Variablen, wobei 萼 Länge, 萼 Breite, Blütenblattlänge und Blütenblattbreite als erklärende Variablen sind.
Verwenden Sie zunächst sample (), um die Hälfte zufällig in einen Trainingssatz und den Rest in einen Testsatz zu unterteilen.
##Irisdaten lesen
data(iris)
##Wählen Sie nach dem Zufallsprinzip einen halben Trainingssatz
train_ids <- sample(nrow(iris), nrow(iris)*0.5)
##Trainingsset erstellen
iris.train <- iris[train_ids,]
##Verwenden Sie die andere Hälfte als Testset
iris.test <- iris[-train_ids,]
Übrigens haben die drei Irisarten Setosa, Versicolor und Virignica die folgenden Blüten. Jeder ist gleich! Es ist ein Bestrafungsspiel, das sich beispielsweise durch die Form der Blütenblätter unterscheidet.
###SVM-Ausführung
library(kernlab)
iris.svm <- ksvm(Species~., data=iris.train)
svm.predict <- predict(iris.svm, iris.test)
###Ergebnisanzeige
table(svm.predict, iris.test$Species)
###Führen Sie neuralnet aus
library(nnet)
iris.nnet<-nnet(Species ~ ., data = iris.train, size = 3)
nnet.predict <- predict(iris.nnet, iris.test, type="class")
###Ergebnisanzeige
table( nnet.predict, iris.test$Species)
###laufen naive Bayes
library(e1071)
iris.nb <- naiveBayes(Species~., iris.train)
nbayes.predict <- predict(iris.nb, iris.test)
###Ergebnisanzeige
table(nbayes.predict, iris.test$Species)
###Zufällige Gesamtstrukturausführung
library(randomForest)
iris.rf <- randomForest(Species~., iris.train)
rf.predict <- predict(iris.rf, iris.test)
###Ergebnisanzeige
table(rf.predict, iris.test$Species)
Wenn Sie es versuchen, können Sie es mit einer korrekten Antwortrate von etwa 73/75 identifizieren, unabhängig davon, welche Methode Sie verwenden. Es sind nicht hundert Aufnahmen, aber es kann (oder auch nicht) durch Anpassen von Parametern verwaltet werden.
Um dasselbe in Python zu versuchen, verwenden Sie scicit-learn. Weitere Details finden Sie in scikit-learn tutorial.
Warum machen Sie mit Python, was Ihnen unbekannt ist, "was Sie mit R wie oben leicht machen können"? Ich kann nur sagen, dass ich es mit Python versuchen möchte. Wenn es in Soko einen Berg gibt, werde ich ihn besteigen, wenn es eine Pfütze gibt, werde ich süchtig danach sein, und wenn es einen gedeckten Tisch gibt, werde ich ihn essen.
Wenn Anaconda bereits installiert ist, ist scikit-learn bereits installiert. Importieren Sie es daher. Ich importiere, aber der Bibliotheksname ist sklearn. Iris kann auch als Datensatz in diese Bibliothek geladen werden.
from sklearn import svm, datasets
iris = datasets.load_iris()
Der Inhalt kann durch Drucken (iris.data) oder Drucken (iris.target) ermittelt werden. Iris.data verfügt jedoch über eine erklärende Variable und iris.target über eine objektive Variable. Teilen Sie dies in einen Trainingsdatensatz und einen Testdatensatz ein. In R habe ich die Funktion sample () verwendet, aber im Fall von scikit-learn gibt es in sklearn.cross_varidation eine Methode namens train_test_split (). Jetzt habe ich, wie in R, die Hälfte in einen Trainingssatz (iris_data_train, iris_target_train) und einen Testsatz (iris_data_test, iris_target_test) aufgeteilt.
from sklearn import svm, datasets
from sklearn.cross_validation import train_test_split
import numpy as np
iris = datasets.load_iris()
iris_data_train, iris_data_test, iris_target_train, iris_target_test = train_test_split(iris.data, iris.target, test_size=0.5)
Erstellen Sie mit diesem Trainingsset einen Klassifikator. Es gibt verschiedene Dinge in SVM, ist es linear? Ist es nicht linear? Ich muss verschiedene Parameter einstellen, aber das ist alles standardmäßig.
svc = svm.SVC()
svc.fit(iris_data_train, iris_target_train)
svc.predict(iris_data_test)
Ich habe fit () und Predict () in zwei Zeilen geschrieben, aber ich kann es einfach initialisieren, die Trainingsdaten und die Testdaten eingeben, damit ich es in einer Zeile schreiben kann.
iris_predict = svm.SVC().fit(iris_data_train, iris_target_train).predict(iris_data_test)
Sie können die Übereinstimmungsrate zwischen dem Ergebnis dieses svc.predict () (iris_predict) und iris_target_test sehen. In R wird es in tabellarischer Form wie in der Tabelle (svm.predict, iris.test $ Species) ausgegeben. Versuchen Sie es also gleich. Diese Tabelle heißt confusion_matrix. Mit Genauigkeit_Wert können Sie schnell die richtige Antwortrate erhalten.
from sklearn.metrics import confusion_matrix, accuracy_score
print (confusion_matrix(iris_target_test, iris_predict))
print (accuracy_score(iris_target_test, iris_predict))
Nach dem offiziellen Dokument hat confusion_matrix () das erste Argument als wahren Wert und das zweite Argument als Identifikation. Es scheint, dass es ein diskriminierender Wert des Schiffes ist, also geben Sie ihn als solchen weiter.
Es ist einfach typisierter als R, aber ich bin gekommen, um ähnliche Ergebnisse zu erzielen.
Gemäß dem obigen Dokument kann dies auch in der Figur dargestellt werden. Normalisieren Sie zunächst jede Zeile von confusion_matrix so, dass sie 1 ergibt. Ich kann diese Formel nicht selbst schreiben.
cm = confusion_matrix(iris_target_test, iris_predict)
cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
Verwenden Sie diese normalisierte Verwirrungsmatrix, um eine Heatmap mit der Funktion von matplotlib zu erstellen. Übrigens, da svc.predict () viele Male ausgeführt wird und das Ergebnis jedes Mal leicht unterschiedlich ist, unterscheidet sich der Inhalt von confusion_matrix zwischen den obigen und unteren Zahlen geringfügig.
def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Blues):
''' confusion_Funktion zur Anzeige der Matrix als Heatmap
Keyword arguments:
cm -- confusion_matrix
title --Bildtitel
cmap --Farbkarte zu verwenden
'''
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(iris.target_names))
plt.xticks(tick_marks, iris.target_names, rotation=45)
plt.yticks(tick_marks, iris.target_names)
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
Dieses Mal war alles Standard, wie z. B. svc = svm.SVC (), aber natürlich sollten Sie in der Lage sein, verschiedene Kernel für die Klassifizierung zu verwenden. Auf der Seite Beispiele der offiziellen Website von scikit-learn finden Sie verschiedene Demos und Tutorials. Wenn Sie diese benötigen, finden Sie hier einige Tipps. Ich denke ich kann es finden.
Wie in R frage ich mich, ob NeuralNet naiveBayes und randomForest ist, aber es ist wahrscheinlich dasselbe (ich habe es nicht überprüft).
Ich habe das Gefühl, einen Teil des maschinellen Lernens berührt zu haben, aber am Ende wusste ich nicht, ob Iris eine Show, ein Eichhörnchen oder ein Eichhörnchen ist.
Ursprünglich lautete der Titel "Versuch, maschinelles Lernen mit Python zu berühren", aber es wurde gesagt, dass "Berührung der aufregendste Ort ist, daher ist der Titel nicht geeignet", also habe ich ihn korrigiert.
Ich persönlich denke, dass "ein Diskriminator mit SVM mit Python machen" ein aufregender Punkt ist, aber es scheint, dass er egoistisch war. Es tut mir leid, über maschinelles Lernen wie SVM zu sprechen. Ich werde wiederkommen.
Recommended Posts