zoukankan      html  css  js  c++  java
  • 《第二章 感知机》

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    #  未命名.py
    #  
    #  Copyright 2013 t-dofan <t-dofan@T-DOFAN-PC>
    #  
    #  This program is free software; you can redistribute it and/or modify
    #  it under the terms of the GNU General Public License as published by
    #  the Free Software Foundation; either version 2 of the License, or
    #  (at your option) any later version.
    #  
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #  
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software
    #  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    #  MA 02110-1301, USA.
    #  
    #  
    
    class Perceptron:
        #初始化
        def __init__(self,learnrate,w0,w1,b):
            self.learnrate = learnrate
            self.w0 = w0
            self.w1 = w1
            self.b = b
            
        #模型
        def model(self,x):
            result = x[2]*(self.w0*x[0] + self.w1*x[1] + self.b)
            return result
    
        #策略
        def iserror(self,x):
            result = self.model(x)
            if result <= 0:
                return True
            else:
                return False
                
        ##算法 ---> 这里的learnrate 代表。。。。。。。。。。。
        #调整策略: Wi = Wi + n*wixi
        def gradientdescent(self,x):
            self.w0 = self.w0 + self.learnrate * x[2] * x[0] #根据调整策略,此处是否需要*x[2] ? 
            self.w1 = self.w1 + self.learnrate * x[2] * x[1]
            self.b = self.b + self.learnrate * x[2]
    
    
        #训练
        def traindata(self,data):
            times = 0
            done = False
            while not done:
                for i in range(0,6):
                    if self.iserror(data[i]):
                        self.gradientdescent(data[i])
                        times += 1
                        done = False
                        break
                    else:
                        done = True    
            print times
            print "rightParams:w0:%d,w1:%d,b:%d" %(self.w0 , self.w1 , self.b)
    
        def testmodel(self,x):
            result  = self.w0*x[0] + self.w1*x[1] + self.b
            if result > 0:
                return 1
            else:
                return -1
    
    
    def main():
        p = Perceptron(1,0,0,0)
        data = [[3,3,1],[4,3,1],[1,1,-1],[2,2,-1],[5,4,1],[1,3,-1]] 
        testdata = [[4,4,-1],[1,2,-1],[1,4,-1],[3,2,-1],[5,5,1],[5,1,1],[5,2,1]]
        p.traindata(data)
        for i in testdata:
            print "%d  %d  %d" %(i[0],i[1],p.testmodel(i))
            
        return 0
    
    if __name__ == '__main__':
        main()
    View Code

    ---恢复内容开始---

        参考:http://www.cnblogs.com/fxjwind/p/3607784.html

        感知机(perceptron)是二类分类的线性分类模型,属于判别模型(直接寻找输入到输出的映射函数,不关心联合概率什么的)。

        感知机模型

        

      假设空间 是定义在特征空间中的所有线性分类模型(linear classification model)或线性分类器(linear classifier),即函数集合

      

      几何解释为,线性方和wx+b=0,对应于特征空间中的一个分离超平面(separating hyperpalne),其中w是超平面的法向量,b是超平面的截距,将数据点分为正、负两类

      

    ---恢复内容结束---

        感知机(perceptron)是二类分类的线性分类模型,属于判别模型(直接寻找输入到输出的映射函数,不关心联合概率什么的)。

        感知机模型

        

      假设空间 是定义在特征空间中的所有线性分类模型(linear classification model)或线性分类器(linear classifier),即函数集合

      

      几何解释为,线性方和wx+b=0,对应于特征空间中的一个分离超平面(separating hyperpalne),其中w是超平面的法向量,b是超平面的截距,将数据点分为正、负两类

      

      感知机学习算法的对偶形式

      看的不明白,还是贴图吧

      

  • 相关阅读:
    HTTP解析
    Linux(CentOS)常用命令
    Windows下虚拟Linux
    国内静态文件CDN服务介绍 国内js公共库
    吐槽一下csdn和博客园
    项目托管 网站 小记
    微软2013年校园实习生招聘笔试题及答案
    最近在折腾VPS(持续完善)
    spring MVC +freemarker + easyui 实现sql查询和执行小工具总结
    Hessian 接口使用示例总结
  • 原文地址:https://www.cnblogs.com/573177885qq/p/4329046.html
Copyright © 2011-2022 走看看