kaggle——Titanic泰坦尼克之灾

1)目标

任务网址:kaggle_泰坦尼克号

1912年4月15日,在她的处女航中,被广泛认为的泰坦尼克号与冰山相撞后沉没。不幸的是,船上没有足够的救生艇供所有人使用,导致2224名乘客和机组人员中的1502人死亡。

尽管幸存者有一些运气,但似乎有些人比其他人更有可能生存。

在这一挑战中,我们要求您建立一个预测模型来回答以下问题:“什么样的人更有可能生存?” 使用旅客数据(即姓名,年龄,性别,社会经济舱等)。

2)流程思路

1.数据分析与处理(非常重要)
2.建立简单模型
3.训练并评估
4.修改模型
5.做出预测

3)pandas语法

读取数据:r’为告诉系统下面的引号无转义字符
data_train = pd.read_csv(r’D:\python\kaggle\泰坦尼克\数据集\titanic\train.csv’,engine = ‘python’,encoding=‘UTF-8’)

数据数量等信息:
data_train.info()

描述数据特征:
data_train.describe()

离散特征 转化为独热向量:
data_test=pd.get_dummies(data_test)

a列 大于2的数字对应的b列改为newdata:
df.loc[df.a>=2,‘b’] = ‘new_data’

调用某列的方式:
data_train[‘Age’]
data_train.Age
data_train.loc[3,5] #第三行第五列的数据:如果表头是字符串,则需要用字符串

求某列平均数:
age_mean = data_train[‘Age’].mean()

转化为数值型:(numpy)
train_np = data_train.values

删除:
del data_test[‘Name’]

找到空的:
pd.isnull(data_test.Age)

输出:
result = pd.DataFrame({‘PassengerId’:id, ‘Survived’:ans.astype(np.int32)})
result.to_csv(r"D:\python\kaggle\泰坦尼克\数据集\titanic\ans.csv", index=False)

更换数据:
data = data.replace(to_replace=’?’, value=np.nan)

4)数据认知与处理

head()头文件:
在这里插入图片描述
总共有12组feature,Survived为y值,表示的是该乘客是否获救;
其余都是乘客feature,包括:
PassengerId ID
Pclass 舱位
Name 姓名
Sex 性别
Age 年龄
SibSp 兄弟个数
Parch 父母与小孩个数
Ticket 船票
Fare 票价
Cabin 客舱
Embarked 港口

info()信息:

<class ‘pandas.core.frame.DataFrame’>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

观察可以发现,部分数据缺失,需要补全,这里采用了比较粗暴的方式,AGE的缺失采用了平均数补全,CABIN的缺失选择了直接删掉 。

其他数据处理:归一化,删除名字等与存活率显然无关属性

5)建模与预测代码

import numpy as np
import matplotlib as plt
import pandas as pd
from sklearn import linear_model
from sklearn.ensemble import RandomForestClassifier

#读取数据
data_train = pd.read_csv(r'D:\python\kaggle\泰坦尼克\数据集\titanic\train.csv',engine = 'python',encoding='UTF-8')
#data_train.info()
data_test = pd.read_csv(r'D:\python\kaggle\泰坦尼克\数据集\titanic\test.csv',engine = 'python',encoding='UTF-8')
id = data_test.PassengerId

#数据工程
#补全AGE
age_mean = data_train['Age'].mean()
data_train.loc[pd.isnull(data_train.Age),'Age'] = age_mean

#删除无用数据NameTicket
del data_train['Name']
del data_train['Ticket']
del data_train['Cabin']

#独热向量
data_train=pd.get_dummies(data_train)

#转化为数值型
train_np = data_train.values
y = train_np[:, 1]
x = train_np[:, 2:]

#训练
lr = linear_model.LogisticRegression(solver='liblinear',C=55555, penalty='l2', tol=1e-15)
lr.fit(x, y)

#测试集处理
del data_test['Name']
del data_test['Ticket']
del data_test['Cabin']
del data_test['PassengerId']
age_mean_test = data_test['Age'].mean()
data_test.loc[pd.isnull(data_test.Age),'Age'] = age_mean_test
age_fare_test = data_test['Fare'].mean()
data_test.loc[pd.isnull(data_test.Fare),'Fare'] = age_fare_test
data_test=pd.get_dummies(data_test)

#预测
test_np = data_test.values
ans = lr.predict(test_np)
w = lr.coef_        #看一下学习到的w
result = pd.DataFrame({'PassengerId':id, 'Survived':ans.astype(np.int32)})
result.to_csv(r"D:\python\kaggle\泰坦尼克\数据集\titanic\ans.csv", index=False)

6)运行结果

在这里插入图片描述

7)总结

AGE的缺失采用了平均数补全,后采采用RF补全,预测性能并没有提升,可以推测,这部分数据缺失并不关键),CABIN的缺失选择了直接删掉 ,后来证明CABIN的删除影响了预测准确率,应该予以保留
同时可能可以考虑名字字段等因素对结果的影响,另外根据结果可推测,算法处于欠拟合状态,可尝试增加特征增加其你和能力,例:增加年龄与性别的符合特征等。

8)参考

https://www.heywhale.com/mw/project/5bfe39b3954d6e0010681cd1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值