题意:
就是给你了n个人,每个人有一些性质,要你求出test中的每个人是否存活。
数据处理:
1.先看数据:surviva、pclass、sex、Age、sibsp、parch、ticket、fare、cabin、embarked。
首先使用神经网络算法传入的dataframe的特征值必须是数值型的。
查看train数据中的各个特征值,如果不是数值型的,需要进行独热编码。
通过plt进行图形化查看每个特征值和surviva的关系,是否有明显正负相关性。
2.处理数据空缺,多记忆相关函数。
通过查看train数据特性,发现有些特征值的值太过杂乱,并不适合作为特征值,直接drop掉。
发现pclass、sex、Age、sibsp、parch数值较少,且相关性大,适合作为特征值。
对train数据处理后,分成X_train, X_test, Y_train, Y_test,train作为训练数据,test作为测试数据。
建立模型:
神经网络选择随机森林,设置一定参数,传入X_train和Y_train进行训练。
通过predict(X_test)于Y_test进行对比,查看当前的正确率。
对test数据进行处理,通过predict(X_test)构造出output答案即可。
代码:
import sys
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
def data_init(data):
data = data[['Age','Survived','Pclass','Sex','SibSp','Parch']]
data['Age'] = data['Age'].fillna(data['Age'].value_counts().index[0])
data = pd.get_dummies(data)
return data
if __name__ == '__main__':
train_data = pd.read_csv('/kaggle/input/titanic/train.csv')
train_data = data_init(train_data)
X = train_data.drop(['Survived'], axis=1)
Y = train_data['Survived']
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X_train,Y_train)
accuracy = accuracy_score(Y_test,model.predict(X_test))
print(accuracy)
test_data = pd.read_csv('/kaggle/input/titanic/test.csv')
X = test_data[['Age','Pclass','Sex','SibSp','Parch']]
X['Age'] = X['Age'].fillna(X['Age'].value_counts().index[0])
X = pd.get_dummies(X)
output = pd.DataFrame({'PassengerId': test_data['PassengerId'], 'Survived': model.predict(X)})
output.to_csv('/kaggle/working/submission.csv', index=False)