python泰坦尼克号数据预测_使用python预测泰坦尼克号生还

简介

Titanic是Kaggle竞赛的一道入门题,参赛者需要根据旅客的阶级、性别、年龄、船舱种类等信息预测其是否能在海难中生还,详细信息可以参看https://www.kaggle.com/,本文的分析代码也取自 kaggle 中该竞赛的 kernal。

数据介绍

给出的数据格式如下:

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked

1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S

2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C

数据项的含义如下:

PassengerId:乘客ID

Survived:是否生还,0表示遇难,1表示生还

Pclass:阶级,1表示最高阶级,3最低

Name:姓名

Sex:性别

Age:年龄

SibSp:同乘船的兄弟姐妹的数量

Parch:是否有配偶同乘,1表示是

Ticket:船票编号

Fare:恐惧指数

Cabin:船舱号

Embarked:登船港口

问题分析

这是一个比较典型的基于特征的分类问题,根据一般的数据处理流程可以将问题的求解分解成为以下步骤:

数据预处理

读取数据,在本文代码中使用了 python 的 pandas 包管理数据结构

特征向量化,在本文代码中将性别和登船港口特征转成向量化表示

处理残缺数据,在本文代码中将残缺年龄用平均年龄表示,残缺的登船港口用频繁项表示

扔掉多余项,姓名、ID、舱号、票号在本问题中被认为是对分类没有帮助的信息,扔掉了这些特征项

数据训练

在本文代码中使用了 sklearn 中的随机森林进行分类,随机森林每次随机选取若干特征和数据项生成决策树,最后采用投票的方式来生成预测结果,本文代码中将第一列作为分类项,后n列作为特征项,随机生成100棵决策树对数据进行训练

预测并生成结果

代码实现

import pandas as pd

import numpy as np

import csv as csv

from sklearn.ensemble import RandomForestClassifier

# Data cleanup

# TRAIN DATA

train_df = pd.read_csv('train.csv', header=0) # Load the train file into a dataframe

# I need to convert all strings to integer classifiers.

# I need to fill in the missing values of the data and make it complete.

# female = 0, Male = 1

train_df['Gender'] = train_df['Sex'].map( {'female': 0, 'male': 1} ).astype(int)

# Embarked from 'C', 'Q', 'S'

# Note this is not ideal: in translating categories to numbers, Port "2" is not 2 times greater than Port "1", etc.

# All missing Embarked -> just make them embark from most common place

if len(train_df.Embarked[ train_df.Embarked.isnull() ]) > 0:

train_df.Embarked[ train_df.Embarked.isnull() ] = train_df.Embarked.dropna().mode().values

Ports = list(enumerate(np.unique(train_df['Embarked']))) # determine all values of Embarked,

Ports_dict = { name : i for i, name in Ports } # set up a dictionary in the form Ports : index

train_df.Embarked = train_df.Embarked.map( lambda x: Ports_dict[x]).astype(int) # Convert all Embark strings to int

# All the ages with no data -> make the median of all Ages

median_age = train_df['Age'].dropna().median()

if len(train_df.Age[ train_df.Age.isnull() ]) > 0:

train_df.loc[ (train_df.Age.isnull()), 'Age'] = median_age

# Remove the Name column, Cabin, Ticket, and Sex (since I copied and filled it to Gender)

train_df = train_df.drop(['Name', 'Sex', 'Ticket', 'Cabin', 'PassengerId'], axis=1)

# TEST DATA

test_df = pd.read_csv('test.csv', header=0) # Load the test file into a dataframe

# I need to do the same with the test data now, so that the columns are the same as the training data

# I need to convert all strings to integer classifiers:

# female = 0, Male = 1

test_df['Gender'] = test_df['Sex'].map( {'female': 0, 'male': 1} ).astype(int)

# Embarked from 'C', 'Q', 'S'

# All missing Embarked -> just make them embark from most common place

if len(test_df.Embarked[ test_df.Embarked.isnull() ]) > 0:

test_df.Embarked[ test_df.Embarked.isnull() ] = test_df.Embarked.dropna().mode().values

# Again convert all Embarked strings to int

test_df.Embarked = test_df.Embarked.map( lambda x: Ports_dict[x]).astype(int)

# All the ages with no data -> make the median of all Ages

median_age = test_df['Age'].dropna().median()

if len(test_df.Age[ test_df.Age.isnull() ]) > 0:

test_df.loc[ (test_df.Age.isnull()), 'Age'] = median_age

# All the missing Fares -> assume median of their respective class

if len(test_df.Fare[ test_df.Fare.isnull() ]) > 0:

median_fare = np.zeros(3)

for f in range(0,3): # loop 0 to 2

median_fare[f] = test_df[ test_df.Pclass == f+1 ]['Fare'].dropna().median()

for f in range(0,3): # loop 0 to 2

test_df.loc[ (test_df.Fare.isnull()) & (test_df.Pclass == f+1 ), 'Fare'] = median_fare[f]

# Collect the test data's PassengerIds before dropping it

ids = test_df['PassengerId'].values

# Remove the Name column, Cabin, Ticket, and Sex (since I copied and filled it to Gender)

test_df = test_df.drop(['Name', 'Sex', 'Ticket', 'Cabin', 'PassengerId'], axis=1)

# The data is now ready to go. So lets fit to the train, then predict to the test!

# Convert back to a numpy array

train_data = train_df.values

test_data = test_df.values

print 'Training...'

forest = RandomForestClassifier(n_estimators=100)

forest = forest.fit( train_data[0::,1::], train_data[0::,0] )

print 'Predicting...'

output = forest.predict(test_data).astype(int)

predictions_file = open("myfirstforest.csv", "wb")

open_file_object = csv.writer(predictions_file)

open_file_object.writerow(["PassengerId","Survived"])

open_file_object.writerows(zip(ids, output))

predictions_file.close()

print 'Done.'

后续思考

这是一个比较简单流程也较为完整的解决方案,但是也存在一些问题,比如

没有对测试结果的准确率和召回率进行评估

模型的参数选择是否可以进一步调整取得更好的效果?

如果采用一些集成学习的办法效果会不会进一步提升?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea代码可以编译但是爆红_推荐一款 IDEA 生成代码神器,写代码再也不用加班了...

作者:HeloWxl链接:https://www.jianshu.com/p/e4192d7c6844Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大。1、安装(EasyCode)我这里的话是已经那装好了。建议大…

html跑马灯_用Excel居然能做“跑马灯”,而且还这么简单!

我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!你没看错,上面这个就是用Excel做出来的,不过要用到窗体和控件。步骤如下&am…

c语言双链表排序交换节点_图解:单链表翻转的三种方式!

当我们在聊到链表反转的时候,一定说的都是单链表,双链表本身就具有前驱指针 Prev 和后续指针 next,无需进行翻转。单链表反转,反转后的效果如下:看起来很简单,只需要将单链表所有结点的 next 指向&#xff…

wsdl文档中的soap:address的生成规则_BAT大牛都在使用的数据库文档生成插件,不来看一下?...

一、概述在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐…

修订模式怎么彻底关闭_电脑玩游戏卡顿怎么办?

电脑玩游戏卡怎么办?在玩游戏时电脑卡真的是会气死人的,特别是在打团的时候卡了,想砸电脑有木有?那么电脑玩游戏卡怎么办呢?给大家介绍几个方法,可以尝试改善卡顿。软件方面:1、 开启电源性能模…

datepicker不能选择是为什么_为什么客厅不好看?休闲椅选错了

为什么客厅不好看?休闲椅选错了很多装修完毕的小伙伴们经常有这样一个疑问: 为什么我家的客厅看上去这么凌乱,一点都没有想象中井然有致?这其中的潜在原因有很多,比如沙发墙的装饰设计有误,比如各类家具的款式搭配不对…

如何打开屏幕坏的手机_每天打开手机屏幕20次?打开10次以上的朋友进~

现代社会最很普遍的现象就是不管有没有事,不断地打开手机屏幕看时间或者刷各种信息和段子。 一块小小的屏幕却有着巨大的魅力。明明没有任何事情要干,却还是忍不住诱惑(cant resist temptation [tɛmpˈteʃən])想要打开屏幕,仿佛潘多拉的盒…

mvc 两个控制器session 丢失_用纯 JavaScript 撸一个 MVC 程序

前言我想用 model-view-controller 架构模式在纯 JavaScript 中写一个简单的程序,于是我这样做了。希望它可以帮你理解 MVC,因为当你刚开始接触它时,它是一个难以理解的概念。我做了这个todo应用程序,这是一个简单小巧的浏览器应用…

redis线程阻塞原因排插_每次面试都要被问:为什么采用单线程的Redis也会如此之快?...

众所周知,Redis在内存库数据库领域非常地火热,它极高的性能和丰富的数据结构为我们的开发提供了极大的便利。但我们也听说了,Redis是单线程的,为什么采用单线程的Redis也会如此之快呢?这篇文章我们来分析一下其中的缘由…

ssm后台数据是为什么是空值_网易后台开发实习生面试总结

回想到网上流传多年的问题:学历重要?还是能力更重要?上周投了简历,网易HR共来了3个电话(头天晚上两个电话我在做实验没接到,最后第二天中午又给我打了电话),当她来第三个电话的时候,上面的问题在…

iptable 详解_最全的iptables防火墙详解.pdf

最全的iptables防火墙详解iptables /iptables /iippttaabblleess官方网站:hhttttpp::nneettffiilltteerr..oorrgg//• 数据包经过防火墙的路径• 禁止端口• 强制访问某站点• 发布内部网络服务器• 智能DNS• 端口映射• 通过NAT上网• IP 规则的保存与恢复• ipta…

python中函数type可以测试对象类型_python类型检测最终指南--Typing模块的使用

正文共:30429 字预计阅读时间:76分钟原文链接:https://realpython.com/python-type-checking/作者:Geir Arne Hjelle译者:陈祥安在本指南中,你将了解Python类型检查。传统上,Python解释器以灵活但隐式的方式处理类型。…

java 图片分段上传_java 分段读取文件 并通过HTTP上传

1、首先将文件分段,用RandomAccessFile2、分段后将分出的内容上传到http1.[代码][Java]代码URL url new URL(actionUrl);HttpURLConnection con (HttpURLConnection) url.openConnection();/** 允许Input、Output,不使用Cache */con.setDoInput(true);…

python算法的基本原理_kNN算法基本原理与Python代码实践

kNN是一种常见的监督学习方法。工作机制简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k各训练样本,然后基于这k个“邻居”的信息来进行预测,通常,在分类任务中可使用“投票法”,即选择这k个…

python中zip的使用_浅谈Python中的zip()与*zip()函数详解

前言1.实验环境: Python 3.6;2.示例代码地址:下载示例;3.本文中元素是指列表、元组、字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表)。zip(*iterables)函数详解zip()函数的定义从参数中的多个迭代器取元素组合成一个新的迭代…

奥的斯电梯tt服务器使用表_奥的斯电梯服务器TT使用说明1

目录一、TT介绍............................................................................................................... 3二、OTIS TT插头各针脚说明................................................................................................. 4三、T…

python安装提示缺少dll_解决Python安装时报缺少DLL问题【两种解决方法】

准备开始学习Python,但是刚准备环境搭建时就遇到了下面的错误:仔细的看了看,说是缺少DLL。对于这个问题的解决办法:方法一:1. 在安装包上点右键以管理员身份运行2. C:\Users\用户名\AppData\Local\Temp 文件夹上右键-&…

影像科dsa为什么必须买维修保险_了解什么是DSA,看这篇就够了

相对于超声、CT、磁共振等,DSA可能对大部分人而言都是比较陌生的,目前国内DSA市场基本都是进口品牌主导,国内能生产这种医疗设备的屈指可数,也就是说,目前我们在医院看到的DSA设备基本都来自"GPST"等进口厂商…

python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...

前言今天教大家用户Python GUI编程——tkinter 打造一个小说下载器,想看什么小说,就下载什么小说先看下效果图Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口。作为 python 特定的GU…

python while循环if_20170403Python控制流if、while、for语句学习

控制流if、while、for语句学习if elif else语句if语句是一种最常见的控制流语句类型。它用于判断一个条件,如果为True,则执行紧跟其后的代码块。一条if语句可以跟上一个或多个elif块以及一个“滴水不漏”的else块(如果所有条件都为False)。if ... :Print…