单输出感知器学习算法实现修改

今天看了一些文章,发现前面我对整个神经网络学习算法都存在误解.所以更正了一下.现在好了.这个实现方法应该是正确的了.

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int ji(int x[10],int w[10],int k)
{
    int i,net=0;
 for(i=0;i<k;i++)
        net=net+x[i]*w[i];
 return net;
}
int F(int net)
{
 if (net>12)
  return 1;
 else
  return 0;
}
void jia(int x[],int w[],int k)
{
 int i=0;
 for (i=0;i<k;i++)
  w[i]=w[i]+x[i];
}
void jian(int x[],int w[],int k)
{
 int i=0;
 for(i=0;i<k;i++)
  w[i]=w[i]-x[i];
}
int suiji()
{
 float i,j; 
 float s;
 i=(float)RAND_MAX;
 j=(float)rand(); 
 s=j/i;
 if(s>0.5)
  return 1;
 else
  return 0;
 
}
void init(int w[],int k)
{
 int i;
 srand((int)time(0));
 for(i=0;i<k;i++)
 {
  w[i]=suiji();
 }
 for(i=0;i<k;i++)
  printf("%d ",w[i]);
 printf("/n");
}
void main()
{
 int x[10]={1,0,0,0,0,1,1,0,1,0};
 int temp=1;
 int w[10];
 int o;
 init(w,10);
 o=F(ji(x,w,10));
 while (o!=temp)
 {
  printf("%d/n",o);
  jia(x,w,10);
  o=F(ji(x,w,10));
 }
 printf("%d/n",o);

下一步实现BP算法,把这个任务完成以后,我的任务也差不多完成一半了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较具体的问题。我会尽力回答。 改进的平均感知器算法(Improved Averaged Perceptron Algorithm)是对原始的感知器算法进行改进的一种算法,它可以更快地收敛,并且对于线性可分的数据集,可以保证得到完全正确的分类结果。下面是这个算法的伪代码: ``` 输入:训练数据集D={(x1,y1),(x2,y2),...,(xn,yn)},其中xi∈R^n,yi∈{+1,-1} 输出感知器模型f(x) 1. 初始化权重向量w0,偏置b0,平均权重向量u=0,平均偏置β=0,迭代次数T 2. for t=1,2,...,T do 3. for i=1,2,...,n do 4. if yi(wt*xi+b)≤0 then 5. wt+1=wt+η*yi*xi 6. bt+1=bt+η*yi 7. u=u+wt 8. β=β+bt 9. else 10. u=u+wt 11. β=β+bt 12. end if 13. end for 14. w=u/(n*T) 15. b=β/(n*T) 16. f(x)=sign(w*x+b) ``` 其中,wt和bt表示第t轮迭代后的权重向量和偏置,η表示学习率,u和β分别表示所有迭代过程中的权重向量和偏置之和。 下面是使用Python实现的代码: ```python import numpy as np class ImprovedPerceptron: def __init__(self, learning_rate=1, max_iter=10): self.lr = learning_rate self.max_iter = max_iter def fit(self, X, y): n_samples, n_features = X.shape self.w = np.zeros(n_features) self.b = 0 self.u = np.zeros(n_features) self.beta = 0 for t in range(self.max_iter): for i in range(n_samples): if y[i] * (np.dot(self.w, X[i]) + self.b) <= 0: self.w += self.lr * y[i] * X[i] self.b += self.lr * y[i] self.u += self.w self.beta += self.b else: self.u += self.w self.beta += self.b self.w = self.u / (n_samples * self.max_iter) self.b = self.beta / (n_samples * self.max_iter) def predict(self, X): return np.sign(np.dot(X, self.w) + self.b) ``` 这是一个简实现,只考虑了二分类问题,并且没有加入正则化等其他的技巧。你可以根据实际需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值