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.
Geschichte
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.
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")
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.
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.
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 |
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".
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.
[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
2020/01/01 Erste Ausgabe veröffentlicht 29.01.2020 Nächster Link hinzugefügt
Recommended Posts