Klicken Sie hier bis gestern
Sie werden in 100 Tagen Ingenieur - Tag 76 - Programmierung - Über maschinelles Lernen
Sie werden Ingenieur in 100 Tagen - Tag 70 - Programmieren - Über Scraping
Sie werden in 100 Tagen Ingenieur - Tag 63 - Programmierung - Über Wahrscheinlichkeit 1
Sie werden Ingenieur in 100-Tage-Tag-59-Programmier-Über-Algorithmen
Sie werden in 100 Tagen Ingenieur --- Tag 53 - Git - Über Git
Sie werden in 100 Tagen Ingenieur - Tag 42 - Cloud - Über Cloud-Dienste
Sie werden in 100 Tagen Ingenieur - Tag 36 - Datenbank - Über die Datenbank
Sie werden Ingenieur in 100-Tage-24-Python-Grundlagen der Python-Sprache 1
Sie werden in 100 Tagen Ingenieur - Tag 18 - JavaScript - Grundlagen von JavaScript 1
Sie werden in 100 Tagen Ingenieur - 14. Tag - CSS - CSS-Grundlagen 1
Sie werden in 100 Tagen Ingenieur - Tag 6 - HTML - HTML-Grundlagen 1
Diese Zeit ist eine Fortsetzung der Geschichte über maschinelles Lernen.
Ich werde erklären, was Sie zum ersten Mal mit maschinellem Lernen tun können, aber was Sie mit maschinellem Lernen tun können Grundsätzlich gibt es drei.
· Rückkehr ・ Klassifizierung ・ Clustering
Grob gesagt wird es zu "Vorhersage", aber der Teil dessen, was "vorherzusagen" ist, ändert sich.
・ Return: Numerische Werte vorhersagen ・ Klassifizierung: Kategorien vorhersagen ・ Clustering: Fühlen Sie sich gut an
Das "Klassifizierungsmodell" dient zur Vorhersage des Kategoriewerts.
Die diesmal verwendeten Daten sind die Daten von "Iris" (Ayame), die an "Scikit-Learn" angehängt sind.
sepal length (cm) | Die Länge des Stückes |
---|---|
sepal width (cm) | Breite des Stückes |
petal length (cm) | Blütenblattlänge |
petal width (cm) | Blütenblattbreite |
Es gibt drei Arten von Iris: "Setosa", "Versicolor" und "Virginica".
Lesen wir die Daten und schauen wir uns die Daten an.
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
#Irisdaten lesen
iris = load_iris()
#In Datenrahmen konvertieren
df = pd.DataFrame(np.concatenate((iris.data, iris.target.reshape(-1,1)), axis=1),columns=iris.feature_names + ['type'])
df.head()
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | type | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | 0 |
1 | 4.9 | 3 | 1.4 | 0.2 | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0 |
3 | 4.6 | 3.1 | 1.5 | 0.2 | 0 |
4 | 5 | 3.6 | 1.4 | 0.2 | 0 |
Es handelt sich um 3 Arten von Ayame-Daten (nicht starr) und enthält 150 Zeilen mit numerischen Daten für 4 Spalten. Die letzte Spalte "Typ" ist die Sorte Ayame.
Da diesmal drei Arten von Daten verwendet werden, sind die Zahlen "0", "1" und "2".
Lassen Sie uns visualisieren, welche Art von Funktionen angezeigt werden.
import matplotlib.pyplot as plt
%matplotlib inline
#Speichern Sie Visualisierungsdaten in Variablen
x1 = df['petal length (cm)']
x2 = df['petal width (cm)']
y = df['type']
x = df[['petal length (cm)','petal width (cm)']]
#Daten zeichnen
for i in range(3):
plt.scatter(x1[y==i],x2[y==i],marker="x",label=i)
plt.legend()
plt.grid()
plt.show()
Es sieht so aus, als ob die drei Arten von Ayame ziemlich gut getrennt und zusammengefügt sind.
Versuchen wir nun Normalisierung und Standardisierung, eine der Methoden zur Verarbeitung von Daten zum maschinellen Lernen.
Die Normalisierung ist eine Methode zum Konvertieren des Minimalwerts in die Skala von 0 und des Maximalwerts in die Skala von 1. Es wird jedoch gesagt, dass die Methode unter Verwendung der Minimal- und Maximalwerte stark von den Maximal- und Minimalwerten beeinflusst wird.
Normalisierter Wert = (Wert-Minimalwert) / (Maximalwert-Minimalwert)
Durch die Standardisierung wird der Bereich der numerischen Daten so geändert, dass der Durchschnitt 0 und die Verteilung 1 beträgt. Auf diese Weise soll es widerstandsfähiger gegen Ausreißer sein als die Normalisierung.
"Standardwert = (Wertmittelwert) / Standardabweichung"
Standardisierung kann den Umfang der Daten verringern und das Lernen beschleunigen.
Wenn die Skala zwischen den einzelnen erklärenden Variablen erheblich unterschiedlich ist (Größe, Gewicht usw.) Größere Skalenvariablen wirken sich auf das Lernen aus und können durch Standardisierung behoben werden.
Normalisierung und Standardisierung können mit dem folgenden Code durchgeführt werden.
Verwenden Sie "MinMaxScaler" und "StandardScaler" als Bibliotheken.
** Datenaufteilung **
Teilen Sie zunächst die Daten für Training und Test auf. Diesmal teilen wir uns um 7: 3.
#Daten teilen
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=3)
** Normalisierung durchführen **
#Normalisierung durchführen
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
#Trainingsdaten normalisieren
x_train_norm = mms.fit_transform(x_train)
#Normalisieren Sie die Testdaten basierend auf den Trainingsdaten
x_test_norm = mms.transform(x_test)
print('Maximale Trainingsdaten: ' , x_train_norm.max())
print('Mindestwert der Trainingsdaten: ' , x_train_norm.min())
#Die Testversion basiert auf Trainingsdaten, kann also etwas anders sein.
print('Maximalwert der Testdaten: ' , x_test_norm.max())
print('Mindestwert der Testdaten: ' , x_test_norm.min())
Maximale Trainingsdaten: 1.0 Mindesttrainingsdaten: 0.0 Maximalwert der Testdaten: 1.0357142857142858 Minimale Testdaten: -0.017857142857142877
** Standardisieren **
#Standardisieren
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
x_train_std = ss.fit_transform(x_train)
x_test_std = ss.transform(x_test)
print('Durchschnittswert der Trainingsdaten: ' , x_train_std.mean())
print('Standardabweichung der Trainingsdaten: ' , x_train_std.std())
#Die Testversion basiert auf Trainingsdaten, kann also etwas anders sein.
print('Durchschnittswert der Testdaten: ' , x_test_std.mean())
print('Standardabweichung der Testdaten: ' , x_test_std.std())
Durchschnittliche Trainingsdaten: 3.425831047414769e-16 Standardabweichung der Trainingsdaten: 1.0000000000000002 Durchschnittswert der Testdaten: -0,1110109621182351 Standardabweichung der Testdaten: 1.040586519459273
Bei Standardisierung liegt der Durchschnitt nahe bei 0.
Lassen Sie uns den Unterschied zwischen dem Ergebnis der Normalisierung und Standardisierung und den Originaldaten sehen.
#Visualisieren Sie die Originaldaten nach der Normalisierung und Standardisierung
x_norm = mms.transform(x)
x_std = ss.transform(x)
plt.axis('equal')
plt.scatter(x.iloc[:,0],x.iloc[:,1], marker="x", label="org" ,c='blue')
plt.scatter(x_std[:,0] ,x_std[:,1] , marker="x", label="std" ,c='red')
plt.scatter(x_norm[:,0],x_norm[:,1], marker="x", label="norm",c='green')
plt.legend()
plt.grid()
plt.show()
Blau ist der ursprüngliche Wert, Rot sind die standardisierten Daten und Grün sind die normalisierten Daten. Sie sehen, dass sich die möglichen Verteilungen erheblich geändert haben.
Lassen Sie uns den Unterschied zwischen den maschinellen Trainingsergebnissen der Normalisierung, den standardisierten Daten und den Originaldaten sehen. Im Folgenden wird das Ergebnis der Klassifizierung mit "Logistic Regression" ausgegeben. Je höher der Score-Wert, desto besser die Genauigkeit.
#Laden Sie ein logistisches Regressionsmodell
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(solver='liblinear', multi_class='auto')
lr_norm = LogisticRegression(solver='liblinear', multi_class='auto')
lr_std = LogisticRegression(solver='liblinear', multi_class='auto')
lr.fit(x_train,y_train)
print('Originaldatenbewertung:',lr.score(x_train,y_train))
lr_norm.fit(x_train_norm,y_train)
print('Punktzahl der normalisierten Daten:',lr_norm.score(x_train_norm,y_train))
lr_std.fit(x_train_std,y_train)
print('Standardisierte Datenbewertung:',lr_std.score(x_train_std,y_train))
Ursprüngliche Datenbewertung: 0,8666666666666667 Normalisierte Datenbewertung: 0,8095238095238095 Standardisierte Datenbewertung: 0,9523809523809523
Die Genauigkeit standardisierter Daten ist viel höher.
Das Diskriminanzmodell gibt schließlich den vorhergesagten Wert der Zielvariablen aus. In diesem Fall geben Sie einen der Werte "0", "1", "2" als Kategoriewert aus und prüfen Sie, ob das Ergebnis mit den Testdaten übereinstimmt. Ich messe die Genauigkeit.
Die Methode zur Überprüfung der Genauigkeit ist dieselbe wie in der Vorlesung "Über maschinelles Lernen 5" vom Vortag.
Hier sind einige andere Klassifizierungsmodelle.
** Entscheidungsbaum **
Referenz: Wikipedia
Apropos Klassifizierung, es ist eine Methode, die oft so angewendet wird, als wäre es diese. Während des Lernens verzweigt es sich nach dem Wert der Variablen und schließlich ist es ein Modell, das in Form eines Baumes visualisiert werden kann.
** Zufälliger Wald **
Es ist ein "Ensemble Learning" -Algorithmus, der einen Entscheidungsbaum als schwachen Lernenden verwendet. Ursprünglich handelt es sich um einen Entscheidungsbaum, aber mehrere Entscheidungsbäume werden zufällig erstellt und parallel angeordnet, um eine Mehrheitsentscheidung über die Ergebnisse zu treffen.
** Gradient Boosting Entscheidungsbaum **
Es wird als GBDT (Gradient Boosting Decision Tree) abgekürzt. Dies wird auch basierend auf dem Entscheidungsbaum gelernt, und das Lernen wird wiederholt, um den Fehler aus dem Ergebnis zu reduzieren. Es ist eine Technik, um daraus die endgültige Schlussfolgerung zu ziehen. Je mehr Sie lernen, desto besser ist die Genauigkeit.
Die derzeitige Mainstream-Methode heißt "Boosting".
Beide sind in der "Scikit-Learn" -Bibliothek enthalten, sodass Sie mit ihnen experimentieren können.
Heute habe ich erklärt, wie das Klassifizierungsmodell funktioniert. Es gibt viele andere Klassifizierungsmodelle.
Beginnen wir zunächst mit der Klassifizierung und unterdrücken, wie ein Modell erstellt und überprüft wird.
18 Tage bis Sie Ingenieur werden
HP von Otsu py: http://www.otupy.net/
Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter: https://twitter.com/otupython