单层感知机

最近打算学习下深度学习,先从感知机看起,感觉感知机这个算法不是特别的难,但是从学习感知机算法我学习到了很多的东西,最主要就是代码的整洁性,以前也遇到过些的很漂亮的代码,一直没怎么注意,反正我自己写代码都是实现就可以了,能用一个函数解决的,绝对不多用,就导致我写的代码基本上就是过两天我也看不懂了。我决定最近要把以前学习的机器学习的算法也按照这样的格式整理出来。加深下自己的印象顺便提提升下自己的写代码的能力。
感知机这个算法不是特别的难,可以用来处理线性可分二分类问题,如果不可分的话感知机就没办法了,甚至它不像其他处理线性问题的算法一样,别的处理线性问题的算法在处理非线性问题时,虽然效果不好但是会收敛于某个值。感知机不同,对于非线性二分类问题,它是震荡的,所以导致了感知机基本不怎么用,但是是感知机的出现才有了以后的神经网络,深度学习才得以发展,所以学习感知机可以让我们更好的去理解神经网络。

import numpy as np
class ganzhiji():
    '''感知机算法
          by xz'''
    def __init__(self,lr,freq):
        '''初始化:
            lr: 学习率
            freq: 迭代频次
        '''
        self.lr=lr
        self.freq=freq
    
    def step(self,X):
        '''np.where(a,b,c)  if a:b
                            else: c
        '''
        return np.where(X>=0,1,0)
       
    def fit(self,X,y):
        
        '''X:特征矩阵,类数组类型
           y:类别 '''
        self.w_=np.zeros(X.shape[1]+1)
        X=np.array(X)
        y=np.array(y)
        for i in range(self.freq):
            error=0
            for x,y1 in zip(X,y):
                
                out1=np.dot(x,self.w_[0:-1])+self.w_[-1]

                y_predict=self.step(out1)
#                
                ####调整权重
                self.w_[0:-1]+=self.lr*x*(y1-y_predict)
                ####调整偏置
                self.w_[-1]+=self.lr*(y1-y_predict)

        return self.w_
    def predict(self,X):
        X=np.array(X)
  
        return self.step(np.dot(X,self.w_[0:-1])+self.w_[-1])
                
train_data=[[0,0,0],[0,1,0],[1,0,1],[1,1,1]]
train_data=np.array(train_data)
train_X=train_data[:,0:2]
train_y=train_data[:,2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值