统计学习方法笔记,第二章感知机的python代码实现

来源:互联网 发布:linux查看任务的命令 编辑:程序博客网 时间:2024/05/29 16:49

实现的比较粗糙,代码如下:

class  Perceptron:        import numpy as np        def __init__(self, w = 0, b = 0, lr = 1, epoch = 100):        self.weight = w        self.bias = b        self.lr = lr  #lr: learning rate        self.epoch = epoch            def sign(self, x):        if np.dot( np.array(self.weight), x) + self.bias >= 0:            return 1        else:            return -1    def train(self,X, y):        X_train = np.array(X)        convergent = False        epoch = 0        while not convergent and epoch < self.epoch:            convergent = True            for i in range(np.array(X_train).shape[0]):                x_i = X_train[i]                y_i = y[i]                if y_i * self.sign(x_i) > 0:                    pass                else:                    convergent = False                    self.weight += self.lr * y_i*x_i                    self.bias += self.lr * y_i                epoch += 1                    def test(self,X):        X_test = np.array(X)        y_test = np.zeros(X_test.shape[0])                for i in range(X_test.shape[0]):            y_test[i] = self.sign(X_test[i])        return y_test        def print_arribute(self):        print("weight:",self.weight)        print("bias:",self.bias)

用书上例2.1测试一下结果:

X = [[3,3],[4,3],[1,1]]y = [1,1,-1]#init the perceptron with [0,0] as weight, 0 as biasperceptron = Perceptron([0,0],0)#trainperceptron.train(X,y)#check the parametersperceptron.print_arribute()

结果如下
('weight:', array([1, 1]))('bias:', -3)

尝试一下训练集的结果

perceptron.test(X)


结果如下:

array([ 1.,  1., -1.])



原创粉丝点击