泰坦尼克号数据集_用逻辑回归模型预测泰坦尼克号生存率

37f075b88645a25a54739b42bc6858ad.png

泰坦尼克号是当时世界上体积最庞大、内部设施最豪华的客运轮船,有“永不沉没”的美誉 。然而不幸的是,在它的处女航中,泰坦尼克号便遭厄运。

这次打算练练手,用刚学的机器学习预测kaggle上的预测泰坦尼克号生存率项目。

先用xmind对流程进行了整理,让每个步骤更清晰。

ef081f43166e5d49ea6b9c169a63ba13.png

1.提出问题

拥有哪些特征的人在泰坦尼克号中更容易存活?

2.理解数据

  • 数据采集

数据来源:

Titanic: Machine Learning from Disaster

  • 准备步骤

导入数据

# 忽略警告提示

7544660d0a3ac22060e603118bd6f399.png
#查看数据类型列的描述统计信息

dee0474b3c4ead3169b4658a7d21c3e4.png

3.数据清洗

  • 数据预处理
#查看每一列的数据类型,和数据总数

b8b7da19da4e7272aac2efa6253cf517.png

从上图中,我发现survived,Age ,Fare ,Cabin ,embarked都存在数据缺失的情况。数值int类型缺失处理:使用平均值进行填充:

#年龄age

字符串string 类型缺失值处理:

#登船港口embarked
full['Embarked'].head()

72e0550ecab4c3927206f4e75afbf161.png
'''
#船舱号 cabin full['Cabin'].head()

8a0c2fbc4883a989f41c12131dcb0383.png
#由于船舱号的缺失数据较多,缺失值填充为U,表示未知unknown
full['Cabin']=full['Cabin'].fillna('U')
  • 特征提取

9393b991bc2600db4cb4d3da170821be.png

特征提取分为:

1.数值类型:直接使用

2.时间序列类型:转成单独的年、月、日 (该项目中没有此类型)

3.分类数据类型:用数值代替类别,使用one-hot编码

one-hot编码(dummy variable虚拟变量):如果原始数据中有n种类别,则把一种特征拓展成n种特征,将对应的特征拓展为1,其他为0

#分类数据特征提取:性别

611f875cf7319f02210908391be1c773.png
#分类数据特征提取:登船港口
full['Embarked'].head()

04681a7b2b043fe108cf6915bcfef32a.png
#存放提取后的特征
embarkedDf=pd.DataFrame()
#使用get_dummies进行one-hot编码,列名前缀是Embarked
embarkedDf=pd.get_dummies(full['Embarked'],prefix='Embarked')
embarkedDf.head()

8371f12363b41b6d1f79c40bd9300d7a.png
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

49da55c07da2e1e29fcd3350d2c6a3d1.png
#分类数据特征提取:客舱等级

890a9facab4fdda48be0ae3946e0de88.png
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

cefe01701689a031c3d9c05b0a0d7609.png
#分类数据特征提取:姓名

329c7e2684c5d3fa0ec39ae6386aee79.png
#定义函数:从姓名中获取头衔,根据名字和头衔后面的标点符号进行分割
def getTitle(name):
    str1=name.split(',')[1] #Mr.Owen Harris
    str2=str1.split('.')[0] #Mr
    #strip()方法用于移除字符串头尾指定的字符(默认为空格)
    str3=str2.strip()
    return str3

#存放提取后的特征
titleDf=pd.DataFrame()
#map函数:对series每个数据应用自定义的函数计算
titleDf['Title']=full['Name'].map(getTitle)
titleDf.head()

44eef2cd6645b9e428c1674d6e1db481.png
#姓名中头衔字符串与定义头衔类别的映射关系

cfa87c5cbfcaab15045c1f8e8e5e662b.png
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

dab6692ece348a658f4dc96980b202bf.png
#分类数据提取:客舱号

2c4dc91fa556910c449c1ae2cc05ea35.png

定义匿名函数:对两个数相加

#语法: lambda 参数1,参数2:函数体或者表达式
sum= lambda a,b:a+b

#调用sum函数
print("相加后的值为:",sum(10,20))

66460f03042b5b8ba54bc192af547de9.png
#存放客舱号信息
cabinDf=pd.DataFrame()
'''
客舱号的类别值是首字母,如C85类别映射为首字母C,通过匿名函数找到每一个的船舱首字母
'''
full['Cabin']=full['Cabin'].map(lambda c:c[0])
#使用get-dummies进行one-hot编码,列名前缀是Cabin
cabinDf=pd.get_dummies(full['Cabin'],prefix='Cabin')

cabinDf.head()

a326850fde9c0daff43cf832a61f9063.png
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

201fe0f5c76339acb2e82b9e691cf575.png

4e0cb08620224cb3679003764f8912b8.png
#分类数据特征提取:家庭类别

100cbc9dd9962eb23241c3d439210c23.png
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

40952a67d1bff41be6278f733bf30c47.png

51a40550562149d9efa9bb96a2698fb7.png
  • 特征选择
#到现在已经有了这么多个特征了

145fda16fe371153ad3108464836816f.png
'''

193daea632f07f8de38f86d0593bc1d4.png

根据各个特征与生成情况(Survived)的相关系数大小,选择了这几个特征作为模型的输入: 头衔(前面所在的数据集titleDf)、客舱等级(pclassDf)、家庭大小(familyDf)、船票价格(Fare)、船舱号(cabinDf)、登船港口(embarkedDf)、性别(Sex)

#特征选择

9524fa8ed72194fb2cf695048f048a18.png

c09e1dfea93176b8ef719237ea30917d.png

4.构建模型

'''

0a4a4692cd2e3e7f0ec9c7f3989e0c62.png

'''
从原始数据集(source)中拆分出训练数据集(用于模型训练train),测试数据集(用于模型评估test)
train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和test data
train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
'''
from sklearn.model_selection import train_test_split 

#建立模型用的训练数据集和测试数据集
train_X, test_X, train_y, test_y = train_test_split(source_X ,
                                                    source_y,
                                                    train_size=.8)

#输出数据集大小
print ('原始数据集特征:',source_X.shape, 
       '训练数据集特征:',train_X.shape ,
      '测试数据集特征:',test_X.shape)

print ('原始数据集标签:',source_y.shape, 
       '训练数据集标签:',train_y.shape ,
      '测试数据集标签:',test_y.shape)

3e69af51a07549b50890303ba1cab3e0.png
  • 选择机器学习算法

这次从多种机器学习算法中选择使用逻辑回归模型。

#随机森林Random Forests Model
  • 训练模型
#第一步:导入算法

5.评估模型

2f099b0c829bfea3156182d558be8e33.png

6.方案实施

使用预测数据集到底预测结果,并保存到csv文件中,上传到Kaggle中,并查看排名。

#使用机器学习模型,对预测数据集中的生存情况进行预测

200a2ac8c8b7033f51773efef6703960.png
在Titanic的项目页中,找到"submit predictions",按图中的要求上传预测文件。

906ad2e75295c5774754682bb33b87af.png

最终预测结果的排名为6569名。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用Python进行预测泰坦尼克号乘客生存率的步骤: 1. 导入数据集 首先,我们需要导入泰坦尼克号数据集,可以使用Pandas库中的read_csv函数进行导入。例如: ```python import pandas as pd # 读取训练集和测试集数据 train_data = pd.read_csv('train.csv') test_data = pd.read_csv('test.csv') ``` 2. 数据预处理 接着,我们需要对数据进行预处理,包括填补缺失值、转换类别变量为数值变量、选择特征等等。 ```python # 填补缺失值 train_data['Age'].fillna(train_data['Age'].median(), inplace=True) test_data['Age'].fillna(test_data['Age'].median(), inplace=True) train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True) test_data['Fare'].fillna(test_data['Fare'].median(), inplace=True) # 转换类别变量为数值变量 train_data['Sex'] = train_data['Sex'].map({'female': 0, 'male': 1}) test_data['Sex'] = test_data['Sex'].map({'female': 0, 'male': 1}) train_data['Embarked'] = train_data['Embarked'].map({'C': 0, 'Q': 1, 'S': 2}) test_data['Embarked'] = test_data['Embarked'].map({'C': 0, 'Q': 1, 'S': 2}) # 选择特征 features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked'] x_train = train_data[features] y_train = train_data['Survived'] x_test = test_data[features] ``` 3. 模型训练和预测 接下来,我们可以使用一些经典的分类算法,比如决策树、随机森林、逻辑回归等等,对数据进行训练和验证,以得到一个准确的模型。 这里以随机森林为例进行训练和预测。 ```python from sklearn.ensemble import RandomForestClassifier # 定义随机森林模型 rfc = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1) # 训练模型 rfc.fit(x_train, y_train) # 预测测试集结果 y_pred = rfc.predict(x_test) ``` 4. 提交结果 最后,我们可以将预测结果进行提交,参加kaggle竞赛。 ```python # 将结果保存为csv文件 submission = pd.DataFrame({'PassengerId': test_data['PassengerId'], 'Survived': y_pred}) submission.to_csv('submission.csv', index=False) ``` 以上就是使用Python进行预测泰坦尼克号乘客生存率的步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值