这道题的主页:https://www.kaggle.com/c/titanic

目录

一、 读取数据,观察数据分布

二、 数据预处理

1. 填充缺失值

2. 文字到数值的映射

三、模型

1. 用线性回归预测

2. 用逻辑回归预测

3. 用随机森林改进模型

四、特征工程示例

1. 如何自己构造特征

2. 随机森林特征重要性分析


一、 读取数据,观察数据分布

import numpy as np
import pandas as pd
import matplotlib as plt
import mathtitanic=pd.read_csv('train.csv')
print(titanic.describe())#查看每一列的情况
titanic.head()
print(titanic.shape)#(891, 12)

分析:survived这一列,1-存活,0-死亡

sex:是文字形式,不利于分析,故可能需要映射到数值的值

age:这一列空缺了一百多个值,从逻辑上考虑年龄还是很重要的,所以缺失值需要填补

Ticket:这列船票号,看起来没啥规律。。。

Fare:船票费用和船舱等级(Pclass)以及航程长短(Embarked)有关,先不处理

Cabin:这个缺失值太多了,先忽略

Embarked:上船港口,有三个取值,C/S/Q,是文字形式,不利于分析,故可能需要映射到数值的值,而且有2个缺失值

二、 数据预处理

1. 填充缺失值

可以采取:平均值/中值/众数等填充方式。

Age这列平均值和中值都可以考虑一下(看具体效果决定),Embarked就缺了俩,而且取值就3个离散值,故用众数比较合理。

(1)Age

titanic['Age']=titanic['Age'].fillna(titanic['Age'].mean()) #用均值(29.69911764705882)填充,如果是中值的话,就是median()
# titanic['Age']=titanic['Age'].fillna(titanic['Age'].median()) #用中值( 28.0)填充
print(titanic['Age'].describe())#查看每一列的情况

(2)Embarked

# 将上船港口映射到数值
print(titanic['Embarked'].unique()) #取值可能的结果:['S' 'C' 'Q' nan]
print(titanic['Embarked'].mode())   #'众数'是s,那就用s
titanic['Embarked']=titanic['Embarked'].fillna('S')
print(titanic['Embarked'].describe())

可以看到已经将缺失值填充上了,其实在.describe()的top中就可以看到众数的取值了,top:S

2. 文字到数值的映射

(1)性别:male-0, female-1

# 将Sex这一栏,男用0表示,女用1表示
titanic.loc[titanic['Sex']=='male','Sex']=0
titanic.loc[titanic['Sex']=='female','Sex']=1
print(titanic['Sex'].describe())

(2)港口:S-0, C-1, Q-2

titanic.loc[titanic['Embarked']=='S','Embarked']=0
titanic.loc[titanic['Embarked']=='C','Embarked']=1
titanic.loc[titanic['Embarked']=='Q','Embarked']=2
print(titanic['Embarked'].describe())

三、模型

1. 用线性回归预测

(1)线性回归:找到一条直线(超平面)来拟合数据点

(2)本案例中,找到拟合平面之后求解每个人的存活概率,若大于0.5 则存活,survived预测值=1,好残忍

from sklearn.linear_model import LinearRegression
from sklearn.cross_validation import KFold
# print(help(KFold))
predictors=['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked'] #用于预测的项,【有改进的空间】
alg=LinearRegression()
kf=KFold(titanic.shape[0],n_folds=3, random_state=1)
# print(help(np.concatenate))
predictions=[]
for train,test in kf:train_predictors=(titanic[predictors].iloc[train,:])train_target=titanic['Survived'].iloc[train]alg.fit(train_predictors,train_target)test_predictions=alg.predict(titanic[predictors].iloc[test,:])predictions.append(test_predictions)
predictions=np.concatenate(predictions,axis=0) #在行的方向拼接两个数组
# print(help(np.concatenate))
predictions[predictions>0.5]=1
predictions[predictions<=0.5]=0
accuracy=len(predictions[predictions==titanic['Survived']])/(len(predictions)) #预测的情况与实际情况一致的数目/所有样本数
print(accuracy) #结果:0.7833894500561167

2. 用逻辑回归预测

# 逻辑回归
from sklearn import cross_validation
from sklearn.linear_model import LogisticRegressionpredictors=['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked']
alg=LogisticRegression(random_state=1)
scores = cross_validation.cross_val_score(alg, titanic[predictors], titanic['Survived'], cv=3)
print(scores.mean()) #0.7901234567901234

3. 用随机森林改进模型

from sklearn import cross_validation
from sklearn.ensemble import RandomForestClassifierpredictors=['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked'] #用于预测的项,【有改进的空间】
#n_estimators 森林中树的数目
rf_alg=RandomForestClassifier(random_state=1, n_estimators=50, min_samples_split=4, min_samples_leaf=2)
kf=cross_validation.KFold(titanic.shape[0],n_folds=3, random_state=1)
scores=cross_validation.cross_val_score(rf_alg,titanic[predictors],titanic['Survived'],cv=kf)
print(scores) #[0.78114478 0.82491582 0.84175084]
print(scores.mean()) #0.8159371492704826

对比可以发现,平均分数有所提高,说明预测得准一些了

四、特征工程示例

1. 如何自己构造特征

目的是演示一下怎么构造特征,别当真。。。

(1)FamilySize = SibSp + ParCh

(2)NameLength = len (Name)

titanic['FamilySize']=titanic['SibSp']+titanic['Parch']
titanic['Namelength']=titanic['Name'].apply(lambda x:len(x)) #匿名函数,允许快速定义单行函数

(3)Titles = 一些特殊的称号。例如:miss / doctor / professor......

import re     #re 模块使 Python 语言拥有全部的正则表达式功能。
def get_title(name):title_search=re.search(' ([A-Za-z]+)\.',name) #re.search 扫描整个字符串并返回第一个成功的匹配。name是要进行检索的,前面是要匹配的if title_search:return title_search.group(1) #查看匹配的情况return ""titles=titanic['Name'].apply(get_title)
print(pd.value_counts(titles))

提取出的title有这么多种,而且都是文字信息,为了便于分析,要将其映射到数值,这次采用一种批量的方法:

title_mapping={'Mr':1,'Miss':2,'Mrs':3,'Master':4,'Dr':5,'Rev':6,'Major':7,'Mlle':7,'Col':7,'Jonkheer':8,'Capt':8,'Don':8,'Mme':8,'Sir':8,'Lady':8,'Ms':8,'Countess':8}
for k,v in title_mapping.items():titles[titles==k]=vprint(pd.value_counts(titles))
titanic['Titles']=titles

结果:

2. 随机森林特征重要性分析

from sklearn.feature_selection import SelectKBest, f_classif
import matplotlib.pyplot as pltpredictors2=['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked','FamilySize','Namelength'] #'Titles',放里面会有麻烦
selector=SelectKBest(f_classif,k=5)
selector.fit(titanic[predictors2],titanic['Survived'])scores=-np.log10(selector.pvalues_)plt.bar(range(len(predictors2)),scores)
plt.xticks(range(len(predictors2)),predictors2,rotation='vertical')
plt.show()

机器学习实战(五) kaggle练习赛 泰坦尼克获救预测相关推荐

  1. 集成算法-随机森林与案例实战-泰坦尼克获救预测

    集成算法-随机森林 Ensemble learning 目的:让机器学习效果更好,单个不行,群殴走起 Bagging:训练多个分类器取平均 f ( x ) = 1 / M ∑ m = 1 M f m ...

  2. Kaggle实战(一):泰坦尼克获救预测

    1.数据集简介 此数据集一共有891条数据,数据内容如下,每列表示的意义如下: 乘客ID 是否幸存 舱位等级 姓名 性别 年龄 一同上船的兄弟姐妹 父母和小孩数目 船号 船价 船仓号 登录地点 Pas ...

  3. Python项目实战-Tensorflow2.0实现泰坦尼克生存预测

    目录 一.数据集下载地址 二.探索性因子分析(EDA) 三.特征工程 四.构建Dataset与Model fit和自定义estimator使用 预定义estimator的使用 一.数据集下载地址 # ...

  4. kaggle房价预测特征意思_机器学习-kaggle泰坦尼克生存预测(一)-数据清洗与特征构建...

    1.背景: 1.1 关于kaggle: 谷歌旗下的 Kaggle 是一个数据建模和数据分析竞赛平台.该平台是当下最流行的数据科研赛事平台,其组织的赛事受到全球数据科学爱好者追捧. 如果学生能够在该平台 ...

  5. Kaggle实战:泰坦尼克幸存者预测 - 上

    (文章同步更新于个人博客@dai98.github.io) 源代码: Github Kaggle 泰坦尼克幸存者预测是Kaggle上数据竞赛的入门级别的比赛,我曾经在一年前作为作业参加过这个比赛,我想 ...

  6. Kaggle实战:泰坦尼克幸存者预测 -下

    (文章同步更新于个人博客@dai98.github.io) 源代码:Github 上一篇文章介绍了如何使用深度学习来预测泰坦尼克号幸存者,这一部分使用多分类器投票来做.由于数据预处理部分比较相似,重复 ...

  7. kaggle竞赛:泰坦尼克幸存者预测

    kaggle竞赛:泰坦尼克幸存者预测--(一) import pandas as pd import numpy as np import matplotlib.pyplot as plt impor ...

  8. kaggle 泰坦尼克 高分 预测

    kaggle 泰坦尼克 高分 预测 目录 kaggle 泰坦尼克 高分 预测 1.前言 2.包及数据导入 3.数据的初步认识 4.数据关系的可视化 5.数据清洗与缺失值处理 6.数据的统计分析 7.超 ...

  9. MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测

    Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...

最新文章

  1. python模块和包用法详解(__all__)
  2. Python 函数的可变参数、切片、迭代和列表生成式
  3. 关于python的单线程和多线程
  4. 外设驱动库开发笔记5:AD7705系列ADC驱动
  5. Google 搜索点击量不到 50%?
  6. Qt5 for linux离线安装工具下载地址
  7. 智能机械按摩椅的改进设计
  8. VS编程,WPF中,通过C# 创建颜色选择器,颜色拾取器,调色板的一种方法
  9. 数据结构(python语言描述)第一章
  10. Android 7.1 PackageInstaller(应用安装器)增加自动点击安装
  11. 【学习笔记】状态机编程
  12. 易基因 | 项目文章 | oxBS-seq揭示了宫颈癌发生过程中的表观遗传特征变化
  13. 计算机英语新词的认知语义阐释论文,英语新词的认知语义分析
  14. 服务器画图plots不显示,Rstudio的Plots不显示图形
  15. hbase shell命令行下backspace键无效解决办法
  16. carsin中创建相邻车道车辆插入场景设置
  17. List、Collections
  18. 南京大学机器学习与数据挖掘所ECCV16视频性格分析竞赛冠军技术分享
  19. 弥散阴影html,设计弥散阴影效果海报图片的PS实例教程
  20. Caused by: org.xml.sax.SAXParseException;必须为元素类型 mapping 声明属性 resourse。

热门文章

  1. 系统架构师—软件架构设计(二)CS/BS/SOA/DSSA/ABSD
  2. mac下统计代码行数方法
  3. 《前端跨界开发指南》重磅来袭!
  4. Kafka学习笔记: Kafka 百惑梳理
  5. 互联网寒冬,那些不怕失业的程序员们,都有什么技能?
  6. python时区运算,时区,时间戳,夏令时讲解
  7. 评定职称/积分落户,原来软考证书含金量这么大!
  8. 计算机第二课堂教学计划,第二课堂教学计划
  9. STM32之Bit-Banding
  10. php获取微博热搜,爬取微博热搜top50(示例代码)