Eine Website, auf der Sie Ihre Fähigkeiten testen können, indem Sie mithilfe der Datenanalyse um die Lösung verschiedener Probleme konkurrieren. Sie können einen Datensatz abrufen und die Erklärungen anderer Personen (Kernel) anzeigen, um die Datenanalyse zu studieren.
Einer von Kaggles Wettbewerben. Es wird von vielen Anfängern als Tutorial verwendet. Sagen Sie voraus, welche Passagiere auf der Titanic überlebt haben. Das Thema ist, das Überleben der anderen 418 Personen aus den Passagierdaten für 891 Personen vorherzusagen.
Wir werden Techniken für Anfänger bis zu einem Einreichungswert von 0,83732 (entspricht den besten 1,5%) unter Verwendung einer zufälligen Gesamtstruktur konsistent erklären. Dieses Mal werde ich erklären, bis die eingereichte Punktzahl 0,78468 erreicht. Nächstes Mal erhöhte die Punktzahl auf 0,81339, und Nächstes Mal entspricht dem oberen Wert von 1,5%. Die Einreichungspunktzahl beträgt 0,83732. Der gesamte verwendete Code wird auf [Github] veröffentlicht (https://github.com/shiroino11111/taitanic-0.83732-). Der diesmal verwendete Code ist titanisch (0,83732) _1.
Importieren Sie die erforderlichen Bibliotheken
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import Pipeline,make_pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest
from sklearn import model_selection
from sklearn.model_selection import GridSearchCV
import warnings
warnings.filterwarnings('ignore')
Lesen Sie CSV und überprüfen Sie den Inhalt
#Lesen Sie CSV
train= pd.read_csv("train.csv")
test= pd.read_csv("test.csv")
#Datenintegration
dataset = pd.concat([train, test], ignore_index = True)
#Zur Einreichung
PassengerId = test['PassengerId']
#Überprüfen Sie bis zum dritten Inhalt des Zuges
train.head(3)
Eine kurze Beschreibung jeder Spalte lautet wie folgt.
· PassengerId - Eindeutige ID der Passagieridentifikation ・ Überlebt - Überlebensflagge (0 = Tod, 1 = Überleben) ・ Klasse - Ticketklasse · Name - Name des Passagiers ・ Geschlecht - Geschlecht (männlich = männlich, weiblich = weiblich) ・ Alter - Alter · SibSp - Anzahl der Geschwister / Ehepartner an Bord der Titanic · Parch - Anzahl der Eltern / Kinder auf der Titanic ・ Ticket - Ticketnummer ・ Tarif - Tarif ・ Kabine - Zimmernummer ・ Eingeschifft - Abfahrtsort (Hafen auf der Titanic)
Ich werde auch eine kurze Beschreibung jeder Variablen geben. pclass = Ticketklasse 1 = Oberschicht (reich) 2 = Zwischenklasse (allgemeine Klasse) 3 = Unterschicht (Arbeiterklasse)
Eingeschifft = Die Definition jeder Variablen lautet wie folgt C = Cherbourg Q = Queenstown S = Southampton NaN stellt einen Datenverlust dar. (In der obigen Tabelle sehen Sie zwei NaNs in der Kabine.) Lassen Sie uns die Gesamtzahl der fehlenden Daten überprüfen.
#Überprüfen Sie die Anzahl der fehlenden Daten
dataset_null = dataset.fillna(np.nan)
dataset_null.isnull().sum()
Age 263 Cabin 1014 Embarked 2 Fare 1 Name 0 Parch 0 PassengerId 0 Pclass 0 Sex 0 SibSp 0 Survived 418 Ticket 0 dtype: int64
Mit Cabin können Sie sehen, dass bis zu 1014 Daten fehlen. Als nächstes überprüfen wir die statistischen Gesamtdaten.
#Überprüfen Sie die statistischen Daten
dataset.describe()
Überprüfen Sie zunächst die Genauigkeit, indem Sie die fehlenden Daten durch den Medianwert usw. ersetzen.
#Kabine ist vorübergehend ausgeschlossen
del dataset["Cabin"]
# Age(Alter)Und Fahrpreis(Gebühr)Ist der Medianwert von jedem, eingeschifft(Ausgangspunkt)Ist S.(Southampton)Ersatz
dataset["Age"].fillna(dataset.Age.mean(), inplace=True)
dataset["Fare"].fillna(dataset.Fare.mean(), inplace=True)
dataset["Embarked"].fillna("S", inplace=True)
#Überprüfen Sie die Gesamtzahl der fehlenden Daten
dataset_null = dataset.fillna(np.nan)
dataset_null.isnull().sum()
Age 0 Embarked 0 Fare 0 Name 0 Parch 0 PassengerId 0 Pclass 0 Sex 0 SibSp 0 Survived 418 Ticket 0 dtype: int64
Es fehlen keine Daten. Die 418 von Survived stimmen mit den 418 in den Testdaten überein, daher sollte dies kein Problem sein. Organisieren Sie Ihre Daten für die Prognose. Verwenden Sie zuerst P-Klasse, Geschlecht, Alter, Tarif, Eingeschifft. Es konvertiert es auch in eine Dummy-Variable, damit die Maschine es vorhersagen kann. (Derzeit gibt es zwei Sex-Elemente, männlich und weiblich. Auf diese Weise werden sie jedoch in sex_male und sex_female konvertiert. Für männlich wird sex_male 1 zugewiesen, und wenn sie unterschiedlich sind, wird 0 zugewiesen.)
#Extrahieren Sie nur die zu verwendenden Variablen
dataset1 = dataset[['Survived','Pclass','Sex','Age','Fare','Embarked']]
#Erstellen Sie eine Dummy-Variable
dataset_dummies=pd.get_dummies(dataset1)
dataset_dummies.head(3)
Lass die Maschine lernen. Erstellen Sie das beste Vorhersagemodell, indem Sie die n_estimators und max_depth des RandomForestClassifier ändern.
#Zerlegen Sie Daten in Zug und Test
#( 'Survived'Existiert im Zug,Nicht testen)
train_set = dataset_dummies[dataset_dummies['Survived'].notnull()]
test_set = dataset_dummies[dataset_dummies['Survived'].isnull()]
del test_set["Survived"]
#Trennen Sie Zugdaten in Variablen und korrigieren Sie die Antworten
X = train_set.as_matrix()[:, 1:] #Variablen nach Pclass
y = train_set.as_matrix()[:, 0] #Richtige Antwortdaten
#Erstellen eines Vorhersagemodells
clf = RandomForestClassifier(random_state = 10, max_features='sqrt')
pipe = Pipeline([('classify', clf)])
param_test = {'classify__n_estimators':list(range(20, 30, 1)), #Versuchen Sie 20-30 in Schritten
'classify__max_depth':list(range(3, 10, 1))} #Versuchen Sie 3-10 in Schritten
grid = GridSearchCV(estimator = pipe, param_grid = param_test, scoring='accuracy', cv=10)
grid.fit(X, y)
print(grid.best_params_, grid.best_score_, sep="\n")
{'classify__max_depth': 8, 'classify__n_estimators': 23} 0.8316498316498316 Wenn max_depth 8 und n_estimators 23 ist, stellt sich heraus, dass es das beste Modell mit einer Vorhersagegenauigkeit von 83% für Trainingsdaten ist. Dieses Modell sagt Testdaten voraus und erstellt eine Übermittlungsdatei (submit1.csv).
#Vorhersage von Testdaten
pred = grid.predict(test_set)
#Erstellen einer CSV-Datei für die Kaggle-Übermittlung
submission = pd.DataFrame({"PassengerId": PassengerId, "Survived": pred.astype(np.int32)})
submission.to_csv("submission1.csv", index=False)
Als ich es tatsächlich einreichte, war die Punktzahl 0,78468. Plötzlich kam eine hohe Vorhersage heraus.
Fügen Sie diesmal Parch (Anzahl der Eltern / Kinder an Bord) und SibSp (Anzahl der Geschwister / Ehepartner an Bord) hinzu, um eine Vorhersage zu treffen.
#Extrahieren Sie die zu verwendenden Variablen
dataset2 = dataset[['Survived','Pclass','Sex','Age','Fare','Embarked', 'Parch', 'SibSp']]
#Erstellen Sie eine Dummy-Variable
dataset_dummies = pd.get_dummies(dataset2)
dataset_dummies.head(3)
#Zerlegen Sie Daten in Zug und Test
#( 'Survived'Existiert im Zug,Nicht testen)
train_set = dataset_dummies[dataset_dummies['Survived'].notnull()]
test_set = dataset_dummies[dataset_dummies['Survived'].isnull()]
del test_set["Survived"]
#Trennen Sie Zugdaten in Variablen und korrigieren Sie die Antworten
X = train_set.as_matrix()[:, 1:] #Variablen nach Pclass
y = train_set.as_matrix()[:, 0] #Richtige Antwortdaten
#Erstellen eines Vorhersagemodells
clf = RandomForestClassifier(random_state = 10, max_features='sqrt')
pipe = Pipeline([('classify', clf)])
param_test = {'classify__n_estimators':list(range(20, 30, 1)), #Versuchen Sie 20-30 in Schritten
'classify__max_depth':list(range(3, 10, 1))} #Versuchen Sie 3-10 in Schritten
grid = GridSearchCV(estimator = pipe, param_grid = param_test, scoring='accuracy', cv=10)
grid.fit(X, y)
print(grid.best_params_, grid.best_score_, sep="\n")
#Vorhersage von Testdaten
pred = grid.predict(test_set)
#Erstellen einer CSV-Datei für die Kaggle-Übermittlung
submission = pd.DataFrame({"PassengerId": PassengerId, "Survived": pred.astype(np.int32)})
submission.to_csv("submission2.csv", index=False)
{'classify__max_depth': 7, 'classify__n_estimators': 25} 0.8417508417508418 Wenn max_depth 7 und n_estimators 25 ist, stellt sich heraus, dass es das beste Modell mit einer Vorhersagegenauigkeit von 84% für Trainingsdaten ist. Obwohl es genauer ist als zuvor, fiel die Punktzahl auf 0,76076, als ich die Testdatenvorhersage (Submission2.csv) für dieses Modell einreichte. Es scheint, dass es zu Überlernen geführt hat. Es scheint besser, Parch (Anzahl der Eltern / Kinder an Bord) und SibSp (Anzahl der Geschwister / Ehepartner an Bord) nicht zu verwenden.
Ich habe eine Vorhersage für Kaggles Tutorial-Wettbewerb Titanic gemacht. Die höchste eingereichte Punktzahl war 0,78468. Nächstes Mal visualisiert die Daten und erklärt den Vorgang dem Einreichungswert 0,83732.
Recommended Posts