titanic数据集_数据挖掘项目——泰坦尼克号生还预测

2023-10-30

数据集来源于kaggle经典竞赛数据集

一、目的

根据数据集中的信息,利用python机器学习对泰坦尼克乘客是否生还进行预测。

二、数据集

我的数据集有三个,test、train、genderclassmodel,都是csv格式

test和train数据集中的字段:

从左到右依次是,乘客编号、是否生还、仓位、姓名、性别、年龄、船上同辈亲属的人数、乘客有父母或孩子的人数、船票号、旅费、船舱号、上船的港口(C = Cherbourg, Q = Queenstown, S = Southampton)

genderclassmodel是测试集的实际生还结果:

三、训练思路

通过对数据集的观察以及经验,在数据集中如乘客姓名、船票号、编号这些属性和结果明显无关,是无用的信息,可以先去除掉。数据中有很多空值,缺失值也可以先进行处理。对于船舱号的样本太少,可以不考虑这个特征,先进性删除。

我们选用KNN和随机森林进行训练。

四、数据清洗和特征处理`

引入训练集和测试集、删除姓名、床票号、船舱号的列

import numpy as np
import pandas as pd 
#1数据引入
df_train=pd.read_csv('data/titanic/train.csv')
df_train=df_train.drop(['Name','Ticket','Cabin'],axis=1)
df_test=pd.read_csv('data/titanic/test.csv')
df_test=df_test.drop(['Name','Ticket','Cabin'],axis=1)

对缺失值进行处理,age和fare的缺失值比较多,我用平均值填充,而上船港口有两个缺失值,就直接删除了。

#2、缺失值处理
    df_train['Age']=df_train['Age'].fillna(df_train['Age'].mean())
    df_train['Fare']=df_train['Fare'].fillna(df_train['Fare'].mean())
    df_train=df_train.dropna()
    df_test['Age']=df_test['Age'].fillna(df_test['Age'].mean())
    df_test['Fare']=df_test['Fare'].fillna(df_test['Fare'].mean())

特征值的归一化和标准化

由于性别和上船港口是字符串类型,我们需要将其转化为数值,用0、1、2代替。而其他的值我用归一化将其转化为0-1之间的数。

 #3、特征处理
    from sklearn.preprocessing import MinMaxScaler,StandardScaler
    from sklearn.preprocessing import LabelEncoder,OneHotEncoder
    from sklearn.preprocessing import LabelEncoder,OneHotEncoder
    scaler_list=[Age,Fare,Pclass,SibSp,Parch]
    column_list=['Age','Fare','Pclass','SibSp','Parch']
    for i in range(len(scaler_list)):
        if not scaler_list[i]:
            df_train[column_list[i]]=MinMaxScaler().fit_transform(df_train[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
            df_test[column_list[i]]=MinMaxScaler().fit_transform(df_test[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
        else:
            df_train[column_list[i]]=StandardScaler().fit_transform(df_train[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
            df_test[column_list[i]]=StandardScaler().fit_transform(df_test[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
    scaler_list=[Sex,Embarked]
    column_list=['Sex','Embarked']
    for i in range(len(scaler_list)):
        if scaler_list[i]:
            df_train[column_list[i]]=LabelEncoder().fit_transform(df_train[column_list[i]])
            df_train[column_list[i]]=MinMaxScaler().fit_transform(df_train[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
            df_test[column_list[i]]=LabelEncoder().fit_transform(df_test[column_list[i]]) 
            df_test[column_list[i]]=MinMaxScaler().fit_transform(df_test[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]                                                                                                                     
    return df_train,test
def main():
    print(titanic_processing())
if __name__=='__main__':
    main()

显示结果

特征处理好了之后就可以开始进行建模啦

这里我选择额三种模型进行训练,KNN、支持向量机SVM和随机森林,该模型是生还的判别,所以我们选用分类模型进行预测。

这里值得一提的事,我获取到的数据中,训练集里包含标注Survived,首先要把它去除掉,第一步处理就是分出训练集、测试集的特征部分和标注部分。

y_train=df_train['Survived'].values
    x_train=df_train.drop('Survived',axis=1).values
    y_class=pd.read_csv('data/titanic/genderclassmodel.csv')
    y_test=y_class['Survived'].values
    x_test=df_test.values

然后开始建模,我们要选择三种模型,对每种模型的评分进行比较,所以我创建了一个models 的list。

from sklearn.ensemble import RandomForestClassifier,AdaBoostClassifier
    from sklearn.svm import SVC
    from sklearn.neighbors import NearestNeighbors,KNeighborsClassifier
    from sklearn.metrics import accuracy_score,recall_score,f1_score
    models=[]
    models.append(('KNN',KNeighborsClassifier(n_neighbors=3)))
    models.append(('SVM',SVC(C=100)))
    models.append(('Ramdomforest',RandomForestClassifier()))

然后进行模型拟合和预测。

for clf_name,clf in models:
        clf.fit(x_train,y_train)
        xy_list=[(x_train,y_train),(x_test,y_test)]
        for i in range(len(xy_list)):
            x_part=xy_list[i][0]
            y_part=xy_list[i][1]
            y_pred=clf.predict(x_part)
            print(i)
            print(clf_name,'ACC:',accuracy_score(y_part,y_pred))
            print(clf_name,'REC:',recall_score(y_part,y_pred))
            print(clf_name,'f1:',f1_score(y_part,y_pred))

完整代码如下:

import numpy as np
import pandas as pd 
#1数据引入
def titanic_processing(Age=False,Fare=False,Pclass=False,SibSp=False,Parch=False,Sex=True,Embarked=True):
    df_train=pd.read_csv('data/titanic/train.csv')
    df_train=df_train.drop(['Name','Ticket','Cabin','PassengerId'],axis=1)
    df_test=pd.read_csv('data/titanic/test.csv')
    df_test=df_test.drop(['Name','Ticket','Cabin','PassengerId'],axis=1)
#2、缺失值处理
    df_train['Age']=df_train['Age'].fillna(df_train['Age'].mean())
    df_train['Fare']=df_train['Fare'].fillna(df_train['Fare'].mean())
    df_train=df_train.dropna()
    
    df_test['Age']=df_test['Age'].fillna(df_test['Age'].mean())
    df_test['Fare']=df_test['Fare'].fillna(df_test['Fare'].mean())
   
    #3、特征处理
    from sklearn.preprocessing import MinMaxScaler,StandardScaler
    from sklearn.preprocessing import LabelEncoder,OneHotEncoder
    from sklearn.preprocessing import LabelEncoder,OneHotEncoder
    scaler_list=[Age,Fare,Pclass,SibSp,Parch]
    column_list=['Age','Fare','Pclass','SibSp','Parch']
    for i in range(len(scaler_list)):
        if not scaler_list[i]:
            df_train[column_list[i]]=MinMaxScaler().fit_transform(df_train[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
            df_test[column_list[i]]=MinMaxScaler().fit_transform(df_test[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
        else:
            df_train[column_list[i]]=StandardScaler().fit_transform(df_train[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
            df_test[column_list[i]]=StandardScaler().fit_transform(df_test[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
    scaler_list=[Sex,Embarked]
    column_list=['Sex','Embarked']
    for i in range(len(scaler_list)):
        if scaler_list[i]:
            df_train[column_list[i]]=LabelEncoder().fit_transform(df_train[column_list[i]])
            df_train[column_list[i]]=MinMaxScaler().fit_transform(df_train[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]
            df_test[column_list[i]]=LabelEncoder().fit_transform(df_test[column_list[i]]) 
            df_test[column_list[i]]=MinMaxScaler().fit_transform(df_test[column_list[i]].values.reshape(-1,1)).reshape(1,-1)[0]                                                                                                                     
    return df_train,df_test
def titanic_model(df_train,df_test):
    y_train=df_train['Survived'].values
    x_train=df_train.drop('Survived',axis=1).values
    y_class=pd.read_csv('data/titanic/genderclassmodel.csv')
    y_test=y_class['Survived'].values
    x_test=df_test.values
    from sklearn.ensemble import RandomForestClassifier,AdaBoostClassifier
    from sklearn.svm import SVC
    from sklearn.neighbors import NearestNeighbors,KNeighborsClassifier
    from sklearn.metrics import accuracy_score,recall_score,f1_score
    models=[]
    models.append(('KNN',KNeighborsClassifier(n_neighbors=3)))
    models.append(('SVM',SVC(C=100)))
    models.append(('Ramdomforest',RandomForestClassifier()))
    for clf_name,clf in models:
        clf.fit(x_train,y_train)
        xy_list=[(x_train,y_train),(x_test,y_test)]
        for i in range(len(xy_list)):
            x_part=xy_list[i][0]
            y_part=xy_list[i][1]
            y_pred=clf.predict(x_part)
            print(i)
            print(clf_name,'ACC:',accuracy_score(y_part,y_pred))
            print(clf_name,'REC:',recall_score(y_part,y_pred))
            print(clf_name,'f1:',f1_score(y_part,y_pred))
def main():
    df_train,df_test=titanic_processing()
    titanic_model(df_train,df_test)
if __name__=='__main__':
    main()

我们来看评价结果:

0

KNN ACC: 0.875140607424072

KNN REC: 0.8

KNN f1: 0.8305343511450382

1

KNN ACC: 0.8181818181818182

KNN REC: 0.8156028368794326

KNN f1: 0.7516339869281047

0

SVM ACC: 0.84251968503937

SVM REC: 0.6764705882352942

SVM f1: 0.7666666666666666

1

SVM ACC: 0.8779904306220095

SVM REC: 0.8014184397163121

SVM f1: 0.8158844765342961

0

Ramdomforest ACC: 0.9820022497187851

Ramdomforest REC: 0.9647058823529412

Ramdomforest f1: 0.9761904761904762

1

Ramdomforest ACC: 0.7990430622009569

Ramdomforest REC: 0.6950354609929078

Ramdomforest f1: 0.7

0

KNN ACC: 0.875140607424072

KNN REC: 0.8

KNN f1: 0.8305343511450382

1

KNN ACC: 0.8181818181818182

KNN REC: 0.8156028368794326

KNN f1: 0.7516339869281047

0

SVM ACC: 0.84251968503937

SVM REC: 0.6764705882352942

SVM f1: 0.7666666666666666

1

SVM ACC: 0.8779904306220095

SVM REC: 0.8014184397163121

SVM f1: 0.8158844765342961

0

Ramdomforest ACC: 0.9820022497187851

Ramdomforest REC: 0.9647058823529412

Ramdomforest f1: 0.9761904761904762

1

Ramdomforest ACC: 0.7990430622009569

Ramdomforest REC: 0.6950354609929078

Ramdomforest f1: 0.7

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

titanic数据集_数据挖掘项目——泰坦尼克号生还预测 的相关文章

随机推荐

  • java selenium页面跳转页面跳转页面_4、selenium webdriver + java 进行元素定位时的页面跳转问题...

    在使用selenium Java对元素进行定位时经常遇见以下两种问题 问题一 在当前页面进行跳转时 提示 Unable to locate element 原因 driver在打开网页时 网页加载速度过慢 导致接下来的语句找不到元素 解决办
  • elementUI解决栅格布局一行放五个盒子放不下的问题

    1 问题图 2 解决办法 修改 lg span 24 5 这样在css中可以看到是 el col lg 24 5
  • 百度AI接口使用-图像增强篇

    地址 http ai baidu com 这里使用python接口 需要传入的是access token 返回是一个字典 其中image字段就是处理后的图片的base64编码 其中 access token需要去获取 如下 获取链接 htt
  • 结构体-初阶

    结构体是我们c语言初阶的最后一部分了 结束了结构体就要进入到c语言的进阶部分 1 结构体的声明 我们知道数组是一组相同类型的元素集合 而结构体可以是不同类型的元素集合 也可以保存相同类型 1 1 结构的声明 例如描述一个学生 typedef
  • 001 java为什么需要函数式编程

    一 概述 集合是我们java程序员每天都需要的工具 没有了集合 java程序员几乎不能干任何的事情 我们每天的工作也是在对集合进行不同的操作 尽管集合的功能已经足够强大 但是当我们面对复杂的业务问题的时候 利用原始的集合操作就会变得让人恶心
  • 十大PyTorch最常用的转换函数

    介绍 Pytorch是一个深度学习框架 广泛用于图像分类 分割 目标识别等各种任务 在这种情况下 我们必须处理各种类型的数据 很可能在大多数情况下 数据可能不是我们所需要的格式 PyTorch转换就是救星 torchvision trans
  • 恩施职业技术学院工程能力实训开班!青春逐梦,砥砺前行

    为深化校企合作 产教融合助力新工科建设 提升学生工程实践能力 电巢工程能力实训班按照不同岗位类别 匹配对应的企业岗位任职能力要求对学生开展分级培养 以产业需求为导向 培养创新型 应用型人才 6月13日上午 深圳电巢联合恩施职业技术学院 工程
  • SessionID漏洞

    漏洞原理 当用户第一次访问服务程序时 服务器端会给用户创建一个独立的会话Session 并且生成一个SessionID SessionID在响应浏览器的时候会被加载到cookie中 并保存到浏览器中 当用户再一次访问服务程序时 请求中会携带
  • golang命令行库cobra的使用

    简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库 也是一个生成程序应用和命令行文件的程序 下面是Cobra使用的一个演示 Cobra提供的功能 简易的子命令行模式 如 app server app fetch等等 完全
  • Java long数据类型

    long数据类型是64位有符号的Java原始数据类型 当对整数的计算结果可能超出int数据类型的范围时使用 long数据类型范围是 9 223 372 036 854 775 808至9 223 372 036 854 775 807 2
  • JUC详细笔记

    此笔记根据黑马JUC课程整理 1 JUC概述 1 1什么是juc 在 Java 中 线程部分是一个重点 本篇文章说的 JUC 也是关于线程的 JUC就是 java util concurrent 工具包的简称 这是一个处理线程的工具包 JD
  • XHS信号和XVS信号

    XHS信号和XVS信号 camera的总体示意图如下 控制部分为摄像头上电 IIC控制接口 数据输出为摄像头拍摄的图像传到主控芯片 所有要有DATA 行场同步和时钟信号 摄像头有两种同步方式 行同步信号 HSYNC 和场同步信号 VSYNC
  • 分类问题的评价指标:二分类【准确率(Accuracy):用在数据均衡(每一类的样本数量相同)的数据集上】【精确率(Precision)】【召回率(Recall)】【F1】

    一 混淆矩阵 对于二分类的模型 预测结果与实际结果分别可以取0和1 我们用N和P代替0和1 T和F表示预测正确和错误 将他们两两组合 就形成了下图所示的混淆矩阵 注意 组合结果都是针对预测结果而言的 由于1和0是数字 阅读性不好 所以我们分
  • OpenGL系列教程之十二:OpenGL Windows图形界面应用程序

    这篇文章是关于使用MVC Model View Controller 模型 视图 控制 框架在windows平台下创建OpenGL图形界面应用程序 MVC框架在GUI Graphic User Interface 图形用户界面 应用程序中被
  • Docker之数据卷与Dockerfile

    一 docker基本运行 将容器后台运行并进入容器 docker run itd name 名字 centos 强制删除所有容器 docker rm f docker ps a 二 数据卷 目录挂载 docker在容器中管理数据主要有两种方
  • 【计算机网络】Linux环境中的TCP网络编程

    文章目录 前言 一 TCP Socket API 1 socket 2 bind 3 listen 4 accept 5 connect 二 封装TCPSocket 三 服务端的实现 1 封装TCP通用服务器 2 封装任务对象 3 实现转换
  • python高阶函数用法之map reduce

    map 函数 接收两个参数 一个是函数 一个是Iterable map将传入的函数依次作用到序列的每个元素 并把结果作为新的Iterator返回 gt gt gt def f x return x x gt gt gt r map f 1
  • 一直没懂PCB叠层设计,直到看见这篇文章......

    总的来说叠层设计主要要遵从两个规矩 每个走线层都必须有一个邻近的参考层 电源或地层 邻近的主电源层和地层要保持最小间距 以提供较大的耦合电容 下面列出从两层板到八层板的叠层来进行示例讲解 一 单面PCB板和双面PCB板的叠层 对于两层板来说
  • Python-文件操作

    Python文件操作 1 打开文件 使用open 函数打开文件 指定文件名和模式 常用模式有 r 读取 默认 w 写入 会先截断文件 a 追加 b 二进制模式 t 文本模式 默认 updating reading and writing f
  • titanic数据集_数据挖掘项目——泰坦尼克号生还预测

    数据集来源于kaggle经典竞赛数据集 一 目的 根据数据集中的信息 利用python机器学习对泰坦尼克乘客是否生还进行预测 二 数据集 我的数据集有三个 test train genderclassmodel 都是csv格式 test和t