zoukankan      html  css  js  c++  java
  • 感知器

    #coding=utf-8
    import copy
    
    def pre(data):
        """预处理,样本增广化"""
        lenth=len(data)
        for i in range(lenth):
            data[i].append(1)
        for j in range(lenth/2):
            for k in range(len(data[0])):
                data[lenth-j-1][k] = data[lenth-j-1][k]*(-1)
        return
    
    
    def fit(data,k,p,w,temp):
        """不要使用'='来用list给list赋值,'='是将地址进行赋值,从而改变一个list另一个也会发生变化,所以使用copy.copy进行赋值"""
        lenth = k%len(data)-1
        x = data[lenth]
        print lenth
        print w
        temp[lenth] = copy.copy(w)
        print temp
        sum = 0
        print u""+str(k)+u"次迭代 增广权矢量:"+str(w)
        for i in range(len(w)):
            sum = sum + w[i]*x[i]
        k = k+p
        if temp[0]==temp[1] and temp[1]==temp[2] and temp[2]==temp[3]:    #当连续4次不变时结束训练,认为所有模式都能够正确分类为止
            exit()
        if sum > 0:
            fit(data,k,p,w,temp)
        elif sum <= 0:
            for i in range(len(w)):
                w[i] = w[i] + x[i]
            fit(data,k,p,w,temp)
    
    
    data = [[0,0],[0,1],[1,0],[1,1]]      #样本
    w = [1,1,1]                            #增广权矢量
    temp=[[],[],[],[]]                     #判断list,用来判断迭代结束
    p = 1                                  #增量
    k = 1                                  #迭代步数
    pre(data)                              #预处理
    fit(data,k,p,w,temp)                   #迭代训练

    做这个的时候出现了一个bug,开始list赋值直接使用的'=',发现改变一个元素时所以元素都发生了改变。

    这里的'='其实是把地址进行了赋值,例如让list1=list2,那么改变list时list1也会发生变化,要使用copy.copy才是对象赋值

  • 相关阅读:
    Firefox地址栏样式设定
    定制Eclipse
    超简单的java爬虫
    JavaWeb--中文乱码小结
    编译原理之正则表达式转NFA
    Fedora下Eclipse/MyEclipse崩溃的解决方案
    利用Octopress在github pages上搭建个人博客
    在Eclipse中导入新浪微博SDK
    BlueMix
    云计算的三层简单理解
  • 原文地址:https://www.cnblogs.com/Aiden-/p/10126053.html
Copyright © 2011-2022 走看看