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.
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.)
#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
Code ci-dessus: 0.75120 Copier et coller du tutoriel: 0.76555
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.
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