[PYTHON] Défiez Kaggle Titanic

Cet article

Un mémo qui a mis Kaggle au défi d'étudier l'analyse des données. J'ai essayé le tutoriel "titanic", mais il y a trop de choses que je ne comprends pas, comme les pandas et scikit. Je pensais pouvoir utiliser le code ci-dessous, mais le score n'est pas bon.

problème

Le problème de penser à qui a survécu à l'équipage du Titanic (expliqué grossièrement sans crainte de malentendu). Ce sont des données de train et des données de test, qui contiennent toutes deux des données telles que le sexe et l'âge. Cependant, bien que les données de train aient des données de survie (0/1), les données de test n'en ont pas. *** En d'autres termes, le problème de la création d'un modèle de survie à partir des données du train et de la prédiction de la survie des données de test. *** (L'exactitude peut être confirmée en soumettant les données de prévision sur le site Web.)

code

#Préparation
def df_cleaner(df):
    #Compensez les pièces manquantes
    #âge
    median_age = np.median(df[(df['Age'].notnull())]['Age'])
    for passenger in df[(df['Age'].isnull())].index: #.index =Emplacement nul dans le tableau
    	df.loc[passenger, 'Age'] = median_age
    # fare
    median_fare = np.median(df[(df['Fare'].notnull())]['Fare'])
    for passenger in df[(df['Fare'].isnull())].index:
        df.loc[passenger, 'Fare'] = median_fare

    #Convertir les données de chaînes de caractères en données numériques
    df.loc[(df['Sex'] == 'male'),'Sex'] = 0
    df.loc[(df['Sex'] == 'female'),'Sex'] = 1
    df.loc[(df['Sex'].isnull()),'Sex'] = 2
    df.loc[(df['Embarked'] == 'S'),'Embarked'] = 0
    df.loc[(df['Embarked'] == 'C'),'Embarked'] = 1
    df.loc[(df['Embarked'] == 'Q'),'Embarked'] = 2
    df.loc[(df['Embarked'].isnull()),'Embarked'] = 3

    return df

#Faisons un csv pour soumission
def make_csv(file_path, passengerId, predicts):
    f = open(file_path, "wb")
    writer = csv.writer(f)
    writer.writerow(["PassengerId", "Survived"])
    for row, survived in zip(passengerId, predicts):
        writer.writerow([row, survived])

#Vérifions les performances du modèle que nous avons réalisé
def getScore(answer, predicts):
    sum_p = 0.0
    total = 0.0
    for (row, predict) in zip(answer,predicts):
        if row == predict:
            sum_p += 1.0
        total += 1.0
    return sum_p/total

def main():
    # Read in the training data.
    train = pd.read_csv('./data/train.csv')
    test = pd.read_csv("./data/test.csv")
    #Données inutiles(Attendu)Effaçons
    train.drop(['Name', 'PassengerId', 'Ticket', 'Cabin'], axis=1, inplace=True)
    test.drop(['Name', 'Ticket', 'Cabin'], axis=1, inplace=True)

    #Préparer
    train = df_cleaner(train)
    test = df_cleaner(test)
    x_train = train[:][['Pclass', 'Sex','Age', 'SibSp', 'Parch', 'Fare', 'Embarked']]
    y_train = train[:][['Survived']]
    #Faisons un modèle dans une forêt aléatoire
    scores =[]
    for trees in range(1,100):
        model = RandomForestClassifier(n_estimators=trees)
        model.fit(x_train, np.ravel(y_train))
        #Voyons le taux de correspondance
        pre = model.predict(x_train)
        scores.append(getScore(y_train['Survived'],pre))
    plt.plot(scores,'-r')
    plt.show()
    
    #Refaire les données de test réelles
    x_test = test[:][['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']]
    label = test[:][['PassengerId']]
    #Prédisons en utilisant le modèle
    output = model.predict(x_test)
    #Faisons un csv pour soumission
    make_csv("./output/random_forest.csv", label['PassengerId'], output.astype(int))

if __name__ == '__main__':
    main()

github Code source

But

Code ci-dessus: 0.75120 Copier et coller du tutoriel: 0.76555

Impressions

L'original est pire. .. .. Je ne pense pas que ce soit faux en tant qu'algorithme, il semble donc nécessaire d'étudier un peu plus la partie forêt aléatoire de scikit.

Un autre cas

J'ai fait un site pour visualiser et comprendre l'algorithme. Il n'y a pas de problème avec Titanic, mais le problème avec San Francisco est lié, je vais donc le poster. Bibliothèque d'algorithmes: un site qui comprend visuellement les algorithmes

Recommended Posts

Défiez Kaggle Titanic
RECRUTER Challenge @ kaggle
Challenge Kaggle [Prix de la maison]
Kaggle Tutorial Titanic Précision 80.9% (Top 7% 0.80861)
[Pour les débutants de Kaggle] Titanic (LightGBM)
Certains modèles de Kaggle's Titanic (kaggle ④)
Prédire le Titanic de Kaggle avec Keras (Kaggle ⑦)
[Kaggle pour les super débutants] Titanic (retour logistique)
Vérifiez les données brutes avec Kaggle's Titanic (Kaggle ⑥)
Défis de la compétition Titanic pour les débutants de Kaggle
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
Vérifiez la corrélation avec le Titanic de Kaggle (kaggle③)
Défiez AtCoder
Essayez tous les modèles de scikit-learn avec le Titanic de Kaggle (kaggle ⑤)
Pouvez-vous défier Kaggle avec seulement votre iPad?
Les étudiants de l'université de l'information publique du gouvernement local défient Kaggle (mémorial)
Jour 66 [Introduction à Kaggle] Les prévisions Titanic les plus faciles
Techniques de visualisation de base apprises à partir des données de Kaggle Titanic