入坑kaggle第三天- Titanic - Machine Learning from Disaster模型优化

直觉可靠吗?
在数据分析时, 直接往往是不可靠的, 因为数据是真实的, 没有经过任何人为处理, 而且并非二维的线性模型。
而且, 数据的复杂程度, 是难以用直觉处理的, 必须用科学的工具。

当前模型的分数为:
Score: 0.77511
还有很多的提升空间。根据以往写深度学习模型的经验, 一般是2/8法则, 20%的时间写一个能用的模型, 剩下80%的时间优化模型。

1 数据分析

https://www.youtube.com/watch?v=fS70iptz-XU
这个视频提供了很好的数据模型方法与解题思路。
train.csv文件, 就是一个数据表格, 用pandas和matplotlib.pyplot可以大大提高分析效率。
在这里插入图片描述

import pandas as pd
df = pd.read_csv('titanic/train.csv')
print(df.shape)
print(df.count())
(891, 12)
PassengerId    891
Survived       891
Pclass         891
Name           891
Sex            891
Age            714
SibSp          891
Parch          891
Ticket         891
Fare           891
Cabin          204
Embarked       889
dtype: int64

可以看到, 表格为891行, 12列, 部分数据没有填写, 需要做数据清洗。

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
df.Survived.value_counts().plot(kind='bar', alpha=0.5)
plt.show()

用value_counts()可以作图分析:
在这里插入图片描述
可见, 891名乘客中, 大约550人死亡, 350人存活。
也可用百分数:只需加入:normalize=True

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.show()

在这里插入图片描述
可见60%的死亡, 40%的存活。
记得电影中说道, 妇女和儿童优先上救生艇, 先看年龄

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4

plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")

plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")

plt.show()

在这里插入图片描述
可以看出, 电影是真实的, 死亡的大多为老年人, 存活的大多为年轻人。中年人的存活死亡几乎相同。

如果加入头等舱,2, 3等, 结果如下:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4

plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")

plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")

plt.subplot2grid((2,3), (0,2)) # sub3
df.Pclass.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Class")

plt.show()

在这里插入图片描述
可以看到, 富人和穷人的比例

如果加入曲线, 可以看到穷人和富人的分布

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4

plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")

plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")

plt.subplot2grid((2,3), (0,2)) # sub3
df.Pclass.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Class")

plt.subplot2grid((2,3), (1,0), colspan=2) 
for x in [1, 2, 3]:
    df.Age[df.Pclass == x].plot(kind='kde') # kind density estimation
plt.title('Class wrt Age')# with regard to
plt.legend(("1st", "2nd", "3rd"))

plt.show()

在这里插入图片描述
群人几乎都是20岁左右, 富人大多为30-40岁。

昨天, 本以为死亡与乘客无关, 但通过作图发现, 多数为英国人, 少数为法国和爱尔兰人。

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4

plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")

plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")

plt.subplot2grid((2,3), (0,2)) # sub3
df.Pclass
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值