Aidemy 2020/9/24
Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur AI-spezialisierten Schule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dies ist der erste Beitrag zum überwachten Lernen. Freut mich, dich kennenzulernen.
Was diesmal zu lernen ・ Überblick über das betreute Lernen ・ Arten des überwachten Lernens (Klassifizierung)
・ Als Voraussetzung ist überwachtes Lernen eine "Methode, Lerndaten und korrekte Antwortdaten (Lehrerdaten) zu geben und bis zur richtigen Antwort zu denken", und der Zweck besteht darin, unbekannte Daten dadurch vorherzusagen. ・ Überwachtes Lernen kann in "Klassifizierungsprobleme" und "Rückkehrprobleme" unterteilt werden. Dieses Mal werden wir uns das Klassifizierungsproblem ansehen. -Das Klassifizierungsproblem ist __ "Lernen der Daten nach Kategorien geteilt und Vorhersagen der Kategorie (diskreter Wert) unbekannter Daten" __. Beispielsweise können "Erkennung handgeschriebener Zeichen von 0 bis 9", "Identifizierung dessen, was auf dem Bild erscheint", "Vorhersage des Verfassers von Sätzen", "Identifizierung von Männern und Frauen in Gesichtsfotos" und dergleichen erwähnt werden.
-Klassifizierungsprobleme werden in __ "binäre Klassifizierung" und "Mehrfachzeitraumklassifizierung" __ unterteilt. ・ Die binäre Klassifizierung klassifiziert wie die Geschlechtserkennung danach, ob sie zu einer Gruppe gehört oder nicht. In einigen Fällen können die Klassen durch eine gerade Linie identifiziert werden (lineare Klassifizierung). -Mehr-Term-Klassifizierung hat viele Klassen, die klassifiziert werden können, wie z. B. die Erkennung von Zahlen.
・ Datenvorverarbeitung → Algorithmusauswahl → Modelllernen → Modellvorhersage
from sklearn.datasets import make_classification
#Erstellen Sie Daten mit 50 Daten, 3 Klassen, 2 Features, 1 zusätzlichen Features und 0 Seeds
X,y=make_classification(n_samples=50,n_classes=3,n_features=2,n_redundant=1,random_state=0)
-Sie können den in der scikit-learn-Bibliothek (sklearn) bereitgestellten Beispieldatensatz aufrufen.
#Rufen Sie die Irisdaten auf, die ein Beispiel für Iris sind.
#Modul importieren (Datensatz zum Abrufen von Irisdaten),Trainiere, um die Holdout-Methode anzuwenden_test_Import von sklearn getrennt)
from sklearn import datasets
from sklearn.model_serection import train_test_split
import numpy as np
#Holen Sie sich Iris-Daten
iris=datasets.load_iris()
#Teilen Sie in Trainingsdaten und Testdaten (Holdout-Methode):Testrate 30%)
X=iris.data[:,[0,2]] #Von den Merkmalen der Iris die 0. und 2. Spalte ("Gaku-Länge" und "Blütenblattlänge")
#(= Lerndaten)
y=iris.target #Iris Klassenetikett (= Lehrerdaten mit korrekten Sorten geschrieben)
train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.3,random_state=0)
・ Was Sie lernen und vorhersagen, wird als Modell bezeichnet. Mit scikit-learn können Sie ein Modell wie Ruby on Rails aufrufen und es trainieren und Vorhersagen treffen lassen. -Erstellen eines Modells: __ model () __ ・ Lernen: __model name.fit (Trainingsdaten trainieren, Lehrerdaten trainieren) __ ・ Vorhersage: __model name.predict (data) __
#Importieren Sie ein Modell namens LogisticRegression.
from sklearn.liner_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
#Datenerstellung (50 Daten, 2 Klassen, 3 Funktionen) und Klassifizierung in Zug und Test
X,y = make_classification(n_samples=50,n_classes=2,n_features=3,n_redundant=0,random_state=0)
train_X,test_X,train_y,test_y = train_test_split(X,y,random_state=0)
#Modellierung, Training, Vorhersage
model = LogisticRegression(random_state=0)
model.fit(train_X,train_y)
pred_y = model.predict(test_X)
print(pred_y) #[1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 1 1 1]
print(test_y) #[1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1 0 1 1 1]
-__ Logistische Regression : Die Grenzlinie ist gerade → nur lineare Klassifizierung. Geringe Generalisierungsfähigkeit. - Lineare SVM__: Rand ist gerade → nur lineare Klassifizierung. Hohe Generalisierungsfähigkeit. Lernen / Vorhersagen ist langsam. -__ Nichtlineare SVM : Konvertiert die nichtlineare Klassifizierung in eine lineare Klassifizierung und verarbeitet sie als lineare SVM. - Baum bestimmen__: Bestimmt die Klasse für jedes Datenelement. Es ist nicht leicht von Ausreißern betroffen. Nur lineare Klassifizierung. Nicht verallgemeinert. -__ Random Forest__: Bestimmen Sie die Klasse mithilfe des Bestimmungsbaums für zufällige Daten. Eine nichtlineare Klassifizierung ist ebenfalls möglich. -__ K-NN__: Extrahiert Lehrerdaten ähnlich den Vorhersagedaten und gibt die häufigste Klasse als Vorhersageergebnis aus. Die Lernkosten betragen 0. Hohe Vorhersagegenauigkeit. Es verlangsamt sich mit zunehmender Datenmenge.
-Hier wird das Vorhersageergebnis des Modells in einem Diagramm (Streudiagramm) angezeigt und durch Farbcodierung visualisiert. ・ (Überprüfung) Streudiagrammerstellung: plt.scatter (Daten der x-Achse, Daten der y-Achse, c = [Liste], marker = "Markertyp", cmap = "Farbsystem") -__ Np.meshgrid (x, y) __, das unten angezeigt wird, ist eine Funktion, die Koordinaten (x, y) in eine Matrix konvertiert und diese übergibt.
#Importieren Sie plt, um ein Diagramm zu erstellen, und np, um Koordinaten abzurufen
import matplotlib.pyplot as plt
import numpy as np
#plt.Erstellen eines Streudiagramms mit Streuung (die 0. Spalte der Trainingsdaten X ist die x-Achse und die 1. Spalte ist die y-Achse)
plt.scatter(X[:,0],X[:,1],c=y,marker=".",cmap=matplotlib.cm.get_cmap(name="cool"),alpha=1.0)
#Geben Sie den Bereich der x-Achse (x1) und der y-Achse (x2) an, der als Nächstes angegeben werden soll
x1_min,x1_max = X[:,0].min()-1, X[:,0].max()+1
x2_min,x2_max = X[:,1].min()-1, X[:,1].max()+1
#np.Mit Meshgrid 0 Grafik.Speichern Sie die x-Koordinate des Schnittpunkts von x1 und x2 getrennt durch 02 in xx1 und die y-Koordinate in xx2 (np.arrange(Mindestwert,Maximalwert,Intervall))
xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,0.02),np.arange(x2_min,x2_max,0.02))
#Koordinaten (xx1,Vorhersage mit Modell für die Folge von xx2) und plt.Zeichnen Sie das Ergebnis mit comtourf
Z=model.predict(np.array([xx1.ravel(),xx2.ravel()]).T).reshape((xx1.shape))
plt.contourf(xx1,xx2,Z,alpha=0.4,cmap=matplotlib.cm.get_cmap(name="Wistia"))
#Ausgabe mit Diagrammbereich, Titel, Beschriftungsnamen und Rastereinstellungen
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
plt.title("classification data using LogisticRegression")
plt.xlabel("Sepal length")
plt.ylabel("Petal length")
plt.grid(True)
plt.show()
-Borderline ist gerade → nur lineare Klassifizierung. Hohe Generalisierungsfähigkeit. Lernen / Vorhersagen ist langsam. -SVM ist eine "Support Vector Machine". Unterstützungsvektoren sind Daten, die in der Nähe anderer Klassen liegen und leicht verallgemeinert werden können, da die Grenzen so gezeichnet werden, dass diese Entfernungen am längsten sind.
-Linear SVM kann mit __LinearSVC () __ implementiert werden. Davon abgesehen kann es auf die gleiche Weise wie die logistische Regression implementiert werden.
-Konvertieren Sie die nichtlineare Klassifizierung in eine lineare Klassifizierung und verarbeiten Sie sie als lineare SVM.
k-NN
Diese Zeit ist vorbei. Vielen Dank, dass Sie so weit gelesen haben.
Recommended Posts