[Python] [Maschinelles Lernen] Anfänger ohne Wissen versuchen vorerst maschinelles Lernen

Annahme

Ich: Ein Anfänger, der noch nie maschinelles Lernen studiert oder berührt hat Maschinelles Lernen ist eine Technologie, die Sie in Zukunft kennen sollten, und ich dachte, ich würde sie gerne für eine Weile nutzen. Ich werde es mit der Haltung tun, es umzusetzen, um einen Zustand zu erreichen, in dem es sich vorerst bewegt, ohne tief in die Details zu graben (Ich fühle mich sehr leicht und möchte die psychologische Hürde auf maschinelles Lernen senken.)

Umweltvorbereitung

Stellen Sie Pandas und Scikit-Learn vorerst in Python zur Verfügung Wenn Sie es mit pip installieren, sollte es abgeschlossen sein ...

$ pip install pandas
Traceback (most recent call last):
File "/home/myuser/.local/bin/pip", line 7, in <module>
from pip._internal import main
ImportError: No module named 'pip._internal'

Ich bin mir über die Details nicht sicher, aber ich kann nicht darüber sprechen, es sei denn, es funktioniert vorerst. Laden Sie get-pip.py von der [offiziellen Website] herunter (https://pip.pypa.io/en/stable/installing/).

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

Führen Sie auf Python, Python3

$ sudo python get-pip.py
$ sudo python3 get-pip.py

Überprüfen Sie, ob der Befehl pip verfügbar ist

$ pip --version
pip 20.2.4 from /Library/Python/3.7/site-packages/pip (python 3.7)

Sie können pip sicher verwenden Jetzt können Sie Pandas installieren, scicit-learn ↓ Vergewissern Sie sich, dass es installiert wurde

$ pip show pandas
Name: pandas
Version: 1.1.4
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: https://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location:
Requires: python-dateutil, numpy, pytz
Required-by: 

$ pip show scikit-learn
Name: scikit-learn
Version: 0.23.2
Summary: A set of python modules for machine learning and data mining
Home-page: http://scikit-learn.org
Author: None
Author-email: None
License: new BSD
Location:
Requires: joblib, threadpoolctl, scipy, numpy
Required-by: sklearn

Grobe Vorgehensweise für maschinelles Lernen

Ein kurzer Blick zeigt, dass maschinelles Lernen in etwa dem folgenden Ablauf folgt.

  1. Daten abrufen
  2. Datenvorverarbeitung
  3. Methodenauswahl
  4. Hyperparameterauswahl
  5. Modelltraining
  6. Auswertung (→ Zurück zu 2 oder 3 oder 4 und Versuch und Irrtum)

Titanic: Maschinelles Lernen aus Katastrophen (Titanic-Überlebensprognose)

Vorerst werde ich Kaggles Überlebensvorhersage für die Titanic ausprobieren, die ich oft in der Einführung in das maschinelle Lernen sehe

Daten abrufen

Laden Sie die zu verwendenden Daten von der Kaggle-Website herunter

Laden Sie die folgenden Daten von [Kaggle Site] herunter (https://www.kaggle.com/c/titanic/data?select=train.csv) (Sie müssen ein Konto bei Kaggle registrieren, um die Daten herunterzuladen.)

Wenn ich den Inhalt überprüfe, sieht es so aus

>>> import pandas as pd
>>> gender_submission = pd.read_csv("./Data/gender_submission.csv")
>>> test = pd.read_csv("./Data/test.csv")
>>> train = pd.read_csv("./Data/train.csv")
>>> 
>>> gender_submission.head(5)
   PassengerId  Survived
0          892         0
1          893         1
2          894         0
3          895         0
4          896         1
>>> test.head(5)
   PassengerId  Pclass                                          Name     Sex   Age  SibSp  Parch   Ticket     Fare Cabin Embarked
0          892       3                              Kelly, Mr. James    male  34.5      0      0   330911   7.8292   NaN        Q
1          893       3              Wilkes, Mrs. James (Ellen Needs)  female  47.0      1      0   363272   7.0000   NaN        S
2          894       2                     Myles, Mr. Thomas Francis    male  62.0      0      0   240276   9.6875   NaN        Q
3          895       3                              Wirz, Mr. Albert    male  27.0      0      0   315154   8.6625   NaN        S
4          896       3  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  female  22.0      1      1  3101298  12.2875   NaN        S
>>> train.head(5)
   PassengerId  Survived  Pclass                                               Name     Sex   Age  SibSp  Parch            Ticket     Fare Cabin Embarked
0            1         0       3                            Braund, Mr. Owen Harris    male  22.0      1      0         A/5 21171   7.2500   NaN        S
1            2         1       1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1      0          PC 17599  71.2833   C85        C
2            3         1       3                             Heikkinen, Miss. Laina  female  26.0      0      0  STON/O2. 3101282   7.9250   NaN        S
3            4         1       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1      0            113803  53.1000  C123        S
4            5         0       3                           Allen, Mr. William Henry    male  35.0      0      0            373450   8.0500   NaN        S

gender_submission(PassengerId, Survived) test(PassengerId, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked) train(PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin)

Überprüfen Sie den Korrelationskoeffizienten zwischen den einzelnen Spalten

Bei Pandas wird die corr () -Methode verwendet, um den Korrelationskoeffizienten zwischen jeder Spalte des Datenrahmens zu ermitteln. Übrigens scheint es, dass die corr () -Methode drei Berechnungsmethoden angeben kann, indem die Argumentmethode angegeben wird. Ich bin mir diesmal nicht sicher, verwende also die Standardeinstellung

>>> train_corr = train.corr()
>>> train_corr
             PassengerId  Survived    Pclass       Age     SibSp     Parch      Fare
PassengerId     1.000000 -0.005007 -0.035144  0.036847 -0.057527 -0.001652  0.012658
Survived       -0.005007  1.000000 -0.338481 -0.077221 -0.035322  0.081629  0.257307
Pclass         -0.035144 -0.338481  1.000000 -0.369226  0.083081  0.018443 -0.549500
Age             0.036847 -0.077221 -0.369226  1.000000 -0.308247 -0.189119  0.096067
SibSp          -0.057527 -0.035322  0.083081 -0.308247  1.000000  0.414838  0.159651
Parch          -0.001652  0.081629  0.018443 -0.189119  0.414838  1.000000  0.216225
Fare            0.012658  0.257307 -0.549500  0.096067  0.159651  0.216225  1.000000

Versuchen Sie, eine Heatmap zu erstellen

Es scheint, dass Sie es mit einer Bibliothek namens seaborn leicht als Heatmap visualisieren können Lass es uns versuchen!

>>> import seaborn
>>> import matplotlib as mpl
>>> import matplotlib.pyplot as plt
>>> 
>>> seaborn.heatmap(train_corr,vmax=1, vmin=-1, center=0)
<AxesSubplot:>
>>> plt.show()

Figure_1.png

Ich verstehe, es ist leichter zu sehen Vielleicht besteht darin eine starke Korrelation zwischen Pclass und Fare ...? Pclass und Fare sind schwach, da Survived diesmal vorhergesagt wird, aber es scheint eine Korrelation zu geben ...?

Datenvorverarbeitung

NA (fehlender Wert) Vervollständigung, Korrektur von Zeichenketten wie Geschlecht, Eingeschifft, Kabine auf numerische Werte Dieses Mal ergänzt NA im Wesentlichen den Durchschnittswert, aber Embarked ergänzt das meiste "S". Kabine wird nur auf das Akronym korrigiert (wahrscheinlich repräsentiert es den Rang des Gästezimmers), NA ergänzt C, das am meisten ist

>>> train.Embarked.value_counts()
S    644
C    168
Q     77
Name: Embarked, dtype: int64

↓ Korrekturfunktion verwendet

def CorrectTitanicData(df):
    #Age : NA ->Durchschnittswert
    df.Age = df.Age.fillna(df.Age.median())
    #Sex : male -> 0, female -> 1
    df.Sex = df.Sex.replace(['male', 'female'],[0,1])
    #Embarked : NA -> S, C -> 0, S -> 1, Q -> 2
    df.Embarked = df.Embarked.fillna("S")
    df.Embarked = df.Embarked.replace(['C', 'S', 'Q'], [0, 1, 2])
    #Fare : NA ->Durchschnittswert
    df.Fare = df.Fare.fillna(df.Fare.median())
    #Cabin : NA -> C, A~G -> 0~6, T -> 7
    df.Cabin = df.Cabin.fillna('C')
    df.Cabin = df.Cabin.replace('A(.*)','A',regex=True)
    df.Cabin = df.Cabin.replace('B(.*)','B',regex=True)
    df.Cabin = df.Cabin.replace('C(.*)','C',regex=True)
    df.Cabin = df.Cabin.replace('D(.*)','D',regex=True)
    df.Cabin = df.Cabin.replace('E(.*)','E',regex=True)
    df.Cabin = df.Cabin.replace('F(.*)','F',regex=True)
    df.Cabin = df.Cabin.replace('G(.*)','G',regex=True)
    df.Cabin = df.Cabin.replace(['A','B','C','D','E','F','G','T'], [0,1,2,3,4,5,6,7])
    
    return df

Überprüfen Sie die Korrelation zwischen den einzelnen Spalten nach der Vorverarbeitung erneut

>>> train = CorrectTitanicData(train)
>>> train_corr = train.corr()
>>> train_corr
             PassengerId  Survived    Pclass       Sex       Age     SibSp     Parch      Fare     Cabin  Embarked
PassengerId     1.000000 -0.005007 -0.035144 -0.042939  0.034212 -0.057527 -0.001652  0.012658 -0.035748 -0.017443
Survived       -0.005007  1.000000 -0.338481  0.543351 -0.064910 -0.035322  0.081629  0.257307  0.080643 -0.125953
Pclass         -0.035144 -0.338481  1.000000 -0.131900 -0.339898  0.083081  0.018443 -0.549500  0.009851  0.305762
Sex            -0.042939  0.543351 -0.131900  1.000000 -0.081163  0.114631  0.245489  0.182333  0.070780 -0.022521
Age             0.034212 -0.064910 -0.339898 -0.081163  1.000000 -0.233296 -0.172482  0.096688 -0.032105 -0.040166
SibSp          -0.057527 -0.035322  0.083081  0.114631 -0.233296  1.000000  0.414838  0.159651  0.000224  0.030874
Parch          -0.001652  0.081629  0.018443  0.245489 -0.172482  0.414838  1.000000  0.216225  0.018232 -0.035957
Fare            0.012658  0.257307 -0.549500  0.182333  0.096688  0.159651  0.216225  1.000000 -0.098064 -0.268865
Cabin          -0.035748  0.080643  0.009851  0.070780 -0.032105  0.000224  0.018232 -0.098064  1.000000  0.069852
Embarked       -0.017443 -0.125953  0.305762 -0.022521 -0.040166  0.030874 -0.035957 -0.268865  0.069852  1.000000
>>> 
>>> seaborn.heatmap(train_corr,vmax=1, vmin=-1, center=0)
<AxesSubplot:>
>>> plt.show()

Figure_2.png Es wurde klar, dass Sex eine stärkere Korrelation hat

Methodenauswahl

Acht Elemente (außer der Passagier-ID), die diesmal als Prädiktoren verwendet werden, sind "P-Klasse", "Geschlecht", "Alter", "SibSp", "Parch", "Tarif", "Kabine" und "Eingeschifft". Die gegenseitige Überprüfung wird durchgeführt, indem die folgenden sieben Methoden als Lernmethoden implementiert werden.

>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.svm import SVC, LinearSVC
>>> from sklearn.neighbors import KNeighborsClassifier
>>> from sklearn.tree import DecisionTreeClassifier
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.neural_network import MLPClassifier
>>> from sklearn.model_selection import cross_val_score
>>> 
>>> predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Cabin", "Embarked"]
>>> models = []
>>> models.append(("LogisticRegression",LogisticRegression()))
>>> models.append(("SVC",SVC()))
>>> models.append(("LinearSVC",LinearSVC()))
>>> models.append(("KNeighbors",KNeighborsClassifier()))
>>> models.append(("DecisionTree",DecisionTreeClassifier()))
>>> models.append(("RandomForest",RandomForestClassifier()))
>>> models.append(("MLPClassifier",MLPClassifier(solver='lbfgs', random_state=0)))
>>> 
>>> results = []
>>> names = []
>>> 
>>> for name,model in models:
...     result = cross_val_score(model, train[predictors], train["Survived"],  cv=3)
...     names.append(name)
...     results.append(result)
... 

>>> for i in range(len(names)):
...     print(names[i],results[i].mean())
... 
LogisticRegression 0.7811447811447811
SVC 0.6554433221099888
LinearSVC 0.7317620650953985
KNeighbors 0.7070707070707071
DecisionTree 0.7721661054994389
RandomForest 0.7957351290684623
MLPClassifier 0.7901234567901234

Random Forest scheint die beste Bewertung zu sein

Speichern Sie die Vorhersageergebnisse zur Übermittlung in einer CSV-Datei

Lernen Sie Trainingsdaten in einer zufälligen Gesamtstruktur und machen Sie Vorhersagen mit Testdaten. Speichern Sie das Ergebnis im CSV-Format

>>> test = pd.read_csv("./Data/test.csv")
>>> test = CorrectTitanicData(test)
>>> algorithm = RandomForestClassifier()
>>> algorithm.fit(train[predictors], train["Survived"])
RandomForestClassifier()
>>> predictions = algorithm.predict(test[predictors])
>>> submission = pd.DataFrame({
...     "PassengerId":test["PassengerId"],
...     "Survived":predictions
... })
>>> submission.to_csv("submission.csv", index=False)

Einreichungsergebnis

Ich habe es bei Kaggle eingereicht, weil es eine große Sache war Der Ergebniswert beträgt 0,74162

スクリーンショット 2020-11-07 19.28.55.png

Ich möchte die korrekte Antwortrate von hier aus durch Ausprobieren erhöhen, aber diesmal liegt es an hier Es scheint, dass scikit-learn GridSearchCV hat, das nach Hyperparametern sucht Wenn Sie es verwenden, wird der Prozentsatz der richtigen Antworten wahrscheinlich zunehmen ...

Recommended Posts

[Python] [Maschinelles Lernen] Anfänger ohne Wissen versuchen vorerst maschinelles Lernen
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Versuchen Sie vorerst, FireBase Cloud Firestore mit Python zu verwenden
Verwenden Sie vorerst Logger mit Python
Versuchen Sie es vorerst mit LINE Notify
Führen Sie es vorerst mit CentOS7 + Apache2.4 + Python3.6 aus
Lernablauf für Python-Anfänger
Versuchen Sie vorerst, die Docomo-Chat-Dialog-API zu verwenden
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Siehe Python zum ersten Mal
[Python Machine Learning] Empfehlung zur Verwendung von Spyder für Anfänger (Stand August 2020)
Grundlegendes zur Python-Klasse Kampf (1) Verschieben wir sie vorerst
Lassen Sie uns vorerst Googles Vision API von Python berühren
Verstärken Sie Bilder für maschinelles Lernen mit Python
Erste Schritte für Anfänger des maschinellen Lernens (KI)
Warum Python für maschinelles Lernen ausgewählt wird
[Shakyo] Begegnung mit Python zum maschinellen Lernen
MongoDB mit Python zum ersten Mal
Rufen Sie den Python-Debugger jederzeit auf
[Python] Webanwendungsdesign für maschinelles Lernen
Versuchen wir zum ersten Mal Linux
Eine Einführung in Python für maschinelles Lernen
[Für Anfänger] Versuchen Sie Web Scraping mit Python
[Beispiel für eine Python-Verbesserung] Was ist die empfohlene Lernseite für Python-Anfänger?
Lassen Sie uns die kostenlose "Einführung in Python für maschinelles Lernen" bis zum 27. April online stellen
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
Der schnellste Weg für Anfänger, um Python zu beherrschen
Die Geschichte, dass die Lernkosten von Python niedrig sind
Empfohlene Studienreihenfolge für Anfänger des maschinellen Lernens / Deep Learning
Importieren Sie sie vorerst in jupyter
Machen Sie vorerst ein Histogramm (matplotlib)
Versuchen Sie, Pfeffer ein externes Modul hinzuzufügen. Vorerst in Anfragen.
Führen Sie yolov4 "vorerst" in Windows aus
Ich habe vorerst mit Floydhub gespielt
Ich habe zum ersten Mal versucht, Python zu programmieren.
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Rückblick auf den Wettbewerb für maschinelles Lernen, an dem ich zum ersten Mal gearbeitet habe
Richten Sie die Anzahl der Stichproben zwischen Datenklassen für maschinelles Lernen mit Python aus
virtualenv Das ist vorerst alles!
GTUG Girls + PyLadiesTokyo Meetup Ich ging zum ersten maschinellen Lernen
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Versuchen Sie zum ersten Mal, in Qiita zu posten
Ich werde versuchen, die Links zusammenzufassen, die vorerst nützlich erscheinen
Vorhersage der Zielzeit eines vollständigen Marathons mit maschinellem Lernen - Visual: Visualisierung von Daten mit Python-
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
Bis Sie Blender installieren und vorerst mit Python ausführen können
Bildersammlung Python-Skript zum Erstellen von Datensätzen für maschinelles Lernen
Erstellen Sie mit Python eine interaktive Umgebung für maschinelles Lernen
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Flow Memo, um LOCUST vorerst zu verschieben
[Python] Misst und zeigt die für die Verarbeitung erforderliche Zeit an
Python-Lernnotiz für maschinelles Lernen von Chainer aus Kapitel 2
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 1 und 2
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Vorbereitung zum Starten von "Python Machine Learning Programming" (für macOS)