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.
Der Arbeitsfluss beim Einbeziehen von maschinellem Lernen ist wie folgt.
Davon werden 2-3 Teile als Datenvorverarbeitung bezeichnet.
Dieses Mal möchte ich aus dieser Vorverarbeitung einen Datamart erstellen.
Sprache ist Python Bibliotheken für maschinelles Lernen sind "Pandas" und "Numpy" Die Bibliothek zur Visualisierung verwendet "seaborn", "matplotlib".
** Laden der Bibliothek **
#Bibliothek laden
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
Von hier aus habe ich einen Data Mart erstellt.
Klicken Sie hier für den gestrigen Vortrag
Ab hier erstellen wir ein Modell mit Datamart.
Von hier aus wird maschinelles Lernen anhand der erstellten Daten durchgeführt.
Laden Sie zunächst die Bibliothek für maschinelles Lernen.
** Laden der Bibliothek für maschinelles Lernen **
scikit-learn: Bibliothek für maschinelles Lernen
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import recall_score,precision_score,f1_score,accuracy_score
from sklearn.metrics import confusion_matrix
"Scikit-learn" selbst ist eine riesige Bibliothek, die die Bibliothek grob erklärt. Laden Sie nur das, was Sie brauchen. Ich werde später über jeden Punkt sprechen.
Es gibt mehrere Schritte zum Erstellen eines Modells.
Zunächst ist es die Arbeit, in "Trainingsdaten" und "Testdaten" zu unterteilen. Stellen Sie sich vor, Sie machen einen Aufnahmeprüfungstest.
Wenn Sie den Test im Voraus beantworten, erhalten Sie eine Punktzahl nahe der perfekten Punktzahl. Selbst beim maschinellen Lernen ist es daher wenig sinnvoll, die zuvor erlernten Daten zu überprüfen.
Die im Voraus zu trainierenden Daten werden so trainiert, dass die Daten zur Verifizierung nicht enthalten sind, und nach Abschluss des Lernmodells wird die Verifizierung mit den verbleibenden Testdaten erneut durchgeführt.
Wenn Sie nach der Überprüfung nicht zufrieden sind, ändern Sie die Methode, passen Sie die Parameter an und verarbeiten Sie sie erneut aus der Datenauswahl, um ein Modell zu erstellen.
** Datenaufteilung **
Hier wird die einfache Division durch die "Hold-out-Methode" durchgeführt.
Mit train_test_split
in Testdaten aufteilen.
X = Andere Daten als korrektes Etikett (mehrere Spalten) Y = Richtige Etikettendaten (1 Spalte)
"x_train, x_test, y_train, y_test = train_test_split (X, Y, test_size = Testgröße)"
Das "X" und "Y" geben hier die Spalten des gestern erstellten Datenrahmens an.
X = data_df.drop(['Survived'],axis=1)
Y = data_df['Survived']
x_train, x_test, y_train, y_test = train_test_split(X,Y, test_size=0.2)
print(len(x_train))
print(len(y_train))
print(len(x_test))
print(len(x_test))
712 712 179 179
Dadurch werden vier Daten erstellt: "Erklärende Variablendaten für das Training", "Objektive Variablendaten für das Training", "Erklärende Variablendaten zum Testen" und "Objektive Variablendaten zum Testen".
** Modell anrufen **
Als nächstes folgt der Modellaufruf. Entscheiden Sie, welche Methode verwendet werden soll, und rufen Sie sie aus der Bibliothek auf.
Hier Nennen Sie das "logistische Regressionsmodell". "Logistische Regression" wird häufig verwendet, um zwischen Binärwerten zu unterscheiden. "LogisticRegression" wird zu einem "logistischen Regressionsmodell".
clf = LogisticRegression()
** Modelllernen **
Nach dem Aufruf des Modells ist der nächste Schritt das Lernen. Das Lernen wird unter Verwendung von "Daten erklärender Variablen für das Training" und "Daten objektiver Variablen für das Training" durchgeführt. Grundsätzlich kann das Lernen in einer Zeile geschrieben werden.
clf.fit(x_train, y_train)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, l1_ratio=None, max_iter=100, multi_class='warn', n_jobs=None, penalty='l2', random_state=None, solver='warn', tol=0.0001, verbose=0, warm_start=False)
Dies ist das Ende des Lernens.
** Eine Vorhersage machen **
Als nächstes überprüfen Sie mit "Testdaten". Bei der Überprüfung wird das "Etikett" des Tests unter Verwendung der geteilten "Testdaten" vorhergesagt (bestimmt).
y_predict = clf.predict(x_test)
Das vorhergesagte Ergebnis wird jetzt in "y_predict" gespeichert. Der Inhalt enthält ein Array, das die richtige Antwort vorhersagt.
y_predict[0:5]
array([0, 0, 1, 0, 0])
Die Vorhersage gibt den Wert von "0" oder "1" aus. Da das "richtige Antwortetikett" auch die Daten des Werts "0" oder "1" sind, kann die Genauigkeit durch Vergleichen überprüft werden.
** Überprüfen Sie die Genauigkeit des Modells **
Als nächstes folgt die Genauigkeitsüberprüfung des Modells. Berechnen Sie, wie genau das Modell ist. Da die Bibliothek zur Überprüfung der Genauigkeit aus der Bibliothek geladen wird, werde ich sie vorstellen
confusion_matrix: 2x2 richtige / falsche Tabelle ausgeben Genauigkeitsbewertung: Berechnen Sie die richtige Antwortrate präzise_bewertung: Berechnen Sie die Genauigkeitsrate Recall_score: Rückruf berechnen f1_score: Berechnet den harmonisierten Durchschnitt der Genauigkeit x Rückruf
Es ist geworden.
Wenn ich versuche, die Genauigkeit sofort zu überprüfen
print(pd.DataFrame(confusion_matrix(y_predict, y_test), index=['predict 0', 'predict 1'], columns=['real 0', 'real 1']))
print()
print('accuracy : ',accuracy_score(y_test, y_predict))
print('precision : ',precision_score(y_test, y_predict))
print('recall : ',recall_score(y_test, y_predict))
print('f1_score : ',f1_score(y_test, y_predict))
real 0 real 1 predict 0 100 25 predict 1 15 39
accuracy : 0.776536312849162 precision : 0.7222222222222222 recall : 0.609375 f1_score : 0.6610169491525424
Das Ergebnis ist so. Bei der Erstellung eines Modells mit diesen Daten beträgt die Genauigkeit der "Genauigkeit" etwa 77,6%.
Lesen des numerischen Werts zum Zeitpunkt der Überprüfung
Zunächst wird das Ergebnis der Vorhersage in "0" und "1" unterteilt. Da die korrekten Antwortetikettendaten im Voraus auch in "0" und "1" unterteilt werden, gibt es ein 2x2-Muster als korrekte / falsche Tabelle.
Die Beziehung zwischen Vorhersage und tatsächlicher Messung ist wie folgt.
Tatsächliche Messung 0 | Tatsächliche Messung 1 | |
---|---|---|
Vorhersage 0 | 100 | 25 |
Vorhersage 1 | 15 | 39 |
Von hier aus berechnen wir die Genauigkeitsrate. Die richtige Antwortrate ist "(Istmessung 0 Vorhersage 0 Wert + Istmessung 1 Vorhersage 1 Wert) / Gesamtwert aller" Es wird sein.
(100 + 39)/(100 + 25 + 15 + 39) = 139/179 = 0.7765
Als nächstes kommt die Präzision. Die Genauigkeitsrate ist
Tatsächliche Messung 1 Vorhersage 1 Wert / Vorhersage 1 Wert
Es wird sein.
39/(15 + 39) = 39/54 = 0.7222
Als nächstes kommt die Rückrufrate. Die Rückrufquote beträgt
Tatsächliche Messung 1 Vorhersage 1 Wert / Tatsächliche Messung 1 Wert
Es wird sein.
39/(25 + 39) = 39/64 = 0.609
Schließlich f1_score. f1_score ist Es ist ein harmonisierter Durchschnitt aus Präzision und Erinnerung.
2 * Konformitätsrate * Rückrufrate / (Konformitätsrate + Rückrufrate)
2 * 0.7222 * 0.609 / (0.7222 + 0.609) = 0.8802 / 1.3316 = 0.6610
Welcher numerische Wert bei der Überprüfung hervorgehoben wird, hängt vom Zweck des maschinellen Lernens ab. Dieses Mal treffen wir eine binäre Beurteilung, aber wenn die richtigen Antwortetiketten gleichmäßig in der gleichen Menge aufgeteilt sind, reicht die richtige Antwortrate aus. Wenn eine der Daten klein oder groß und voreingenommen ist, ist es möglicherweise nicht wünschenswert, die richtige Antwortrate zu verwenden.
Wenn die Daten beispielsweise ein Verhältnis von 99: 1 haben, können Sie eine korrekte Antwortrate von 99% erhalten, wenn Sie alle Beschriftungen mit der größeren übereinstimmen. Denken Sie an die Diagnose einer Krankheit.
Wenn Sie ein Modell erstellen, bei dem nicht jeder krank ist, beträgt die korrekte Antwortrate 99%, aber die restlichen 1% werden übersehen und kranke Menschen werden in Schwierigkeiten geraten. In diesem Fall ist es in Ordnung, einen kleinen Fehler zu machen. Wenn Sie also kein Modell haben, das kranke Menschen erkennen kann, werden Sie die Minderheit vermissen.
Die Genauigkeit ist der Prozentsatz der Daten, von denen vorhergesagt wird, dass sie positiv sind, der tatsächlich positiv ist, und der Rückruf ist der Prozentsatz der tatsächlichen positiven Daten, von denen vorhergesagt werden kann, dass sie positiv sind. Ich werde.
Wenn Sie feststellen, dass der Zweck des maschinellen Lernens darin besteht, sich ordnungsgemäß auf die Minderheit zu verlassen, können Sie ein Modell auswählen, das ordnungsgemäß erkannt werden kann, wobei der Schwerpunkt auf dem Rückruf liegt.
Wenn Sie dies jedoch tun, werden Sie möglicherweise zu sehr erwischt. In diesem Fall wird f1_score als Index verwendet, der sowohl die Genauigkeit als auch den Rückruf berücksichtigt.
** Andere Modelle **
Schauen wir uns auch andere Modelle an. Wir werden das Modell hier nur vorstellen und nicht auf Details eingehen. Erstens ist der Entscheidungsbaum.
#Entscheidungsbaum
clf = DecisionTreeClassifier()
clf.fit(x_train, y_train)
y_predict = clf.predict(x_test)
print(pd.DataFrame(confusion_matrix(y_predict, y_test), index=['predict 0', 'predict 1'], columns=['real 0', 'real 1']))
print()
print('accuracy : ',accuracy_score(y_test, y_predict))
print('precision : ',precision_score(y_test, y_predict))
print('recall : ',recall_score(y_test, y_predict))
print('f1_score : ',f1_score(y_test, y_predict))
real 0 real 1 predict 0 95 26 predict 1 20 38
accuracy : 0.7430167597765364 precision : 0.6551724137931034 recall : 0.59375 f1_score : 0.6229508196721311
Als nächstes kommt Random Forest
# RandomForest
clf = RandomForestClassifier()
clf.fit(x_train, y_train)
y_predict = clf.predict(x_test)
print(pd.DataFrame(confusion_matrix(y_predict, y_test), index=['predict 0', 'predict 1'], columns=['real 0', 'real 1']))
print()
print('accuracy : ',accuracy_score(y_test, y_predict))
print('precision : ',precision_score(y_test, y_predict))
print('recall : ',recall_score(y_test, y_predict))
print('f1_score : ',f1_score(y_test, y_predict))
real 0 real 1 predict 0 98 26 predict 1 17 38
accuracy : 0.7597765363128491 precision : 0.6909090909090909 recall : 0.59375 f1_score : 0.6386554621848739
** Berechnung des Beitragssatzes **
Im Modell des maschinellen Lernens gibt es Dinge, die den Beitragssatz angeben können, zu dem Daten beigetragen haben.
clf.featureimportances
for i,v in zip(x_train.columns,clf.feature_importances_):
print(i,'\t',v)
SibSp 0.08181730881501241 Parch 0.053030544663722166 Fare 0.40243782816341556 Sex2 0.28228147632317596 Pe_0.0 0.03352832009152742 Pe_1.0 0.014542002215684312 Pe_2.0 0.02212292439144309 Pe_3.0 0.022599544658725688 Pe_4.0 0.013099652111940165 Pe_5.0 0.013494114387414768 Pe_6.0 0.005599733163595443 Pe_7.0 0.002340597855733169 Pe_8.0 0.0030199997376331917 Em_C 0.012248329962351154 Em_N 0.0010747396045908525 Em_Q 0.010808812977944686 Em_S 0.025954070876089957
Gestern habe ich die Daten verarbeitet, um einen Datamart für maschinelles Lernen zu erstellen. Heute werden wir ein Vorhersagemodell erstellen und die Genauigkeit anhand dieser Daten überprüfen. Das Erstellen des Modells selbst ist ziemlich einfach und die Menge an Code, die Sie schreiben, ist viel geringer.
Daher ist es beim Erstellen eines Modells wichtig zu entscheiden, welches Modell ausgewählt werden soll. Da die Gesamtmenge des zu schreibenden Codes gering ist, besteht die Aufgabe darin, verschiedene Modelle zu erstellen, zu überprüfen und das Modell mit der höchsten Genauigkeit auszuwählen.
Wenn die Genauigkeit gering ist, probieren Sie andere Modelle aus. Wenn sie immer noch niedrig ist, kehren Sie zur Datenvorverarbeitung zurück und beginnen Sie von vorne. Wiederholen Sie diesen Zyklus, bis Sie ein überzeugendes Modell haben, und beginnen Sie von der schlechtesten Datenerfassung.
Lassen Sie uns zuerst mit dem gesamten Fluss aufwachen.
20 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