感知器代码

最近听<模式识别 中国科学院19讲> 视频(想要的给我留言.我给你们发邮箱)写了一个感知器的作业.我平时不写作业.这次写了作业当然有发一下给博客加些分.原创的加10分.

下面是问题

 

用感知器算法求下列模式分类的解向量 w :

  ω1: {(0 0 0)T, (1 0 0)T, (1 0 1)T, (1 1 0)T}

  ω2: {(00 1)T, (0 1 1)T, (0 1 0)T, (1 1 1)T}

编写求解上述问题的感知器算法程序。

 

 

下面是代码

 

int main() 
{
 
/*
ω1: {(0 0 0)T, (1 0 0)T, (1 0 1)T, (1 1 0)T}
ω2: {(0 0 1)T, (0 1 1)T, (0 1 0)T, (1 1 1)T}


*/
 double w[3] = {1,1,1};
 int data[8][3] = {
  {0,0,0,}, {1,0,0},{1,0,1},{1,1,0}
  ,{0,0,1},{0,1,1},{0,1,0},{1,1,1}
 };

 int label[8] = {-1,-1,-1,-1,1,1,1,1};


 for (int i =0; i < 100; i++)
 {
  int error = 0;
  for (int n = 0; n < 8; n++)
  {
   double sum = data[n][0] * w[0] + data[n][1] * w[1] + data[n][2] * w[2];

   if (sum * label[n] < 0)
   {
    error++;
    //调整权重
    if(label[n] == -1)
    {
     if (data[n][0] == 1)
     {
      w[0] -= 0.01;
     }

     if (data[n][1] == 1)
     {
      w[1] -= 0.01;
     }

     if (data[n][2] == 2)
     {
      w[2] -= 0.01;
     }
    }

    if (label[n] == 1)
    {
     if (data[n][0] == 1)
     {
      w[0] += 0.01;
     }

     if (data[n][1] == 1)
     {
      w[1] += 0.01;
     }

     if (data[n][2] == 2)
     {
      w[2] += 0.01;
     }
    }
   }
  }

  if (error < 2)
  {
   break;
  }
 }
  
 return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值