内容实现概述
本文主要讲述使用keras库内置的Sequential(序列)模型,实现银行客户流失率预测,它属于一个二分类问题(因为针对单个客户来说,他要么已流失要么未流失)。 具体实现过程如下:
- 导入所需库:预先导入nump、pandas、sklearn以及keras库
- 导入数据:使用pandas库的文件解析方法read_csv(),读取银行客户文件数据
- 数据预处理:对银行客户数据进行预处理,使用pandas库先处理掉与预测结果无关的数据列(如name属性)以及将有二元、多元类别的特征数据进行归一化,并获取特征数据与目标数据
- 数据分割与特征缩放:使用sklearn库的数据分割方法对步骤3中的数据进行比例分割,得到训练集和测试集数据,并分别对其进行特征缩放
- 构建模型:调用keras库的Sequential模型类,构建模型
- 添加网络层,使用常见的Relu类型激活函数以及最后一层激活函数为Sigmoid(由于预测结果是二分类)
- 编译模型:调用keras库的compile()方法对模型进行编译,设置常损失函数模板(二进制交叉熵误差)和评估模板(准确率)
- 训练模型:调用keras库的fit()方法对训练集数据进行拟合,设置好迭代轮次和批次参数值
- 预测模型:调用keras库的predict()方法对测试集数据进行预测
- 评估模型:调用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官方教程
代码实现
注:源代码地址
# 主题:使用多隐层神经网络模型预测银行客户流失率(二分类问题)
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库的全(密集)连接层
# 1. 加载数据集
bank_data_frame = pd.read_csv('ShallowNeuralNetworks\\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(14, input_dim=14, activation='relu'))
model.add(Dense(28, activation='relu'))
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)
运行结果
标签:keras,frame,Deep,流失率,test,data,模型,bank From: https://www.cnblogs.com/xl1164191281/p/18683806