[PYTHON] Probieren Sie alle Modelle des Scikit-Lernens mit Kaggles Titanic (kaggle ⑤) aus.

Einführung

Dies ist die Geschichte der erstmaligen Teilnahme am Kaggle </ b> -Wettbewerb. Im vorherigen Abschnitt "Auswählen von Modellen mit Kaggles Titanic" (https://qiita.com/sudominoru/items/1c21cf4afaf67fda3fee) konnten wir einige Modelle bewerten und die Punktzahl ein wenig erhöhen. Dieses Mal möchte ich alle Modelle von Scikit-Learn ausprobieren.

Inhaltsverzeichnis

  1. Ergebnis
  2. Über alle Modelle des Scicit-Learn
  3. Gegenüberstellung
  4. Bewerten Sie alle Modelle durch Kreuzvalidierung
  5. Parametereinstellung
  6. Bei Kaggle einreichen
  7. Zusammenfassung

Geschichte

1. Ergebnis

Dem Ergebnis zufolge stieg die Punktzahl leicht auf "0,78947". Das Ergebnis sind die besten 25% (Stand 30. Dezember 2019). Ich würde gerne den Ablauf bis zur Einreichung sehen.

2. Über alle Modelle des Scicit-Learn

Alle Scikit-Lernmodelle können mit "all_estimators" erhalten werden. Beim Abrufen können Sie mit dem Parameter "type_filter" von den folgenden 4 eingrenzen. 「classifier / regressor / cluster / transformer」 Diesmal handelt es sich um ein Klassifizierungsproblem. Filtern Sie daher nach "Klassifizierer".

from sklearn.utils.testing import all_estimators
all_estimators(type_filter="classifier")

3. Gegenüberstellung

Lassen Sie uns das oben erworbene Modell mit "Kreuzungsüberprüfung" überprüfen. Dieses Mal werden wir eine "Überprüfung der K-Teilungskreuzung" durchführen. K-Split Crossing Verification teilt zuerst die Trainingsdaten in K Teile auf. Dann wird einer von ihnen als Testdaten verwendet, und der verbleibende K-1 wird als Trainingsdaten verwendet. K - Trainiere mit einem Trainingsdaten und bewerte mit den restlichen Testdaten. Dies ist eine Methode, um dieses k-fache zu wiederholen und die erhaltenen k-fachen Ergebnisse (Punktzahl) zu mitteln, um das Modell zu bewerten. scikit-learn bietet eine Klasse für die Validierung von K-Split-Kreuzungen. "KFold" und "cross_validate".

from sklearn.model_selection import KFold
from sklearn.model_selection import cross_validate
kf = KFold(n_splits=3, shuffle=True, random_state=1)
scores = cross_validate(model, x_train, y_train, cv=kf, scoring=['accuracy'])

Geben Sie an, wie viele Teilungen mit "n_splits" von KFold erfolgen sollen. Verwenden Sie cross_validate, um die Trainingsdaten, KFold und die Bewertungsmethode anzugeben. Die durch die Bewertung angegebene Bewertung wird als Rückgabewert von cross_validate zurückgegeben. Der Rückgabewert wird als Array für den durch n_splits geteilten Betrag zurückgegeben.

4. Bewerten Sie alle Modelle durch Kreuzvalidierung

Jetzt möchte ich alle Modelle durch K-Split-Kreuzungsüberprüfung bewerten. Der Code ist unten. Der "Vorbereitungs" -Code ist der gleiche wie zuvor.

Vorbereitung


import numpy 
import pandas 

##############################
#Datenvorverarbeitung
#Extrahieren Sie die erforderlichen Elemente
# Data preprocessing
# Extract necessary items
##############################
# train.Laden Sie csv
# Load train.csv
df = pandas.read_csv('/kaggle/input/titanic/train.csv')
df = df[['Survived', 'Pclass', 'Sex', 'Fare']]

Vorbereitung


from sklearn.preprocessing import LabelEncoder
##############################
#Datenvorverarbeitung
#Quantifizieren Sie das Etikett (Name)
# Data preprocessing
# Digitize labels
##############################
#df = pandas.get_dummies(df)
encoder_sex = LabelEncoder()
df['Sex'] = encoder_sex.fit_transform(df['Sex'].values)

Vorbereitung


from sklearn.preprocessing import StandardScaler
##############################
#Datenvorverarbeitung
#Zahlen standardisieren
# Data preprocessing
# Standardize numbers
##############################

#Standardisierung
standard = StandardScaler()
df_std = pandas.DataFrame(standard.fit_transform(df[['Pclass', 'Fare']]), columns=['Pclass', 'Fare'])

df['Pclass'] = df_std['Pclass']
df['Fare'] = df_std['Fare']

K-Überprüfung der geteilten Kreuzung


import sys
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_validate
from sklearn.utils.testing import all_estimators
##############################
#K bei allen Modellen-Führen Sie eine Überprüfung der geteilten Kreuzung durch
# K-fold cross-validation with all estimators.
##############################
x_train = df.drop(columns='Survived').values
y_train = df[['Survived']].values
y_train = numpy.ravel(y_train)

kf = KFold(n_splits=3, shuffle=True, random_state=1)

writer = open('./all_estimators_classifier.txt', 'w', encoding="utf-8")
writer.write('name\taccuracy\n')

for (name,Estimator) in all_estimators(type_filter="classifier"):

    try:
        model = Estimator()
        if 'score' not in dir(model):
            continue;
        scores = cross_validate(model, x_train, y_train, cv=kf, scoring=['accuracy'])
        accuracy = scores['test_accuracy'].mean()
        writer.write(name + "\t" + str(accuracy) + '\n')
    except:
        print(sys.exc_info())
        print(name)
        pass

writer.close()

Ich bekomme das Modell des Klassifizierungsproblems mit "all_estimators (type_filter =" classifier ")" und loop. Nur Modelle, die eine Punktzahl mit "if'score 'not in dir (model):" haben, werden als Ziel ausgewählt. Bewerten Sie die Kreuzvalidierung mit "cross_validate". Geben Sie den oben für den Parameter angegebenen "KFold" an. Geben Sie den Modellnamen und den Auswertungswert in den Dateinamen "all_estimators_classifier.txt" ein.

Ich werde es versuchen. Wenn der Vorgang abgeschlossen ist, wird "all_estimators_classifier.txt" ausgegeben. Werfen wir einen Blick auf den Inhalt. Es werden ca. 30 Modellnamen ausgegeben. Das Folgende sind die 10 Modelle, die in absteigender Reihenfolge der "Genauigkeit" aufgenommen wurden.

name accuracy
ExtraTreeClassifier 0.82155
GradientBoostingClassifier 0.82043
HistGradientBoostingClassifier 0.81706
DecisionTreeClassifier 0.81481
ExtraTreesClassifier 0.81481
RandomForestClassifier 0.80920
GaussianProcessClassifier 0.80471
MLPClassifier 0.80471
KNeighborsClassifier 0.80022
LabelPropagation 0.80022

Es gibt 5 Modelle mit einer höheren Genauigkeitsrate als "Random Forest Classifier" von Last time.

5. Parametereinstellung

Lassen Sie uns die Parameter jedes der Top 5 Modelle durch Rastersuche überprüfen. Es wurde das Folgende.

Modell- Parameter
ExtraTreeClassifier criterion='gini', min_samples_leaf=10, min_samples_split=2, splitter='random'
GradientBoostingClassifier learning_rate=0.2, loss='deviance', min_samples_leaf=10, min_samples_split=0.5, n_estimators=500
HistGradientBoostingClassifier learning_rate=0.05, max_iter=50, max_leaf_nodes=10, min_samples_leaf=2
DecisionTreeClassifier criterion='entropy', min_samples_split=2, min_samples_leaf=1
ExtraTreesClassifier n_estimators=25, criterion='gini', min_samples_split=10, min_samples_leaf=2, bootstrap=True

6. Bei Kaggle einreichen

Ich werde es für jedes Modell bei Kaggle einreichen. Die Parameter sollten die Parameter sein, die von der Rastersuche überprüft werden. Die Punktzahl ist wie folgt.

Modell- score
ExtraTreeClassifier 0.78947
GradientBoostingClassifier 0.75598
HistGradientBoostingClassifier 0.77990
DecisionTreeClassifier 0.77511
ExtraTreesClassifier 0.78468

ExtraTreeClassifier gab die beste Punktzahl mit einem Ergebnis von "0,78947".

7. Zusammenfassung

Alle Scikit-Lernmodelle wurden durch Kreuzvalidierung bewertet. Für diese Eingabedaten hat ExtraTreeClassifier die beste Punktzahl Das Ergebnis war "0,78947". Nächstes Mal möchte ich die Daten visuell überprüfen. Durch die Überprüfung der Rohdaten möchte ich untersuchen, ob die Genauigkeit der Eingabedaten durch Screening weiter verbessert werden kann.

Referenz

[Wählen Sie das beste Modell all_estimators ()](https://betashort-lab.com/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4 % E3% 82% A8% E3% 83% B3% E3% 82% B9 /% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92 /% E6% 9C% 80 % E9% 81% A9% E3% 81% AA% E3% 83% A2% E3% 83% 87% E3% 83% AB% E9% 81% B8% E3% 81% B3all_estimators /) Python: Berechnen Sie Ihren eigenen Bewertungsindex mit der Funktion cross_validate () von scikit-learn Arten der Kreuzvalidierung von sklearn und deren Verhalten

Geschichte

2020/01/01 Erste Ausgabe veröffentlicht 29.01.2020 Nächster Link hinzugefügt

Recommended Posts

Probieren Sie alle Modelle des Scikit-Lernens mit Kaggles Titanic (kaggle ⑤) aus.
Wählen Sie Modelle von Kaggles Titanic (kaggle ④)
Probieren Sie Kaggles Titanic-Tutorial aus
Vorhersage der Titanic von Kaggle mit Keras (kaggle ⑦)
Überprüfen Sie die Rohdaten mit Kaggles Titanic (kaggle ⑥)
Probieren Sie SVM mit scikit-learn auf Jupyter Notebook aus
Ich habe versucht, mit Kaggles Titanic (kaggle②) zu lernen.
Überprüfen Sie die Korrelation mit Kaggles Titanic (kaggle③)
Fordern Sie die Kaggle Titanic heraus