![079b906909f787c0e294274682c68e2d.png](https://i-blog.csdnimg.cn/blog_migrate/4af298ef04d7f2b1937e6d7003d8196d.jpeg)
所谓放假,就是应该拿来想干嘛干嘛。这篇文章纯粹是做一个记录,离美赛还有一天,就当打发打发时间用。
前两天瞎报了一个网上的做数据处理的课,是对kaggle上一个非常经典的案例titanic生还者预测的数据集做数据预处理。然后就顺着他处理好的数据接着写了个一个隐藏层的全连接网络做了一下。嘛从做好到出结果到随便优化一下,大概也就2天功夫,还顺手考了个雅思口语hhh
这里先感谢一下棕榈学院的python7日进阶课提供了数据预处理的方法。
首先我们注册一个kaggle账号,注册账号是要vpn的,最好之后就一直挂着,会比较方便。
来到titanic的页面
![a4bf24ba7f06ac05e6af28d19d7a7a7d.png](https://i-blog.csdnimg.cn/blog_migrate/d947379196813f68aa3f773e001e3fee.jpeg)
这里大体给出了一些关于这个题和数据集的信息,在左侧可以下载。一个有生还记录(Survived)的train集和一个测试集,训练模型后通过测试集得出的结果就是我们要上传并且评分的文件了。
这个比赛最有意思的地方在于数据量少且有残缺,所以数据预处理显得十分重要。当然,高分都有一些很tricky的方法(比如titanic的幸存者名单其实是公开的)。个人认为0.8左右的分数算是比较优秀的,考虑到过拟合的问题,在0.75左右都比较正常。另外,随机森林法做这个预测好像有奇效,但是我目前还没有试过。
接下来就是主要记录一下用到的代码和它们的功能。
用到的语言是python 3.6.6 Tensorflow 1.13.0,是否并行不重要,主要的包是pandas,numpy和scikit learn,最后一个主要是做独热编码用的
train_df=pd.read_csv('train.csv')
test_df=pd.read_csv('test.csv')
读取数据以后先看一下缺失变量:
![69c6f64d05aeaa15b4567e4178020e98.png](https://i-blog.csdnimg.cn/blog_migrate/a27f8191178a2cf9b7df1e1df5b693cd.jpeg)
虽然age的缺失值也很多,Cabin里的缺失值太多,而且就分析来说,年龄对生还率可能是有较大的影响的,所以留下,而感觉上没有影响的则扔掉。
train_df=train_df.drop(['Ticket','Cabin'],axis=1)
test_df=test_df.drop(['Ticket','Cabin'],axis=1)
train_df['Embarked']=train_df['Embarked'].fillna(method='ffill')
test_df['Fare']=test_df['Fare'].fillna(method='ffill')
s_train=train_df['Age'].value_counts(normalize=True)
s_test=test_df['Age'].value_counts(normalize=True)
missing_age_train=train_df['Age'].isnull()
train_df.loc[missing_age_train,'Age']=np.random.choice(s_train.index,size=len(train_df[missing_age_train]),p=s_train.values)
missing_age_test=test_df['Age'].isnull()
test_df.loc[missing_age_test,'Age']=np.random.choice(s_test.index,size=len(test_df[missing_age_test]),p=s_test.values)