泰坦尼克号python数据预处理_Keras结构化数据预处理范例——Titanic生存预测

本文将以Titanic生存预测问题为范例,介绍对结构化数据进行预处理并喂入Keras模型的方法。

Titanic数据集的目标是根据乘客信息预测他们在Titanic号撞击冰山沉没后能否生存。

没错,就是那个Jack and Rose的Titanic,就是那个You jump, I jump的Titanic,让我们出发吧!

一,准备数据

1,获取数据

公众号后台回复关键字:泰坦尼克,可获取Titanic数据集下载链接。import numpy as np

import pandas as pd

dftrain_raw = pd.read_csv('titanic_datasets/train.csv')

dftest_raw = pd.read_csv('titanic_datasets/test.csv')

dftrain_raw.head(10)

字段说明:Survived:0代表死亡,1代表存活【y标签】

Pclass:乘客所持票类,有三种值(1,2,3) 【转换成onehot编码】

Name:乘客姓名 【舍去】

Sex:乘客性别 【转换成bool特征】

Age:乘客年龄(有缺失) 【数值特征,添加“年龄是否缺失”作为辅助特征】

SibSp:乘客兄弟姐妹/配偶的个数(整数值) 【数值特征】

Parch:乘客父母/孩子的个数(整数值)【数值特征】

Ticket:票号(字符串)【舍去】

Fare:乘客所持票的价格(浮点数,0-500不等) 【数值特征】

Cabin:乘客所在船舱(有缺失) 【添加“所在船舱是否缺失”作为辅助特征】

Embarked:乘客登船港口:S、C、Q(有缺失)【转换成onehot编码,四维度 S,C,Q,nan】

2,数据探索

利用pandas的数据可视化功能我们简单地进行一下探索性数据分析EDA(

Exploratory Data Analysis)。

label分布情况%matplotlib inline

%config InlineBackend.figure_format = 'png'

ax = dftrain_raw['Survived'].value_counts().plot(kind = 'bar',

figsize = (,),fontsize=,rot = )

ax.set_ylabel('Counts',fontsize = )

ax.set_xlabel('Survived',fontsize = )

年龄分布情况%matplotlib inline

%config InlineBackend.figure_format = 'png'

ax = dftrain_raw['Age'].plot(kind = 'hist',bins = ,color= 'purple',

figsize = (,),fontsize=)

ax.set_ylabel('Frequency',fontsize = )

ax.set_xlabel('Age',fontsize = )

年龄和label的相关性%matplotlib inline

%config InlineBackend.figure_format = 'png'

ax = dftrain_raw.query('Survived == 0')['Age'].plot(kind = 'density',

figsize = (,),fontsize=)

dftrain_raw.query('Survived == 1')['Age'].plot(kind = 'density',

figsize = (,),fontsize=)

ax.legend(['Survived==0','Survived==1'],fontsize = )

ax.set_ylabel('Density',fontsize = )

ax.set_xlabel('Age',fontsize = )

3,数据预处理# 数据预处理

def preprocessing(dfdata):

dfresult= pd.DataFrame()

#Pclass

dfPclass = pd.get_dummies(dfdata['Pclass'])

dfPclass.columns = ['Pclass_' +str(x) for x in dfPclass.columns ]

dfresult = pd.concat([dfresult,dfPclass],axis = )

#Sex

dfSex = pd.get_dummies(dfdata['Sex'])

dfresult = pd.concat([dfresult,dfSex],axis = )

#Age

dfresult['Age'] = dfdata['Age'].fillna()

dfresult['Age_null'] = pd.isna(dfdata['Age']).astype('int32')

#SibSp,Parch,Fare

dfresult['SibSp'] = dfdata['SibSp']

dfresult['Parch'] = dfdata['Parch']

dfresult['Fare'] = dfdata['Fare']

#Carbin

dfresult['Cabin_null'] = pd.isna(dfdata['Cabin']).astype('int32')

#Embarked

dfEmbarked = pd.get_dummies(dfdata['Embarked'],dummy_na=True)

dfEmbarked.columns = ['Embarked_' + str(x) for x in dfEmbarked.columns]

dfresult = pd.concat([dfresult,dfEmbarked],axis = )

return(dfresult)

x_train = preprocessing(dftrain_raw)

y_train = dftrain_raw['Survived'].values

x_test = preprocessing(dftest_raw)

预处理完成后一共有15维特征。

二,构建模型from keras import models,layers

model = models.Sequential()

model.add(layers.Dense(,activation = 'relu',input_shape=(,)))

model.add(layers.Dense(,activation = 'relu' ))

model.add(layers.Dense(,activation = 'relu' ))

model.add(layers.Dense(,activation = 'relu' ))

model.add(layers.Dense(,activation = 'sigmoid' ))

# 二分类问题选择二元交叉熵损失函数

model.compile(optimizer='adam',

loss='binary_crossentropy',

metrics=['accuracy'])

model.summary()

三,训练模型history = model.fit(x_train,y_train,

batch_size= ,

epochs= ,

validation_split=0.2 #分割一部分训练数据用于验证

)

四,评估模型import matplotlib.pyplot as plt

%matplotlib inline

%config InlineBackend.figure_format = 'svg'

acc = history.history['acc']

val_acc = history.history['val_acc']

epochs = range(, len(acc) + )

plt.plot(epochs, acc, 'bo', label='Training accuracy')

plt.plot(epochs, val_acc, 'b', label='Validation accuracy')

plt.title('Training and validation accuracy')

plt.xlabel('Epochs')

plt.ylabel('Accuracy')

plt.legend()

plt.show()

五,使用模型

六,保存模型# 保存模型结构

json_str = model.to_json()

yaml_str = model.to_yaml()

#保存模型权重

model.save_weights('model_weights.h5')

# 恢复模型结构

model_json = models.model_from_json(json_str)

model_json.compile(optimizer='adam',

loss='binary_crossentropy',

metrics=['accuracy'])

# 加载权重

model_json.load_weights('model_weights.h5')

model_json.evaluate(x_train,y_train)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值