RBF神经网络案例——客户流失率预测

news2025/2/24 14:34:24

目录

背景介绍

1、径向基神经网络结构

 2、符号说明

3、计算网络输出

 4、计算能量函数

网络学习步骤

步骤1、先将能量函数E写成各参数的复合函数结构

步骤2、求E关于各参数的偏导

步骤3、求各参数的调整量

步骤4、计算各参数的调整量 

5、按照步骤1-步骤4编写RBF神经网络学习程序

6、网络拟合效果与各个参数的关系

6.1 拟合效果与学习次数的关系

 6.2 拟合效果与隐含层神经元个数的关系

 6.3 学习效率对训练效果的影响

7、添加动量因子的RBF神经网络学习 


背景介绍

某消费品女性顾客流失率

周数

流失率

周数

流失率

1

0.531731985

31

0.906074968

2

0.599828865

32

0.910126947

3

0.644564773

33

0.91328894

4

0.671027441

34

0.917005814

5

0.697281167

35

0.920081668

6

0.717013297

36

0.924666569

7

0.732752613

37

0.928067079

8

0.745040151

38

0.932732111

9

0.75565936

39

0.936609264

10

0.763524144

40

0.940518784

11

0.779177473

41

0.94417839

12

0.792189854

42

0.946870779

13

0.806571209

43

0.958960328

14

0.813644571

44

0.961151737

15

0.822233807

45

0.963206107

16

0.826976013

46

0.964973998

17

0.837737352

47

0.967341306

18

0.842773177

48

0.96778647

19

0.854878049

49

0.968232044

20

0.859771055

50

0.970466082

21

0.863536819

51

0.974362934

22

0.865907219

52

0.98011496

23

0.869966906

53

0.98424337

24

0.872734818

54

0.987633062

25

0.875641915

55

0.991046183

26

0.878079332

56

0.995581505

27

0.881514601

57

0.997785861

28

0.886842845

58

1

29

0.891857506

59

1

30

0.898078292

60

1

女性消费商品,品牌的黏性非常重要,但同时商品又是有生命周期的,所以客户群体也会有生命周期,老客户会逐渐流失,新客户不断加入进来,如此便形成了良性客户族新陈代谢。我们需要对客户流失概率进行研究,以便做出一些客户关怀和维系的动作,以减少客户流失,从而使得客户价值最大化。

上表的意义:某女装品牌,假设第一次购买的客户为新客户,则第一周有11865人,只买了第一次而后再未购买的客户为6309人。新增客户表示第一周购买之后在后面数周又购买第二次的人数,不重复计算。

各周损失率计算方法如下:
从未购买的人数/11865=0.531731
从未购买的人数/(11865-1347)=0.599838

请用神经网络分析客户任意时间长度没有回头购买的流失率。

1、径向基神经网络结构

径向基神经网络由输入层、隐含层和输出层构成三层前向网络,隐含层采用径向基函数为激励函数(一般是高斯函数)。

 2、符号说明

  • 样本输入,容量为n;
  • 样本输出;
  • r   隐含层的神经元个数;
  • 第i个神经元的中心和宽度;i=1,2,…,r;
  • wi   第i个神经元的权值,i=1,2,…,r;

3、计算网络输出

 设神经网络输入和输出都是线性的,则整个隐含层的输入就是样本输入,隐含层的输出也是样本输出,因此(对第j个样本的)为j=1,2,…,n;

 4、计算能量函数

用最小二乘法,拟合参数ci,σi,wi的最佳值。

网络学习步骤

步骤1、先将能量函数E写成各参数的复合函数结构

步骤2、求E关于各参数的偏导

i=1,2,…,r 

步骤3、求各参数的调整量

为了计算方便,先规范样本输入和输出都是行向量(n),权值、中心和宽度向量w,c,σ都是列向量(r),则e=(yj-Oj)为n维行向量,dji=(xj-ci)为n×r矩阵,(pji)=p(xj,ci,σi)也是n×r矩阵。则各参数调整量(按负梯度方向进行)为

步骤4、计算各参数的调整量 

 i=1,2,…,r

其中lrw,lrc,lrσ表示相应参数的学习进度(速度)。

5、按照步骤1-步骤4编写RBF神经网络学习程序

function [o,eb,s1]=BRF(X,Y,lrw,lrc,lrs,sig,r,n)
x=mapminmax(X);
[y,s1]=mapminmax(Y);
m=length(y);
w=rand(r,1)+0.1;
c=rand(r,1);
s=rand(r,1)+0.2;
eb=[];
for k=1:n
    d1=dist(c,x);
    d2=d1.^2;
    ss=[];
    for i=1:r
        sr=ones(1,m)*s(i)^2;
        ss=[ss;sr];
    end
    p=exp(-d2./ss);
    o=[];
    for j=1:m
       for i=1:r
           wp(i)=w(i)*p(i,j);
       end
       o=[o,sum(wp)];
    end
    e=y-o;
    err=sum(e.^2)^0.5;
    if err<sig
       Xt=datetime;
       disp(Xt);
       break;
    end
    eb=[eb,err];
    dw=[];dc=[];ds=[];
    for i=1:r
        dw=[dw;sum(e.*p(i,:))];
        dc=[dc;w(i)/s(i)^2*sum(e.*p(i,:).*d1(i,:))];
        ds=[ds;w(i)/s(i)^3*sum(e.*p(i,:).*d2(i,:))]; 
    end
    w=w+lrw*dw;
    c=c+lrc*dc;
    s=s+lrs*ds;
end
t=1:m;
plot(t,y,'*',t,o,'+-');legend('ʵ¼ÊÖµ','Ô¤²âÖµ');

6、网络拟合效果与各个参数的关系

6.1 拟合效果与学习次数的关系

 取定权学习效率为lrw=0.035,中心权值学习lrc =0.01,宽度学习效率为lrs=0.01,神经元个数r=8,残差容量sig=0.001,分别对练习次数n=50,200,500,800,1500残差效果进行对比,结果如图,程序见下

clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;
t=1:length(X);
r=8;sig=0.001;lrw=0.035;lrc=0.01;lrs=0.01;
n=50;
[o,eb1,s1]=BRF(X,Y,lrw,lrc,lrs,sig,r,n);
subplot(5,1,1);
bar(eb1);
n=200;
[o,eb2,s1]=BRF(X,Y,lrw,lrc,lrs,sig,r,n);
subplot(5,1,2);
bar(eb2);
n=500;
[o,eb3,s1]=BRF(X,Y,lrw,lrc,lrs,sig,r,n);
subplot(5,1,3);
bar(eb3);
n=800;
[o,eb4,s1]=BRF(X,Y,lrw,lrc,lrs,sig,r,n);
subplot(5,1,4);
bar(eb4);
n=1500;
[o,eb5,s1]=BRF(X,Y,lrw,lrc,lrs,sig,r,n);
subplot(5,1,5);
bar(eb5);
clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;
t=1:length(X);arf=0.002;n=1500;
r=10;sig=0.003;lrw=0.0035;lrc=0.0035;lrs=0.0035;

 6.2 拟合效果与隐含层神经元个数的关系

取定权学习效率为lrw=0.035,中心学习lrc=0.01,宽度学习效率为lrs=0.01,残差容量sig=0.001,学习次数定为n=800,分别隐含层神经元数r=4,8,12,16效果进行对比,结果如图,程序见下

clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;n=600;
t=1:length(X);
sig=0.001;lrw=0.035;lrc=0.01;lrs=0.01;
[o,eb1,s1]=BRF(X,Y,lrw,lrc,lrs,sig,4,n);
[o2,eb2,s2]=BRF(X,Y,lrw,lrc,lrs,sig,8,n);
[o3,eb3,s3]=BRF(X,Y,lrw,lrc,lrs,sig,12,n);
[o4,eb4,s4]=BRF(X,Y,lrw,lrc,lrs,sig,14,n);
ebmax=max(eb1);
eb2=eb2(eb2<=ebmax);
eb3=eb3(eb3<=ebmax);
eb4=eb4(eb4<=ebmax);
subplot(2,2,1),bar(eb1);
subplot(2,2,2),bar(eb2);
subplot(2,2,3),bar(eb3);
subplot(2,2,4),bar(eb4);

                                                        学习效果与神经元数关系

 由图可以看出:

1、r较小时,残差震荡厉害,但误相对较小;

2、r较大时,残差震荡不大,但收敛慢。

 6.3 学习效率对训练效果的影响

取定中心学习lrc=0.01,宽度学习效率为lrs=0.01,残差容量sig=0.001,学习次数定为n=1000,隐含层神经元数r=8。让权学习效率分别取lrw=0.001,0.005,0.02,0.08,将效果进行对如图.

clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;n=1000;
t=1:length(X);
sig=0.001;r=8;lrc=0.01;lrs=0.01;
[o1,eb1,s1]=BRF(X,Y,0.001,lrc,lrs,sig,r,n);
[o2,eb2,s2]=BRF(X,Y,0.005,lrc,lrs,sig,r,n);
[o3,eb3,s3]=BRF(X,Y,0.02,lrc,lrs,sig,r,n);
[o4,eb4,s4]=BRF(X,Y,0.1,lrc,lrs,sig,r,n);
ebmax=max(eb1);
eb2=eb2(eb2<=ebmax);
eb3=eb3(eb3<=ebmax);
eb4=eb4(eb4<=ebmax);
subplot(2,2,1),bar(eb1);
subplot(2,2,2),bar(eb2);
subplot(2,2,3),bar(eb3);
subplot(2,2,4),bar(eb4);

                                                不同权学习效率效果对比

由图可以看出,权值过于小和过于大,学习效果都不太理想,lrw=0.02学习效果最好。

取定权学习效率lrw=0.02,宽度学习效率为lrs=0.01,残差容量sig=0.001,学习次数定为n=1000,隐含层神经元数r=8。让中心学习效率分别取lrw=0.001,0.005,0.02,0.08,将效果进行对如图

clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;n=1000;
t=1:length(X);
sig=0.001;r=8;lrw=0.02;lrs=0.01;
[o1,eb1,s1]=BRF(X,Y,lrw,0.001,lrs,sig,r,n);
[o2,eb2,s2]=BRF(X,Y,lrw,0.005,lrs,sig,r,n);
[o3,eb3,s3]=BRF(X,Y,lrw,0.02,lrs,sig,r,n);
[o4,eb4,s4]=BRF(X,Y,lrw,0.1,lrs,sig,r,n);
ebmax=max(eb1);
eb2=eb2(eb2<=ebmax);
eb3=eb3(eb3<=ebmax);
eb4=eb4(eb4<=ebmax);
subplot(2,2,1),bar(eb1);
subplot(2,2,2),bar(eb2);
subplot(2,2,3),bar(eb3);
subplot(2,2,4),bar(eb4);

                                               中心学习效率与学习效果关系对比 

由图可以看出,当其他参数不变时,中心学习效率不能太小,也不能太大,给出的四个值中lrc=0.005时学习效果最佳。

 取定权学习效率lrw=0.02,中心学习效率为lrc=0.005,残差容量sig=0.001,学习次数定为n=1000,隐含层神经元数r=8。让宽度学习效率分别取lrs=0.001,0.005,0.025,0.1,将效果进行对如图

clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;n=1000;
t=1:length(X);
sig=0.001;r=8;lrw=0.02;lrc=0.005;
[o1,eb1,s1]=BRF(X,Y,lrw,lrc,0.001,sig,r,n);
[o2,eb2,s2]=BRF(X,Y,lrw,lrc,0.005,sig,r,n);
[o3,eb3,s3]=BRF(X,Y,lrw,lrc,0.025,sig,r,n);
[o4,eb4,s4]=BRF(X,Y,lrw,lrc,0.1,sig,r,n);
ebmax=max(eb1);
eb2=eb2(eb2<=ebmax);
eb3=eb3(eb3<=ebmax);
eb4=eb4(eb4<=ebmax);
subplot(2,2,1),bar(eb1);
subplot(2,2,2),bar(eb2);
subplot(2,2,3),bar(eb3);
subplot(2,2,4),bar(eb4);

                                                宽度学习效率对残差影响

  由图(8)可以看出,不同宽度学习效率对残差影响较大,给出的四个值中,lrs=0.005的网络学习效果最好。

给定r=8,n=20000,lrw=0.02,lrc=0.005,lrs=0.005,sig=0.001,对网络进行深度训练,训练效果如图 

clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;n=20000;
t=1:length(X);
sig=0.001;r=8;lrw=0.02;lrc=0.005;lrs=0.005;
[o1,eb1,s1]=BRF(X,Y,lrw,lrc,lrs,sig,r,n);
t=1:length(Y);
y=mapminmax('reverse',o1,s1);
subplot(2,1,1);
plot(t,Y,'*',t,y,'+-');legend('ʵ¼ÊÖµ','Ô¤²âÖµ');
subplot(2,1,2);
eb1=eb1(eb1<10);
bar(eb1);

                                                        最佳学习效率的学习效果 

7、添加动量因子的RBF神经网络学习 

由前面的计算可知,当学习时间短,参数取得稍微不恰当,网络学习为出现两个严重问题:

(1) 残差震荡现象严重;

(2)收敛速度慢。

对于(2)可以增加学习时间,而对于(1),震荡现象不尽早消除,会陷入局部极值,普遍做法是在负梯度方向加入干扰因子,称为动量因子。新的参数公式如下i=1,2,…,r

其中,fw,fc,fσ分别为权、中心、宽度的动量因子系数,Δw-1是权的动量因子,-1的意思,把上一次的调整方向当作这次的动量方向。关于c和s的解释一样。

利用前面找到的个最佳参数,添加动量因子编制一个RBF神经网络学习程序

function [o,eb,s1]=BRFr(X,Y,lrw,lrc,lrs,fw,fc,fs,sig,r,n)
x=mapminmax(X);
[y,s1]=mapminmax(Y);
m=length(y);
w=rand(r,1);
c=2*rand(r,1)-1;
s=rand(r,1)+0.1;
eb=[];
wr=zeros(r,1);
cr=wr;
sr=wr;
for k=1:n
    d1=dist(c,x);
    d2=d1.^2;
    ss=[];
    for i=1:r
        sr1=ones(1,m)*s(i)^2;
        ss=[ss;sr1];
    end
    p=exp(-d2./ss);
    o=[];
    for j=1:m
       for i=1:r
           wp(i)=w(i)*p(i,j);
       end
       o=[o,sum(wp)];
    end
    e=y-o;
    err=sum(e.^2)^0.5;
    if err<sig
       Xt=datetime;
       disp(Xt);
       break;
    end
    eb=[eb,err];
    dw=[];dc=[];ds=[];
    for i=1:r
        dw=[dw;sum(e.*p(i,:))];
        dc=[dc;w(i)/s(i)^2*sum(e.*p(i,:).*d1(i,:))];
        ds=[ds;w(i)/s(i)^3*sum(e.*p(i,:).*d2(i,:))];
    end
    w=w+lrw*dw+fw*wr;
    c=c+lrc*dc+fc*cr;
    s=s+lrs*ds+fs*sr;
    wr=dw;
    cr=dc;
    sr=ds;
end

利用前面找到的个最佳参数,添加动量因子编制一个RBF神经网络学习程序

clear
A=xlsread('d:\kehu.xlsx');
Y=A';
X=1:60;n=1000;
t=1:length(X);
sig=0.001;r=8;lrw=0.02;lrc=0.005;lrs=0.005;
fc=0.001;fw=0.01;fs=0.001;
[o1,eb1,s1]=BRFr(X,Y,lrw,lrc,lrs,fw,fc,fs,sig,r,n);
t=1:length(Y);
y=mapminmax('reverse',o1,s1);
subplot(2,1,1);
plot(t,Y,'*',t,y,'+-');legend('ʵ¼ÊÖµ','Ô¤²âÖµ');
subplot(2,1,2);
eb1=eb1(eb1<10);
bar(eb1);

                                加入动量因子的学习效果

由参数n=1000计算效果得出如下结论:

(1)学习时间短;

(2)残差震荡先现象不明显;

(3)收敛的一致性较好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day34

今日内容概要 本周主题内容&#xff1a;网络编程和并发编程&#xff0c;理论较多、实践相对少&#xff0c;需要记忆的较多 软件开发架构 OSI七层协议(互联网通信协议) 网络层 传输层 tcp协议和udp协议、IP协议、以太网协议等 tcp协议的三次握手和四次挥手 今日内容详细…

安装Zookeeper

ZooKeeper是一个开源的分布式协调服务&#xff0c;它主要用于解决分布式系统中的一致性、可靠性和协调性等问题。 选择版本 去archive.apache.org/dist/zookeeper/&#xff0c;选择Zookeeper版本&#xff0c;我选择3.4.6 上传服务器 复制地址&#xff0c;通过wget下载 wget…

云渲染一张效果图要多长时间?什么影响了云渲染的速度?

&#xfeff;在当今数字化时代&#xff0c;云渲染已成为许多设计和创意行业中不可或缺的关键工具。它不仅能够提高渲染效率&#xff0c;还为艺术家和设计师带来更多创作的机会和可能性。对于许多尚未使用过云渲染的朋友们来说&#xff0c;你们可能会有一个共同的问题&#xff1…

工业数据采集分析系统 自动化工厂与MES的中转站

MES系统是一套面向制造企业车间执行层的生产信息化管理系统。MES可以为企业提供包括制造数据管理、计划排程管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层…

C#关于接口的常见面试问题

1.1 关于C#接口的问题以及与抽象类的异同 什么是接口 继承有几种形式 为什么要使用接口&#xff1f; 接口类型可以用public关键字修饰吗&#xff1f; 接口能不能派生于抽象类&#xff1f; 接口能不能用Sealed修饰&#xff1f; 一个类可以继承多个接口吗&#xff1f; 必…

Android通过BluetoothDevice获取蓝牙地址

在Android中提供了BluetoothAdapter和BluetoothDevice两个类来实现对蓝牙设备的操作。那么我们要想获取蓝牙地址&#xff0c;可以通过以下步骤来实现 目录 1.获取BluetoothAdapter的实例 2.检查设备是否支持蓝牙 3.打开蓝牙 4.获取已配对的蓝牙设备列表 5.查找特定的蓝牙…

基于知识图谱建模、全文检索的智能知识管理库(源码)

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 知识图谱提供了一种从海量文本和图像中抽取结…

软件测试基础知识详解

1、软件测试定义 软件测试是指在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。 2、软件的分类 软件 程序 数据 文档。 按照功能划分&#xff1a; 系统软件&#xff1a;如操作系统…

(转)tinymce-vue使用教程

一、资源下载 npm install tinymce -S //当前版本^5.1.1 npm install tinymce/tinymce-vue -S //当前版本^3.0.1二、安装语言包 资源下载后,在 node_modules 中找到 tinymce/skins 目录&#xff0c;然后将 skins 目录拷贝到 static 目录下,(PS: 如果是使用 vue-cli 3.x 构建…

内部类概述

一、内部类 1.内部类概述 2.内部类的四种实现形式 1.成员内部类 public class Outer {private int age99;public static String a;//成员内部类public class Inner{private int age88;private String name; // public static String school; //jdk 16开始才支持定义静态…

Mysql按照中文首字母排序

Mysql按照中文首字母排序 1、utf8_general_ci 编码2、latin1_swedish_ci 编码3、gbk 编码 数据库中可以设定表的编码格式&#xff0c;不同编码格式下&#xff0c;中文的排序有区别&#xff0c;下面分别介绍常用编码下的排序方法。 1、utf8_general_ci 编码 如果数据表的某字段…

纯Python代码超快速实现简易贪吃蛇小游戏-打发时间神器

当经典游戏遇上Python——体验十分钟构建自己的休闲娱乐贪吃蛇小游戏&#xff01; 话不多说&#xff0c;直接上源码&#xff0c;复制粘贴即可完美运行&#xff01;(如果你已经安装了pygame库) import pygame import time import randompygame.init()# 定义颜色 white (255, …

每日一练 | 华为认证真题练习Day119

1、如图所示的网络&#xff0c;管理员希望所有主机都不能访问Web服务&#xff08;端口号为80&#xff09;其它服务正常访问&#xff0c;则在G0/0/1的接口配置中traffic-filter outbound 需要绑定哪个ACL规则&#xff1f; A. acl number 3001 rule 5 deny udp destination-port…

基于 python 的接口自动化测试,简单易上手

一、简介 本文从一个简单的登录接口测试入手&#xff0c;一步步调整优化接口调用姿势&#xff1b; 然后简单讨论了一下接口测试框架的要点&#xff1b; 最后介绍了一下我们目前正在使用的接口测试框架 pithy。 期望读者可以通过本文对接口自动化测试有一个大致的了解。 二、引言…

C语言达到什么水平才能从事单片机工作

C语言达到什么水平才能从事单片机工作 从事单片机工作需要具备一定的C语言编程水平。以下是几个关键要点&#xff1a;基本C语言知识&#xff1a; 掌握C语言的基本语法、数据类型、运算符、流控制语句和函数等基本概念。最近很多小伙伴找我&#xff0c;说想要一些C语言学习资料&…

Jmeter连接mysql数据库详细步骤

一、一般平常工作中使用jmeter 连接数据库的作用 主要包括&#xff1a; 1、本身对数据库进行测试&#xff08;功能、性能测试&#xff09;时会需要使用jmeter连接数据库 2、功能测试时&#xff0c;测试出来的结果需要和数据库中的数据进行对比是否正确一致。这时候可以通过j…

网络变压器/网络滤波器(又称脉冲变压器)的额定电压和耐压值

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;带您认识网络变压器/网络滤波器&#xff08;又称脉冲变压器&#xff09;的额定电压和耐压值 电子元器件网络变压器/网络滤波器&#xff08;又称脉冲变压器&#xff0c;后续都称网络变压器&#xff09;的额定电压指的…

燃气管网监测系统,让城市生命线更安全

万宾科技燃气管网监测系统&#xff0c;让城市生命线更安全 城市是现代社会的中心&#xff0c;拥有庞大的人口和各种基础设施&#xff0c;以满足人们的生活需求。城市基础设施包括供热&#xff0c;供水&#xff0c;管廊&#xff0c;河湖&#xff0c;建筑&#xff0c;排水&#x…

线程入门java

1&#xff1a;线程创建方式二 让子类继承Thead类 必须重写Thead类的run方法 写多态的写法 注意优缺点 线程已经Thread 无法继承其他类 package threadTest;public class ThreadTest1 {//目标&#xff1a;掌握线程的创建方式继承thread类public static void main(String[] …

【网络安全】 网络入侵检测

前言 网络安全检测是网络安全的重要组成部分。它可以帮助我们发现潜在的威胁&#xff0c;防止攻击者的入侵。在这一章节中&#xff0c;我们将详细介绍网络入侵检测&#xff0c;包括入侵检测系统&#xff08;IDS&#xff09;和入侵防御系统&#xff08;IPS&#xff09;&#xf…