【keras】3. 泰坦尼克号数据集处理与预测

【参考:1-01 实战 泰坦尼克号沉船人员获救案例 数据清洗_哔哩哔哩_bilibili

【参考:Titanic - Machine Learning from Disaster | Kaggle

分析

在这里插入图片描述
在这里插入图片描述

实战

【参考:机器学习/Kaggle/泰坦尼克号/第一版 随机森林算法实现.ipynb · myaijarvis/AI - Gitee.com


参考:《Tensorflow和keras-深度学习人工智能实践应用》
第11、12章
GitHub:点我

部分封装函数请看文章:【keras】1. MNIST手写数据集识别(重要)_myaijarvis notebook-CSDN博客

文章:【keras】2. CIFAR-10图像识别_myaijarvis notebook-CSDN博客

数据预处理

分析数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(10)

filepath="titanic3.xls"

读取数据并查看

all_df=pd.read_excel(filepath)

在这里插入图片描述
在这里插入图片描述
以上字段中的 ticket(船票号码)、 cabin(舱位号码),我们认为与要预测的结果 survived
(是否生存)关联不大,所以我们将其忽略,只选择下列字段到 Dataframe中。

clos=['survived','name','pclass','sex','age','sibsp','parch','fare','embarked']
all_df=all_df[clos]

在这里插入图片描述
进一步处理
在这里插入图片描述

df=all_df.drop(['name'],axis=1) # 去掉name
df.isnull().sum() # 查看有哪些属性有null值

在这里插入图片描述

age_mean=df['age'].mean() 
df['age']=df['age'].fillna(age_mean) # 给age属性中的null填充平均值

fare_mean=df['fare'].mean() 
df['fare']=df['fare'].fillna(fare_mean) # 给fare属性中的null填充平均值

df['sex']=df['sex'].map({'female':0,'male':1}).astype(int) # 将sex属性值转换为0,1

x_OneHot_df=pd.get_dummies(data=df,columns=['embarked']) # 将embarked属性值C、Q、S做一位有效编码转换

在这里插入图片描述

在这里插入图片描述
标准化

from sklearn import preprocessing
minmax_scale = preprocessing.MinMaxScaler(feature_range=(0,1)) # 设置标准化范围(0,1)
scaledFeatures=minmax_scale.fit_transform(Features) # 对所有字段进行标准化

在这里插入图片描述
划分数据集
在这里插入图片描述

msk=np.random.rand(len(all_df))<0.8

train_df=all_df[msk] # 训练集
test_df=all_df[~msk] # 测试集 ~是取反符号

代码合集

有了以上的分析后可以封装一下过程

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(10)

def PreprocessData(raw_df):
    df=raw_df.drop(['name'],axis=1)
    
    age_mean=df['age'].mean()
    df['age']=df['age'].fillna(age_mean)
    
    fare_mead=df['fare'].mean()
    df['fare']=df['fare'].fillna(fare_mead)
    
    df['sex']=df['sex'].map({'female':0,'male':1}).astype(int)
    
    x_OneHot_df=pd.get_dummies(data=df,columns=['embarked'])
    
    ndarray=x_OneHot_df.values
    Label=ndarray[:,0]
    Features=ndarray[:,1:]
    
    minmax_scale = preprocessing.MinMaxScaler(feature_range=(0,1))
    scaledFeatures=minmax_scale.fit_transform(Features)
    return scaledFeatures,Label

filepath="titanic3.xls"    
all_df=pd.read_excel(filepath)
clos=['survived','name','pclass','sex','age','sibsp','parch','fare','embarked']
all_df=all_df[clos]
    
msk=np.random.rand(len(all_df))<0.8

train_df=all_df[msk] # 训练集
test_df=all_df[~msk] # 测试集 ~是取反符号

train_Features,train_Label=PreprocessData(train_df)
test_Features,test_Label=PreprocessData(test_df)

在这里插入图片描述

MLP

训练

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense,Dropout

model=Sequential()
model.add(Dense(units=40 # 神经元个数 也是输出维度
                ,input_dim=9 # 输入维度 数据预处理后只有9个特征
                ,kernel_initializer='uniform' # 随机初始化参数w和b
                ,activation='relu'))
model.add(Dense(units=30,kernel_initializer='uniform',activation='relu'))
model.add(Dense(units=1
                ,kernel_initializer='uniform'
                ,activation='sigmoid')) 
model.summary()

在这里插入图片描述

model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

train_history=model.fit(x=train_Features,y=train_Label,validation_split=0.1,epochs=30,batch_size=30,verbose=1)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
评估
在这里插入图片描述

加入数据

在这里插入图片描述

Jack=pd.Series([0,'Jack',3,'male',23,1,0,5.0000,'S'])
Rose=pd.Series([1,'Rose',1,'female',20,1,0,100.0000,'S'])

JR_df=pd.DataFrame([list(Jack),list(Rose)]
                   ,columns=['survived','name','pclass','sex','age','sibsp','parch','fare','embarked'])

all_df=pd.concat([all_df,JR_df]) # 合并

在这里插入图片描述

all_features,Label=PreprocessData(all_df) # 数据处理
all_probability=model.predict(all_features) # 预测

预测前10位的存活率
在这里插入图片描述

# 接下来,我们将 all_df(姓名与所有特征字段)与 all_probability(预测结果)整合产生pd Dataframe
pd=all_df # 复制一份
pd.insert(len(all_df.columns),'probability',all_probability)

两位主角的存活率
在这里插入图片描述

背后的故事

pd[(pd['survived']==0)&(pd['probability']>0.9)] # 生存概率大于0.9却没有存活

在这里插入图片描述
图12-4的数据中, Allison,Mis. Helen Loraine与 Allison,Mrs. Hudson J C都是 Allison家族的人,他们依照我们的模型生存概率高,可是却没有存活,到底发生了什么事呢?

真实沉船中 Allison家族的故事是, Allisonー家人共有4位成员,即爸爸(30岁)、妈妈(25岁)、一个两岁的女儿 Loraine以及一个不满一岁的婴儿 Trevor。他们全家加上一名护士( Alice Cleaver)乘坐邮轮返回加拿大蒙特利尔。
因为搭乘救生艇女士优先,原本妈妈可以带着女儿与小婴儿上救生艇,但是因为找不到婴儿 Trevor,所以坚持不愿意上救生艇,而在船上到处寻找婴儿,最后全家一起在船上沉没。
然而命运捉弄人的是,原来小婴儿 Trevor早就被护士( Alice Cleaver)带上救生艇,但是没有告知 Allison家人,导致全家人都找不到婴儿。最后 Allison全家只有不满一岁的小婴儿 Trevor存活,但是失去了所有亲人。还好后来小婴儿 Trevor回到加拿大,由他的叔叔婶婶抚养长大。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值