首页 > 其他分享 >[Deep Learning] 使用keras创建多层感知机神经网络模型并添加dropout正则化策略优化银行客户流失率预测

[Deep Learning] 使用keras创建多层感知机神经网络模型并添加dropout正则化策略优化银行客户流失率预测

时间:2025-01-21 17:55:27浏览次数:1  
标签:keras frame 感知机 流失率 test model data bank

内容实现概述

本文主要讲述使用keras库内置的Sequential(序列)模型,实现银行客户流失率预测,它属于一个二分类问题(因为针对单个客户来说,他要么已流失要么未流失)。 具体实现过程如下:

  1. 导入所需库:预先导入nump、pandas、sklearn以及keras库
  2. 导入数据:使用pandas库的文件解析方法read_csv(),读取银行客户文件数据
  3. 数据预处理:对银行客户数据进行预处理,使用pandas库先处理掉与预测结果无关的数据列(如name属性)以及将有二元、多元类别的特征数据进行归一化,并获取特征数据与目标数据
  4. 数据分割与特征缩放:使用sklearn库的数据分割方法对步骤3中的数据进行比例分割,得到训练集和测试集数据,并分别对其进行特征缩放
  5. 构建模型:调用keras库的Sequential模型类,构建模型
  6. 添加网络层,使用常见的Relu类型激活函数以及最后一层激活函数为Sigmoid(由于预测结果是二分类),给其中每层的隐藏层添加Dropout层
  7. 编译模型:调用keras库的compile()方法对模型进行编译,设置常损失函数模板(二进制交叉熵误差)和评估模板(准确率)
  8. 训练模型:调用keras库的fit()方法对训练集数据进行拟合,设置好迭代轮次和批次参数值
  9. 预测模型:调用keras库的predict()方法对测试集数据进行预测
  10. 评估模型:调用sklearn库的classification_report方法,打印评估表格

注:

  • 在Python中使用(导入)numpy库时,需要先安装,本实现使用的是pip命令安装 pip install numpy
  • 在Python中使用(导入)pandas库时,需要先安装,本实现使用的是pip命令安装 pip install pandas
  • 在Python中使用(导入)scikit-learn库时,需要先安装,本实现使用的是pip命令安装 pip install -U scikit-learn
  • 在Python中使用(导入)keras库时,需要先安装,本实现使用的是pip命令安装 pip install --upgrade keras
  • Keras官方教程

代码实现

注:源代码地址


# 主题:使用多层感知机模型并添加Dropout层来优化模型

import os
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
from keras.src.models import Sequential # 导入Keras库序贯模型
from keras.src.layers import Dense # 导入Keras库全(密集)连接层
from keras.src.layers import Dropout # 导入Keras库Dropout层

# 1. 加载数据集
bank_data_frame = pd.read_csv('shallow-neural-networks\\BankCustomers.csv')


# 2. 数据预处理
## a. 忽略与预测结果不相关的特征
# axis的值默认为0,指删除行,删除列数据时要指定axis=1
bank_data_frame = bank_data_frame.drop('Surname', axis=1)

## b. 二元类别特征,转换成值为0或1的格式
bank_data_frame['Gender'].replace('Male', 0, inplace=True)
bank_data_frame['Gender'].replace('Female', 1, inplace=True)

## c. 多元类别特征,转换成多个二元哑变量
# 将Geography列的值,按行和列分别展开,映射成一个二维数组
geography = pd.get_dummies(bank_data_frame['Geography'], prefix='Geography')
# 将geography与原先的bank_data_frame一起组成DataFrame类型的数组
bank_data_frame = [bank_data_frame, geography]
# 将两个数组合并成一个
bank_data_frame = pd.concat(bank_data_frame, axis=1)

# d. 拆分数据集
y = bank_data_frame['Exited']
X = bank_data_frame.drop(['Exited', 'Geography'], axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# e. 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)


# 3. 模型处理
# 第一步:导入神经网络模型
model = Sequential()

# 第二步:添加网络层
model.add(Dense(12, input_dim=14, activation='relu'))
model.add(Dense(24, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(48, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(96, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(192, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation="sigmoid"))
model.summary()

## 第三步:编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

## 第四步:训练模型
history = model.fit(X_train, y_train, epochs=30, batch_size=64, validation_data=(X_test, y_test))

# 第五步:预测模型
y_pred = model.predict(X_test, batch_size=10)

# 第六步:评估模型
y_pred = np.round(y_pred)

def shwo_report(y_test, y_pred):
    if(y_test.shape != (2000, 1)):
        y_test = y_test.values
        y_test = y_test.reshape(len(y_test), 1)
    print(classification_report(y_test, y_pred, labels=[0, 1]))

shwo_report(y_test, y_pred)

运行结果


image

image

标签:keras,frame,感知机,流失率,test,model,data,bank
From: https://www.cnblogs.com/xl1164191281/p/18683945

相关文章

  • 【人工智能】从Keras到TensorFlow 2.0:深入掌握Python深度学习技术
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界随着人工智能技术的迅猛发展,深度学习作为其核心分支,已在图像识别、自然语言处理、语音识别等多个领域展现出卓越的性能。Python作为深度学习的......
  • 《Keras3通过使用 EfficientNet 进行微调进行图像分类》
    Keras3通过使用EfficientNet进行微调进行图像分类作者: YixingFu创建日期: 2020/06/30最后修改时间: 2023/07/10描述: 使用在imagenet上预先训练的权重的EfficientNet进行StanfordDogs分类。(i)此示例使用Keras3 在Colab中查看 • GitHub源简介:什么是......
  • 只使用tensorflow而不使用keras实现一个简单的神经网络
    1、实现一个简单的Dense类,就是实现图中层的定义这是一个类,这个层主要实现数据变换的操作,即输入一个tensor,先与权重矩阵W相乘,然后加上b,最后经过激活函数activation运算,输出一个新的张量。为了实现这个操作,我们将这个任务划分成几个子任务:(1)定义需要输入的属性,用于支持数据变换......
  • 感知机参数更新策略
    1.逐个数据训练(在线学习)定义:每次使用一个训练样本来更新感知机的权重。训练过程:对每个训练样本,计算预测结果。如果预测结果与真实标签不一致,更新权重和偏置。重复这个过程直到所有训练样本都被处理完,通常会进行多轮迭代。优点:速度较快:每个样本都会被即时处理和更新,因此......
  • 创建用于预测序列的人工智能模型,用Keras Tuner探索模型的超参数。
    上一篇:《创建用于预测序列的人工智能模型(五),调整模型的超参数》序言:在完成初步的模型研发后,接下来的重点是探索和优化超参数。通过合理调整超参数(如学习率、动量参数、神经元数量等),可以进一步提高模型的性能和准确性。这一过程需要结合工具(如KerasTuner)进行自动化测试和优化,从......
  • 高级神经网络API——Keras 简介和一般工作流程
    概述Keras是一个高级神经网络API,它用Python语言编写,能够在TensorFlow、Theano或者CNTK等深度学习框架之上运行。它的设计理念是简单、快速地构建和实验深度学习模型。Keras提供了易于使用的接口,使得用户可以专注于模型架构的设计和训练,而不必深入了解底层复杂的计算......
  • Keras 猫狗分类
     In [1]:#由于Keras已经与TensorFlow合并,tensorflow下面导入kerasimporttensorflowastffromtensorflow.keras.modelsimportSequentialfromtensorflow.kerasimportlayersimportnumpyasnpimportshutilimportos  2024-12-1501:2......
  • 【深度学习框架学习|Keras Layers API详解1】Keras最简单的深度学习框架!你对基于Keras
    【深度学习框架学习|KerasLayersAPI详解1】Keras最简单的深度学习框架!你对基于KerasLayersAPI了解多少?来看看吧【深度学习框架学习|KerasLayersAPI详解1】Keras最简单的深度学习框架!你对基于KerasLayersAPI了解多少?来看看吧文章目录【深度学习框架学习|Keras......
  • 什么是多层感知机(MLP)?
    一、引言在机器学习和深度学习的广阔领域中,多层感知机(MultilayerPerceptron,MLP)作为一种基础且重要的神经网络模型,具有广泛的应用和深远的影响力。它能够处理各种复杂的任务,从图像识别、自然语言处理到数据预测等多个方面都展现出了强大的能力。本文将深入探讨多层感知机的基......
  • 【AI学习笔记3】神经元、神经网路与感知机 Neuron、Neural Network and Perceptron
    一、从生物神经元到人工神经网络    每个神经元细胞都向外伸出许多分支,其中用来接收输入的分支称作树突(dendrites),用来输出信号的分支称作轴突(axon),轴突连接到树突上形成一个突触(synapse)。每个神经元可以通过这种方式连接多个其他神经元,每个神经元也可以接受多个其他......