Ein Memo, das Kaggle herausforderte, die Datenanalyse zu studieren. Ich habe das Tutorial "titanic" ausprobiert, aber es gibt zu viele Dinge, die ich nicht verstehe, wie Pandas und Scikit. Ich dachte, ich könnte den folgenden Code verwenden, aber die Punktzahl ist nicht gut.
Das Problem darüber nachzudenken, wer die Titanic-Crew überlebt hat (grob erklärt, ohne Angst vor Missverständnissen zu haben). Es werden Zugdaten und Testdaten angegeben, die beide Daten wie Geschlecht und Alter enthalten. Obwohl die Zugdaten Überlebensdaten (0/1) enthalten, sind dies bei den Testdaten nicht der Fall. *** Mit anderen Worten, das Problem, ein Überlebensmodell aus Zugdaten zu erstellen und das Überleben von Testdaten vorherzusagen. *** (Die Richtigkeit kann durch Übermittlung der Prognosedaten auf der Website bestätigt werden.)
#Vorbereitung
def df_cleaner(df):
#Machen Sie die fehlenden Teile wieder gut
#Alter
median_age = np.median(df[(df['Age'].notnull())]['Age'])
for passenger in df[(df['Age'].isnull())].index: #.index =Nullposition im Array
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
#Konvertieren Sie Zeichenkettendaten in numerische Daten
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
#Lassen Sie uns eine CSV für die Einreichung machen
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])
#Lassen Sie uns die Leistung des von uns erstellten Modells überprüfen
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")
#Unnötige Daten(Erwartet)Lass uns löschen
train.drop(['Name', 'PassengerId', 'Ticket', 'Cabin'], axis=1, inplace=True)
test.drop(['Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
#Bereiten
train = df_cleaner(train)
test = df_cleaner(test)
x_train = train[:][['Pclass', 'Sex','Age', 'SibSp', 'Parch', 'Fare', 'Embarked']]
y_train = train[:][['Survived']]
#Lassen Sie uns ein Modell in einem zufälligen Wald erstellen
scores =[]
for trees in range(1,100):
model = RandomForestClassifier(n_estimators=trees)
model.fit(x_train, np.ravel(y_train))
#Lassen Sie uns die Übereinstimmungsrate sehen
pre = model.predict(x_train)
scores.append(getScore(y_train['Survived'],pre))
plt.plot(scores,'-r')
plt.show()
#Erstellen Sie die tatsächlichen Testdaten neu
x_test = test[:][['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']]
label = test[:][['PassengerId']]
#Lassen Sie uns anhand des Modells vorhersagen
output = model.predict(x_test)
#Lassen Sie uns eine CSV für die Einreichung machen
make_csv("./output/random_forest.csv", label['PassengerId'], output.astype(int))
if __name__ == '__main__':
main()
github Quellcode
Code oben: 0,75120 Kopieren und Einfügen des Tutorials: 0.76555
Das Original ist schlimmer. .. .. Ich denke nicht, dass es als Algorithmus falsch ist, daher scheint es notwendig, den zufälligen Waldteil von Scikit etwas genauer zu untersuchen.
Ich habe eine Seite erstellt, um den Algorithmus zu visualisieren und zu verstehen. Es gibt kein Problem mit der Titanic, aber das Problem mit San Francisco hängt zusammen, also werde ich es veröffentlichen. Bibliothek von Algorithmen: Eine Site, die Algorithmen visuell versteht
Recommended Posts