模糊神经网络的计算步骤如下:

测试数据如下:(胃病和非胃病)

输入X:

228 134 20 11
245 134 10 40
200 167 12 27
170 150 7 8
100 167 20 14
150 117 7 6
120 133 10 26
160 100 5 10
185 115 5 19
170 125 6 4
165 142 5 3
185 108 2 12
225 125 7 14
130 100 6 12

输出期望y:(1为胃病,2为非胃病)

1 1 1 1 1 2 2 2 2 2 2 2 2 2

代码如下:(该代码输出结果还是有些欠缺的,但从结果可以看出胃病和非胃病还是有比较明显的区别)

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "math.h"
#include "vector"
using namespace std;

#define dimIn 4  //输入样本的维数
#define dimOut 1  //输出样本的维数
#define hidePoint 8  //隐藏节点
#define MAXITER 1000   //最大迭代次数
#define alpha 0.35   //学习率

typedef vector<double> doubleVector;

vector<doubleVector> getInputTrain(char *File);  //获取训练样本
vector<doubleVector> getOutputTrain(char *File);  //获取期望样本
vector<doubleVector> inputNormalization(vector<doubleVector> inputTrain);  //训练样本归一化
vector<doubleVector> outputNormalization(vector<doubleVector> outputTrain);  //输出期望归一化
void trainNet(vector<doubleVector> inputTrain, vector<doubleVector> outputTrain);  //开始训练样本

double maxInputTrain[dimIn], minInputTrain[dimIn];    //输入训练样本的最大最小值
double maxOutputTrain[dimOut], minOutputTrain[dimOut];   //期望样本的最大最小值

void main()
{
int i, j;
char *inputFile = "input.txt";
char *outputFile = "output.txt";

vector<doubleVector> inputTrain;  //输入训练样本
vector<doubleVector> outputTrain;  //输出期望样本

inputTrain = getInputTrain(inputFile);
outputTrain = getOutputTrain(outputFile);

inputTrain = inputNormalization(inputTrain);  //样本归一化
outputTrain = outputNormalization(outputTrain);  //输出期望归一化

trainNet(inputTrain, outputTrain);  //开始训练样本

}

//开始训练样本
void trainNet(vector<doubleVector> inputTrain, vector<doubleVector> outputTrain)
{
double Test[dimIn] = {100, 117, 7, 2};

int iter=0;
int i, j, k;
double p[dimIn+1][hidePoint], p_1[dimIn+1][hidePoint], d_p[hidePoint];
double c[hidePoint][dimIn], c_1[hidePoint][dimIn], d_c[hidePoint][dimIn];
double b[hidePoint][dimIn], b_1[hidePoint][dimIn], d_b[hidePoint][dimIn];
double u[dimIn][hidePoint];
double w[hidePoint];
double y[hidePoint];

//初始化参数
srand(time(NULL));
for(i=0; i<hidePoint; i++)
{
for(j=0; j<dimIn; j++)
{
c[i][j] = ((double)rand()/RAND_MAX);
b[i][j] = ((double)rand()/RAND_MAX);
c_1[i][j] = c[i][j];
b_1[i][j] = b[i][j];
}
}

for(i=0; i<dimIn+1; i++)
{
for(j=0; j<hidePoint; j++)
{
p[i][j] = 0.18;
p_1[i][j] = p[i][j];
}
}

//开始训练
double addw, addyw;
double e, yn;

for(iter=0; iter<MAXITER; iter++)
{
for(k=0; k<inputTrain.size(); k++)
{
//获取模糊参数
for(i=0; i<dimIn; i++)
for(j=0; j<hidePoint; j++)
u[i][j] = exp(-((inputTrain[k][i]-c[j][i])*(inputTrain[k][i]-c[j][i]))/b[j][i]);

//模糊隶属度计算
addw = 0;
for(i=0; i<hidePoint; i++)
{
double mul = 1;
for(j=0; j<dimIn; j++)
mul = mul*u[j][i];

w[i] = mul;
addw += w[i];
}

//计算输出
addyw = 0;
for(i=0; i<hidePoint; i++)
{
  double sumTemp =0;
  for(j=0; j<dimIn; j++)
sumTemp = sumTemp*p[j][i]*inputTrain[k][j];

y[i] = sumTemp+p[dimIn][i];

addyw += y[i]*w[i];
}

yn = addyw/addw;    //模糊输出值

e = outputTrain[k][0]-yn;

//修正系数p
for(i=0; i<hidePoint; i++)
d_p[i] = alpha*e*w[i]/addw;

for(i=0; i<hidePoint; i++)
{
for(j=0; j<dimIn; j++)
p[j][i] = p_1[j][i]+d_p[i]*inputTrain[k][j];
p[dimIn][i] = p_1[dimIn][i];
}

//修正系数b
for(i=0; i<hidePoint; i++)
for(j=0; j<dimIn; j++)
b[i][j] = b_1[i][j]+alpha*e*(y[i]*addw-addyw)*(inputTrain[k][j]-c[i][j])*(inputTrain[k][j]-c[i][j])*w[i]/(b[i][j]*b[i][j]*addw*addw);

//修正系数c
for(i=0; i<hidePoint; i++)
for(j=0; j<dimIn; j++)
c[i][j] = c_1[i][j]+alpha*e*(y[i]*addw-addyw)*2*(inputTrain[k][j]-c[i][j])*w[i]/(b[i][j]*addw*addw);

}
}

//测试网络
for(k=0; k<13; k++)
{
for(i=0; i<dimIn; i++)
for(j=0; j<hidePoint; j++)
u[i][j] = exp(-((inputTrain[k][i]-c[j][i])*(inputTrain[k][i]-c[j][i]))/b[j][i]);

//模糊隶属度计算
addw = 0;
for(i=0; i<hidePoint; i++)
{
double mul = 1;
for(j=0; j<dimIn; j++)
mul = mul*u[j][i];

w[i] = mul;
addw += w[i];
}

//计算输出
addyw = 0;
for(i=0; i<hidePoint; i++)
{
  double sumTemp =0;
for(j=0; j<dimIn; j++)
sumTemp = sumTemp+p[j][i]*inputTrain[k][j];

y[i] = sumTemp+p[dimIn][i];

addyw += y[i]*w[i];
}

yn = addw/addyw;    //模糊输出值
printf("%lf\n", yn);
}

}

//输出期望归一化
vector<doubleVector> outputNormalization(vector<doubleVector> outputTrain)
{
int i, j;
double y;
doubleVector temp;
vector<doubleVector> dst;

for(i=0; i<dimOut; i++)
{
maxOutputTrain[i] = minOutputTrain[i] = outputTrain[0][i];

for(j=1; j<outputTrain.size(); j++)
{
if(maxOutputTrain[i]<outputTrain[j][i])
maxOutputTrain[i] = outputTrain[j][i];

if(minOutputTrain[i]>outputTrain[j][i])
minOutputTrain[i] = outputTrain[j][i];
}
}

//归一化
for(i=0; i<outputTrain.size(); i++)
{
temp.clear();
for(j=0; j<dimIn; j++)
{
y = (0.02+0.996*(outputTrain[i][j]-minOutputTrain[j]))/(maxOutputTrain[j]-minOutputTrain[j]);
temp.push_back(y);
}

dst.push_back(temp);
}

return dst;

}

//训练样本归一化
vector<doubleVector> inputNormalization(vector<doubleVector> inputTrain)
{
int i, j;
double y;
double maxInputTrain[dimIn], minInputTrain[dimIn];
doubleVector temp;
vector<doubleVector> dst;

for(i=0; i<dimIn; i++)
{
maxInputTrain[i] = minInputTrain[i] = inputTrain[0][i];

for(j=1; j<inputTrain.size(); j++)
{
if(maxInputTrain[i]<inputTrain[j][i])
maxInputTrain[i] = inputTrain[j][i];

if(minInputTrain[i]>inputTrain[j][i])
minInputTrain[i] = inputTrain[j][i];
}
}

//归一化
for(i=0; i<inputTrain.size(); i++)
{
temp.clear();
for(j=0; j<dimIn; j++)
{
y = (0.02+0.996*(inputTrain[i][j]-minInputTrain[j]))/(maxInputTrain[j]-minInputTrain[j]);
temp.push_back(y);
}

dst.push_back(temp);
}

return dst;

}

//获取输出样本
vector<doubleVector> getInputTrain(char *File)
{
int i=1;
doubleVector temp;
vector<doubleVector> dst;
double num;

FILE *fp = fopen(File, "r");

if(fp==NULL)
{
printf("Open input train error\n");
exit(0);
}

temp.clear();
while(fscanf(fp, "%lf", &num)!=EOF)
{
temp.push_back(num);
if(i%dimIn==0)
{
dst.push_back(temp);
temp.clear();
}

i++;
}

return dst;
}

//获取输出样本
vector<doubleVector> getOutputTrain(char *File)
{
int i=1;
doubleVector temp;
vector<doubleVector> dst;
double num;

FILE *fp = fopen(File, "r");

if(fp==NULL)
{
printf("Open input train error\n");
exit(0);
}

temp.clear();
while(fscanf(fp, "%lf", &num)!=EOF)
{
temp.push_back(num);
if(i%dimOut==0)
{
dst.push_back(temp);
temp.clear();
}

i++;
}

return dst;
}

模糊神经网络+c代码相关推荐

  1. 模糊神经网络 matlab,模糊神经网络程序代码

    本人是模糊神经网络初学者,最近在研究模糊神经网络的程序,需要应用到论文中,求大神们给个程序.另外下面是我从网上下载的程序代码,但是不知道这个利用K-means法得到的模糊规则个数是何意,求解,谢谢啦~ ...

  2. 模糊神经网络算法原理,模糊神经网络算法代码

    用matlab做模糊神经网络,步骤是什么? 我知道模糊控制包括:模糊化,模糊推理,清晰化等步骤 20 谷歌人工智能写作项目:神经网络伪原创 求matlab大神帮帮忙,做模糊神经网络预测 用matlab ...

  3. 模糊神经网络:基于模糊神经网络(Fuzzy Neural Networks,FNN)的数据分类(提供MATLAB代码)

    一.模糊神经网络FNN 模糊神经网络(Fuzzy Neural Networks,FNN)结合了神经网络系统和模糊系统的长处,它在处理非线性.模糊性等问题上有很大的优越性,在 智能信息处理方面存在巨大 ...

  4. 神经网络:基于模糊神经网络(Fuzzy Neural Networks,FNN)的数据预测(提供MATLAB代码)

    一.模糊神经网络FNN 模糊神经网络(Fuzzy Neural Networks,FNN)结合了神经网络系统和模糊系统 的长处,它在处理非线性. 模糊性 等问题上有很大的优越性,在 智能信息处理 方面 ...

  5. 看懂自适应模糊神经网络(ANFIS)并附ANFIS代码

    ANFIS (Adaptive-Network-Based Fuzzy Inference System)--自适应模糊神经网络,最早于1993年由Jyh-Shing Roger Jang提出.采用模 ...

  6. MATLAB实战系列(三十四)-MATLAB基于PCA-LDA模糊神经网络的人脸识别

    前言 文中涉及代码及图片,可参见MATLAB基于PCA-LDA模糊神经网络的人脸识别,有需要的小伙伴可自行下载订阅,谢谢大家! 基于PCA-LDA和粗糙集模糊神经网络的人脸识别,一方面在应用前景上是十 ...

  7. 模糊理论相关学习(2)——模糊神经网络

    因为项目需要用到模糊神经网络,介绍一下BP模糊神经网络的结构,模型学习方法吧. 前言 简单介绍模糊神经网络的由来. 模糊理论创始人Zaden教授在介绍模糊理论时曾经举过一个停车的例子,即便是一个新手在 ...

  8. 模糊神经网络matlab定义,模糊神经网络matlab仿真

    模糊神经网络matlab 您好,是这样的:经过训练后的参数比较差,用原数据输入训练好的网络,得出结果和要的结果误差很大,不明白是怎么回事?还有要是多输入多输出这段程序该怎么改?模糊神经网络可以用mat ...

  9. 神经网络模式识别方法,神经网络模式识别代码

    为什么Matlab神经网络里面会有聚类分析,模式识别,还有fitting tools,神经网络和聚类.模式有区别吗? 我的理解是神经网络可以用于预测,模式识别,聚类,fittingtools是MATL ...

最新文章

  1. “互联网+”的时代,易佳互联也随着时代步伐前进着
  2. luogu P3391 【模板】文艺平衡树(FHQ - treap,懒惰标记)
  3. 全国青少年软件编程python等级考试-全国青少年软件编程等级考试:Python一级考试大纲...
  4. Angular\Vue解决页面数据加载时出现{{message}}闪烁的情况
  5. python数据整理代码_熬夜整理的资料:分享Python数据可视化图表代码和案例给大家...
  6. Android中活动Activity方面的知识点
  7. so easy(2019徐州icpc网络赛B)
  8. 饿了么风神登录_海底捞首度登陆第三方外卖!联手饿了么全国配送“小火锅”...
  9. c++运行不出结果_fastjson 不出网利用总结
  10. 【CodeForces - 349C】Mafia(思维模拟,优秀的二分)
  11. Keras-Sequential模型(1)
  12. mysql 查询最顶级_2018顶级MySQL博客作者
  13. Android杂谈--ListView之BaseAdapter的使用
  14. Webdriver常用的元素定位
  15. 如何查看一个网页源代码的最后更新时间
  16. avx2指令集对php有用吗,AVX2指令集的作用
  17. HDU4585 Shaolin
  18. 不惧财报逆风,喜获三连阳,TJX还能涨多少?
  19. Angular4学习笔记(一):准备和环境搭建
  20. 次奥,搞定奇怪bug

热门文章

  1. StarUML for Mac的安装与破解
  2. 惠普 触摸板驱动_如何在HP触摸板上安装Android
  3. vue动态获取接口域名
  4. 修改Gallery2记录
  5. 关于iTunes 在win10 中的一些问题
  6. BWT压缩算法及FM搜索算法详解
  7. 怎么把图片文件大小压缩到25k到40k还比较清晰
  8. 机器学习中常见的防止过拟合处理方法
  9. 九 关系 Relations
  10. 智能网联汽车城市化的进程和思考