引言

训练玩手写数据集之后,开始联系泰坦尼克号的数据集的训练,mnist应为是关于图像识别,虽然只有一通道,但是也是需要用到cnn的,而titanic因为是对存活的预测,所以是一个二分类问题一个简单的逻辑回归问题,重要的步骤是在数据的处理上面,这里参考寒小阳的一个博客,然后在此基础之上进行进一步的数据的处理。

特征工程

导入包,读取文件

import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import matplotlib.pyplot as pltdata_train = pd.read_csv('./titanic/train.csv')


之后我们将数据进行筛选,首先,passengerid,肯定是不会作为最后的ferture的,Survived是预测结果y,

Pclass与存活的柱状图:
Survived_0 = data_train.Pclass[data_train.Survived == 0].value_counts()
Survived_1 = data_train.Pclass[data_train.Survived == 1].value_counts()
df = pd.DataFrame({u'live': Survived_1, u'unlive': Survived_0})
df.plot(kind='bar', stacked=True)
plt.show()


很明显了,再第一仓的存活率明线大于第二仓或者第三仓,这个Pclass就需要被选成feature之一,那么问题来了,我们对Pclass的处理是直接使用三类呢(1,2,3),还是分成两类==》因为第一仓的的获救率明显大于第二仓和第三仓,所以我们是不是也可以将第一仓设为第一类,其他设为第二类,,,,我们先按照三类来计算,

Age属性:

我们仔细观察了一下,发现好多Age属性是空的,而很显然age属性对最后的生存结果应该是有很大影响的,所以我们需要补全这个age,,,这个时候就用到了Name属性了(?????能从name看出age?????),那这个时候仔细观察了一下,发现name里面是有些标注一个人的大概特征的 ,比如miss,mr,mrs,然后我们就对这三种人群进行了年龄分布的箱图,这个地方===>name中带有Mr说明是男性,Mr就是所有男性的一个数据(30左右),带MIss说明是未婚女性(20左右),Mrs的说明是已婚女性(35左右), 恩,这个结论很好,符合我们一般的逻辑思维,,,这个时候就更加自信了,

data_train_Mr = data_train.Age[data_train.Name.str.contains('Mr')][data_train.Age.notnull()].as_matrix()
data_train_Miss = data_train.Age[data_train.Name.str.contains('Miss')][data_train.Age.notnull()].as_matrix()
data_train_Mrs = data_train.Age[data_train.Name.str.contains('Mrs')][data_train.Age.notnull()].as_matrix()
plt.subplot(131)
plt.boxplot(data_train_Mr)
plt.xlabel('Mr')
plt.ylabel('Age')
plt.subplot(132)
plt.boxplot(data_train_Miss)
plt.xlabel('Miss')
plt.ylabel('Age')
plt.subplot(133)
plt.boxplot(data_train_Mrs)
plt.xlabel('Mrs')
plt.ylabel('Age')
plt.show()


再图中我们还可以观察到,已婚女性没有离散数据(可能是应为数据量太少了),而男性的异常点就很多,
这个时候我们并不会直接用三种人群的中位数去填充确实的数据,而是使用了随机森林对已有数据进行训练,然后对确实数据进行预测,也就是用已有数据 预测age,这个地方age就变成了一个输出了(真的烦,训练中的训练),,,那么问题来了,既然是要训练数据,我们就要挑选feature,很显然,name是主要feature,还有呢,,我们会想到SibSp(兄弟的个数),Parch(父母以及子女个数),这两个属性对age应该也有影响,毕竟如果Parch有好几个的话,说明有好几个小孩了,说明年龄应该很大了,我们把这两个数据纳入训练age的feature,
接下来我们看了一下,pclass对年龄的影响,哎呀,发现再第一仓的年龄的人分布再26-50之间,第二仓的人分布再23-37之间,第三仓分布再18-30之间,可见,越高等的仓的人的年龄就越偏大,,恩,可能越老越有钱吧,只能这么解释了,。。那么结论就来了,Pcalss也是作为训练年龄的一个feature,

data_train_Mr = data_train.Age[data_train.Pclass == 1][data_train.Age.notnull()].as_matrix()
data_train_Miss = data_train.Age[data_train.Pclass == 2][data_train.Age.notnull()].as_matrix()
data_train_Mrs = data_train.Age[data_train.Pclass == 3][data_train.Age.notnull()].as_matrix()
plt.subplot(131)
plt.boxplot(data_train_Mr)
plt.xlabel('1')
plt.ylabel('Age')
plt.subplot(132)
plt.boxplot(data_train_Miss)
plt.xlabel('2')
plt.ylabel('Age')
plt.subplot(133)
plt.boxplot(data_train_Mrs)
plt.xlabel('3')
plt.ylabel('Age')
plt.show()


所以我们就用这三个特征来训练年龄(这边使用寒小阳大神的随机森林),最后得到

from sklearn.ensemble import RandomForestRegressorages_df = data_train[['Name', 'Age', 'SibSp', 'Pclass', 'Parch']]
age_Miss = ages_df[ages_df.Name.str.contains('Miss')]
train_age_Miss = age_Miss[['Age', 'SibSp', 'Pclass', 'Parch']]
train = train_age_Miss[train_age_Miss.Age.notnull()].as_matrix()
test = train_age_Miss[train_age_Miss.Age.isnull()].as_matrix()
X = train[:, 1:]
y = train[:, 0]rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
rfr.fit(X, y)
result = rfr.predict(test[:, 1:])
train_age_Miss.loc[(train_age_Miss.Age.isnull()), 'Age'] = result
ages_df = data_train[['Name', 'Age', 'SibSp', 'Pclass', 'Parch']]
age_Mr = ages_df[ages_df.Name.str.contains('Mr')]
#train_age_Mr = age_Mr[['Age', 'SibSp', 'Pclass', 'Parch']]
train_age_Mr = age_Mr.iloc[:, 1:]
train = train_age_Mr[train_age_Mr.Age.notnull()].as_matrix()
test = train_age_Mr[train_age_Mr.Age.isnull()].as_matrix()
X = train[:, 1:]
y = train[:, 0]rfr.fit(X, y)
result = rfr.predict(test[:, 1:])
train_age_Mr.loc[(train_age_Mr.Age.isnull()), 'Age'] = result


最后得到的年龄是这个样自的,我们发现,其中有几个是小数的,那这就是训练出来的一些个age,这个时候我们看看还有没有空的age

df_ = df[['Name', 'Age']]
df_[df_.Age.isnull()]`

我们发现还有五条数据age是空的,这边数据我就不放了,发现这几个数据都带有,Master,Dr,可以,这其实是研究生博士的意思,我就给这几个数据的age设置成了32,恩,一个研究生博士年龄三十岁左右差不多嘛。。

SibSp,Parch,Ticket,Fare,Embarked

回归正题,我们找到了age之后,然后对之后的特征进行筛选,sibsp parch这两个,我觉得对获救并没有什么影响,(没道理人家救你的时候还问你有几个孩子吗), ticket上面的信息我们暂时先不提取,可能ticket是很有用的,但是我看不懂这个船票,暂时先放在这里,Embarked这个属性再寒小阳博客里面说明了,这个数据很诡异,先暂时不考虑,

处理数据

所以快了,特征工程这一步我们已经完成了,我们筛选出了Pclass,Sex,Age,Cabin这四个属性,然后我们需要对这四个属性的值进行处理,

dum_Pclass = pd.get_dummies(test_['Pclass'], prefix='Pclass')
dum_Sex = pd.get_dummies(test_['Sex'], prefix='Sex')
test_.loc[(test_.Cabin.notnull()), 'Cabin'] = 'Yes'
test_.loc[(test_.Cabin.isnull()), 'Cabin'] = 'No'
dum_Cabin = pd.get_dummies(test_['Cabin'], prefix='Cabin')
test_data_final = pd.concat([test_, dum_Pclass, dum_Sex, dum_Cabin], axis=1)
test_data_final['Age_scaled'] = scaler.fit_transform(test_data_final['Age'], age_scale_param)

训练数据

这边是对测试集的处理,对训练集的处理也类似与这个,然后吧前面几个属性去掉,就拿到了最终的特征数据,最后参考寒小阳博客里面模型融合,

from sklearn.ensemble import BaggingRegressortrain_df = df_train.filter(regex='Survived|Age_.*|Cabin_.*|Sex_.*|Pclass_.*')
train_np = train_df.as_matrix()# y即Survival结果
y = train_np[:, 0]# X即特征属性值
X = train_np[:, 1:]
# fit到BaggingRegressor之中
clf = linear_model.LogisticRegression(C=1.0, penalty='l1', tol=1e-6)
bagging_clf = BaggingRegressor(clf, n_estimators=20, max_samples=0.8, max_features=1.0, bootstrap=True, bootstrap_features=False, n_jobs=-1)
bagging_clf.fit(X, y)predictions = bagging_clf.predict(data_test_x)
result = pd.DataFrame({'PassengerId': test_id['PassengerId'].as_matrix(), 'Survived': predictions.astype(np.int32)})
result.to_csv("./bagging.csv", index=False)


最后结果不是很理想,但是比之前提高了一些,还是可以的,主要是做了bagging所以才提高的,可能我这个特征选取的有问题,,,,

最后

这是第二次发博,事隔半个月,我发现发一次博客还是需要专研很多东西的,特别是自己要写出来放到网上,就要做到没有错误,所以还是加油吧,欢迎大家多指出我文中的一下问题,指导指导。(ง •̀_•́)ง

关于titanic数据集(一)相关推荐

  1. ML之LightGBM:基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度得分)

    ML之LightGBM:基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度得分) 目录 基于titanic数据集利用LightGBM和shap算法实 ...

  2. titanic数据集_TF2.0结构化数据建模流程范例

    尽管TensorFlow设计上足够灵活,可以用于进行各种复杂的数值计算.但通常人们使用TensorFlow来实现机器学习模型,尤其常用于实现神经网络模型. 从原理上说可以使用张量构建计算图来定义神经网 ...

  3. 大学计算机基础python第二次作业_python第二次作业-titanic数据集练习

    一.读入titanic.xlsx文件,按照教材示例步骤,完成数据清洗. titanic数据集包含11个特征,分别是: Survived:0代表死亡,1代表存活 Pclass:乘客所持票类,有三种值(1 ...

  4. 结构化数据建模——titanic数据集的模型建立和训练(Pytorch版)

    本文参考<20天吃透Pytorch>来实现titanic数据集的模型建立和训练 在书中理论的同时加入自己的理解. 一,准备数据 数据加载 titanic数据集的目标是根据乘客信息预测他们在 ...

  5. 基于titanic数据集介绍数据分析处理流程

    对大树先生titanic数据集处理的总结: 本文对大数先生所做的titanic数据集进行进一步整理: 精确到解说每一步需要做什么掌握什么. 原代码链接 原文中数据处理主要分为8大类: 1.数据总览(教 ...

  6. 基于Titanic数据集的数据分析处理及乘客生还率预测全流程教程

    基于Titanic数据集的数据分析处理及乘客生还率预测全流程教程 0.项目介绍 1.使用数据集 2.数据的基本统计分析 3.数据的属性探查 4.数据预处理 5.数据的相关性分析 6.特征工程 7.数据 ...

  7. MatplotlibSeaborn绘图整理(基于Titanic数据集)【未完待续】

    目录 一.Titanic数据集下载 二.Titanic数据集预处理 1数据读取及查看 2数据预处理 三.基于Titanic数据集的Matplotlib&Seaborn绘图 1分布图绘制 1.1 ...

  8. Chapter 3 Classification (Titanic数据集)

    3.处理Titanic数据集 其目的是根据乘客的年龄.性别.乘客阶层.乘坐地点等属性来预测乘客是否幸存. 首先,登录Kaggle,去Titanic challenge网站下载train.csv和tes ...

  9. 基于Titanic数据集的二元分类

    1 研究任务一介绍 1.1 研究任务 实验首先对Titanic数据集进行数据分析和清理,然后分别采用Logistic Regression(逻辑回归).Support Vector Machines( ...

  10. python决策树预测模型_Python决策树模型做 Titanic数据集预测并可视化(一)

    kaggle上的Titanic数据集据说是学习机器学习必然要做的一道练习题,所以注册了kaggle的账号,然后下载了Titanic的训练数据和测试数据.在注册时注意需要科技爬梯出去才能通过邮箱验证,不 ...

最新文章

  1. Linux下编译cscope,linux环境下cscope使用
  2. Ransomware Locky Analysis
  3. html5多大场景,HTML5新标签解释及其使用场景
  4. mysql rpm安装报错_Mysql rpm包安装
  5. esp8266 扫描wifi_基于ESP8266与QT的智能家居控制系统设计
  6. String ,StringBuilder,StringBuffer的区分
  7. 泛函分析 04.02 有界线性算子 - 有界线性算子空间的收敛与完备性
  8. 为什么模板不支持分离编译
  9. NSIS教程(4): 调用Windows API
  10. 日语学习网站分类汇总
  11. 多渔:苦干执行,胜者为王!
  12. ios 视频处理详解一(视频导出)
  13. 百度网盘直链下载助手(MacOSChrome)
  14. Java Agent入门教程
  15. html语言玫瑰花代码,javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
  16. matlab简易实现图像压缩
  17. DevOps基础-1.2-DevOps的CAMS价值体系
  18. 【认证】【DVB】T2 PLP
  19. 8位颜色Hex码 定义颜色透明度
  20. C#悬浮窗口 图像背景

热门文章

  1. ICG-PEG-OH 结构式,吲哚菁绿-聚乙二醇-羟基的相关说明
  2. Windows小技巧 -- 命令行窗口打开指定目录的资源管理器
  3. 企业上云是工业互联网的前提,中国企业上云潜力巨大
  4. linux点唱机安装教程,咪哒Minik移动ktv点唱机安装教程(文字版)
  5. cmd批量文件重命名
  6. centos7的LAMP多机LAP+MYSQL
  7. VS软件评估期已过不能使用的解决方法
  8. html为图片设置边框
  9. 「精研科技」× 企企通,全球MIM龙头借助采购供应商数字化向多领域突破
  10. 人机交互 交互形式和交互设备