感知机算法C语言,感知机算法的C语言实现.DOC

感知机算法的C语言实现

维数n=3时,分别取M=10,M=20,M=30

当M=10时,收敛时,迭代次数K=1,权矩阵矢量为W=[-0.478851,0.458190,-0.156789],阈值,正确分类个数为26个。正确分类率。

当M=20 时,收敛时,迭代次数K=20,权矩阵矢量为W=[-0.348414,0.448089,0.189322],阈值,正确分类个数为28个。正确分类率为。

(3) 当M=30时,收敛时,迭代次数K=2,权矩阵矢量为W=[-0.305788,-0.159451,0.640561],

阈值,正确分类个数为30个。正确分类率为。

维数n=5时,分别取M=10,M=20,M=30

当M=10时,收敛时,迭代次数K=2,权矢量矩阵为W=[-0.274457,0.368049,0.363532,-0.226269,0.356574],阈值,正确分类个数为26个。正确分类率为。

当M=20时,收敛时,迭代次数K=2,权矩阵矢量为W=[-0.222079,-0.145569,-0.102233,-0.287663,0.645226],阈值,正确分类个数为27个。正确分类率为。

当M=30时,收敛时,迭代次数K=2,权矢量矩阵为W=[-0.190624,-0.027136,0.251925,0.309026,0.347021],阈值。正确分类个数为30个。正确分类率为。

程序如下所示:

#include

#include

#include

#include

#define PI 3.1415926

#define COUNT 30 //样本训练次数

#define DIMEN 5 // 输入样本维度

/***************

函数名:ran_f

函数功能:产生0到1之间均匀分布的随机数

接口参数:

*p double型指针变量

函数返回值 a double型

****************/

double ran_f(double*p)

{

double a;

srand((unsigned) time(NULL));

*p = rand();

a = *p / 32767.0;

return(a);

}

void main()

{

double x[COUNT][DIMEN]; // 输入样本训练数据

int y[COUNT]; // 训练输出

int d[COUNT]; // 理想输出

double W[COUNT]; // 权值矩阵

double thres; // 阈值

double eps = 0.00001; // 进行收敛判断的条件

double deta = 0.2; // 学习因子

double r[1] = {3.0}; // 随机数种子

double xt[30][5]; //测试数据

int dt[30]; //理想数据输出

double m1, m2, s, dp, ep; // dp为理想输出与实际输出的差,ep为均方误差

int yt[30]; //测试输出

int count = 0; //测试正确的数目

double Rate; //正确分类率

int i, j, k;

for(i = 0; i < COUNT; i++)

{

for(j = 0; j < DIMEN; j++)

{

m1 = ran_f(r); //产生均匀分布的随机数

m2 = ran_f(r);

x[i][j] = sqrt(-2 * log(m1)) * sin(2 * PI * m2); //产生正态分布随机数

}

if(x[i][1] >= 0)

d[i] = 1;

else

d[i] = 0;

}

srand((unsigned)time(NULL));

for(j = 0; j < DIMEN; j++) //对权值、阈值进行初始化,随机产生[-1,1]间的数

W[j] = (2.0 * rand() / RAND_MAX - 1) ;

thres = (2.0 * rand() / RAND_MAX - 1) ;

k

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值