模糊神经网络+c代码
模糊神经网络的计算步骤如下:
测试数据如下:(胃病和非胃病)
输入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代码相关推荐
- 模糊神经网络 matlab,模糊神经网络程序代码
本人是模糊神经网络初学者,最近在研究模糊神经网络的程序,需要应用到论文中,求大神们给个程序.另外下面是我从网上下载的程序代码,但是不知道这个利用K-means法得到的模糊规则个数是何意,求解,谢谢啦~ ...
- 模糊神经网络算法原理,模糊神经网络算法代码
用matlab做模糊神经网络,步骤是什么? 我知道模糊控制包括:模糊化,模糊推理,清晰化等步骤 20 谷歌人工智能写作项目:神经网络伪原创 求matlab大神帮帮忙,做模糊神经网络预测 用matlab ...
- 模糊神经网络:基于模糊神经网络(Fuzzy Neural Networks,FNN)的数据分类(提供MATLAB代码)
一.模糊神经网络FNN 模糊神经网络(Fuzzy Neural Networks,FNN)结合了神经网络系统和模糊系统的长处,它在处理非线性.模糊性等问题上有很大的优越性,在 智能信息处理方面存在巨大 ...
- 神经网络:基于模糊神经网络(Fuzzy Neural Networks,FNN)的数据预测(提供MATLAB代码)
一.模糊神经网络FNN 模糊神经网络(Fuzzy Neural Networks,FNN)结合了神经网络系统和模糊系统 的长处,它在处理非线性. 模糊性 等问题上有很大的优越性,在 智能信息处理 方面 ...
- 看懂自适应模糊神经网络(ANFIS)并附ANFIS代码
ANFIS (Adaptive-Network-Based Fuzzy Inference System)--自适应模糊神经网络,最早于1993年由Jyh-Shing Roger Jang提出.采用模 ...
- MATLAB实战系列(三十四)-MATLAB基于PCA-LDA模糊神经网络的人脸识别
前言 文中涉及代码及图片,可参见MATLAB基于PCA-LDA模糊神经网络的人脸识别,有需要的小伙伴可自行下载订阅,谢谢大家! 基于PCA-LDA和粗糙集模糊神经网络的人脸识别,一方面在应用前景上是十 ...
- 模糊理论相关学习(2)——模糊神经网络
因为项目需要用到模糊神经网络,介绍一下BP模糊神经网络的结构,模型学习方法吧. 前言 简单介绍模糊神经网络的由来. 模糊理论创始人Zaden教授在介绍模糊理论时曾经举过一个停车的例子,即便是一个新手在 ...
- 模糊神经网络matlab定义,模糊神经网络matlab仿真
模糊神经网络matlab 您好,是这样的:经过训练后的参数比较差,用原数据输入训练好的网络,得出结果和要的结果误差很大,不明白是怎么回事?还有要是多输入多输出这段程序该怎么改?模糊神经网络可以用mat ...
- 神经网络模式识别方法,神经网络模式识别代码
为什么Matlab神经网络里面会有聚类分析,模式识别,还有fitting tools,神经网络和聚类.模式有区别吗? 我的理解是神经网络可以用于预测,模式识别,聚类,fittingtools是MATL ...
最新文章
- “互联网+”的时代,易佳互联也随着时代步伐前进着
- luogu P3391 【模板】文艺平衡树(FHQ - treap,懒惰标记)
- 全国青少年软件编程python等级考试-全国青少年软件编程等级考试:Python一级考试大纲...
- Angular\Vue解决页面数据加载时出现{{message}}闪烁的情况
- python数据整理代码_熬夜整理的资料:分享Python数据可视化图表代码和案例给大家...
- Android中活动Activity方面的知识点
- so easy(2019徐州icpc网络赛B)
- 饿了么风神登录_海底捞首度登陆第三方外卖!联手饿了么全国配送“小火锅”...
- c++运行不出结果_fastjson 不出网利用总结
- 【CodeForces - 349C】Mafia(思维模拟,优秀的二分)
- Keras-Sequential模型(1)
- mysql 查询最顶级_2018顶级MySQL博客作者
- Android杂谈--ListView之BaseAdapter的使用
- Webdriver常用的元素定位
- 如何查看一个网页源代码的最后更新时间
- avx2指令集对php有用吗,AVX2指令集的作用
- HDU4585 Shaolin
- 不惧财报逆风,喜获三连阳,TJX还能涨多少?
- Angular4学习笔记(一):准备和环境搭建
- 次奥,搞定奇怪bug