keras多层感知机+titanic数据集

目录

  • 关于数据集
    • 数据集下载
    • 数据预览
    • 数据集预处理
      • 删除列数据
      • 查看各个特征值的缺失值情况
      • null值填充
      • 字符串数据转化为数值
      • dataframe数据转化为ndarray数据
      • 数据标准化
      • 总述
  • keras多层感知机模型构建
    • 线性模型构建
    • 模型编译及训练
    • 训练结果可视化
    • 测试数据集
    • 模型保存

关于数据集

数据集下载

传送门:kaggle官网
本博客参考:《tensorflow+keras深度学习人工智能实践应用 林大贵著》

数据预览

列数据说明
keras多层感知机+titanic数据集_第1张图片

列标签 描述 数据处理方向
PassengerId 乘客Id号 丢弃(与是否幸存无关)
Survived 是否幸存 label值
Pclass 仓位等级 特征值
Name 乘客姓名 丢弃(该特征与是否幸存无关)
Sex 乘客性别 特征值
Age 年龄 特征值
SibSp 同船的兄弟姐妹的数量 特征值
Parch 同船的父辈数量 特征值
Ticket 票号 丢弃(与幸存无关)
Fare 乘客体热指标 特征值
Cabin 乘客所在船舱号 丢弃(该特征值大量缺失)
Embarked 登船的港口号 特征值
- - -
(各计)12 - (合计)特征值:7
label值:1
丢弃:4

数据集预处理

删除列数据

在上面的表格中我们已经分析了我们需要的特征值,也提到了需要对齐的特征值,下面我们先将要丢弃的特征值删除
keras多层感知机+titanic数据集_第2张图片

查看各个特征值的缺失值情况

因为这个数据集中的一些列中存在null值,我们先查看一下都有哪些列包含null值

keras多层感知机+titanic数据集_第3张图片
我们看到数据集中只有Age(年龄)列和Embarked(登船港口号)列存在缺失值,对于前者我们将Null值填充为平均年龄,对于后者我们将Null值填充为“C”、“S”、“Q”中的任意一个(实际上这么做并不标准,但是考虑到该特征值对结果的影响程度以及缺失值数量,这么做对结果的影响并不大)

isnull():判断缺失值
sum ():返回用户所请求轴的值之和
df.isnull().sum():直接返回每列缺失值的数量
df.isnull().any():判断哪些列包含缺失值

null值填充

keras多层感知机+titanic数据集_第4张图片

字符串数据转化为数值

我们先来看看现在的数据是什么样的

keras多层感知机+titanic数据集_第5张图片

Sex列的性别和Embarked列的登船港口号需要转换
keras多层感知机+titanic数据集_第6张图片

  1. unique():相当于set()函数,用于数据去重,执行结束后labels=[‘C’,‘S’,‘Q’]
  2. Series.apply(function(x)):一一取出Series中的数据执行作为function函数的实参,并返回function函数执行后的结果,次此处将将Embarked列的"C"“S”"Q"等转化为labels列表的索引,实现字符串数据向数值数据的转换
  3. df.nunique():返回df某一列元素的种类

dataframe数据转化为ndarray数据

下面我们先来看看目前数据是什么样子的

keras多层感知机+titanic数据集_第7张图片

ok,现在是纯数值,我们要分别取出特征值和labels值将其转化为ndarray数组作为模型输入值
keras多层感知机+titanic数据集_第8张图片

数据标准化

我们来看看x_train数据
在这里插入图片描述

现在的问题是:各列的数据差别太大。
上面的图片中的我们看到有最小的数据是0,最大的数据是71,数据差值太大,如果不做处理不利于模型的拟合,而且训练出的模型表现也不好
如果我们能把数据转化使其在区间(0,1)之间,就能解决这个问题,还好sklearn.proprocessing模块为我们提供了相应的函数

过程如下
keras多层感知机+titanic数据集_第9张图片

总述

def deal_data(path,is_test_data=False):
	data=pd.read_csv(path)
	data.drop(['Ticket','Cabin','PassengerId'],axis=1,inplace=True)
	if not is_test_data:
		data.drop(['Name'],axis=1,inplace=True)
	data['Age'].fillna(data['Age'].mean(),inplace=True)
	data['Sex']=(data['Sex']=='male').astype('int')
	data['Embarked'].fillna('C',inplace=True)
	labels=data['Embarked'].unique().tolist()
	data['Embarked']=data['Embarked'].apply(lambda n:labels.index(n))
	return data

ok,到这,数据集的预处理基本完成,下面开始建立多层感知机模型

keras多层感知机模型构建

线性模型构建

keras多层感知机+titanic数据集_第10张图片

模型编译及训练

keras多层感知机+titanic数据集_第11张图片

训练结果可视化

keras多层感知机+titanic数据集_第12张图片
从上面的可视化图中我们发现,在epoch=10时,准确率就已经接近最大值了,这是因为我们的数据集中数据太少了,而且建立的多层感知机模型也比较简单

keras多层感知机+titanic数据集_第13张图片

测试数据集

y_test=pd.read_csv(path1)['Survived']
x_test=data_deal(path,)

模型保存

model.save('model_demo1.h5')

你可能感兴趣的:(#,机器学习框架的应用小例,keras,算法,人工智能)