4. Perceptron

1. Perceptron

El perceptrón es un modelo de clasificación lineal de dos clases. Hasta donde yo lo entiendo, encuentre un hiperplano similar a la "regresión lineal", divida todas las instancias en dos categorías y use el algoritmo de optimización del descenso de gradiente para minimizar los puntos de clasificación errónea. Cuanto más cerca del hiperplano esté el punto de clasificación errónea, menor será el valor de pérdida .

1.1 Modelo de perceptrón

Modelo de perceptrón
Donde firmar firmars i g n función simbólica, es decir, el
función de signo
modelo de perceptrón puede convertir primerow ∗ x + bw * x + bwX+b se considera un modelo lineal, donde w es el vector de ponderación y b es el sesgo. Luego sustituya el resultado de la salida del modelo lineal en elsigno signoEn la función simbólica si g n , se emite la categoría correspondiente.

1.2 Estrategias de aprendizaje

Función de pérdida : punto mal clasificado al hiperplano ( wx + b = 0 wx + b = 0w x+si=0 ) distancia total.

Entonces, la distancia desde cualquier punto al hiperplano es:

Inserte la descripción de la imagen aquí
Donde ∣ ∣ w ∣ ∣ || w ||w eswww esl 2 l_2l2Norma.

Porque, para el punto de clasificación errónea:

Inserte la descripción de la imagen aquí
Por lo tanto, la distancia desde cualquier punto mal clasificado hasta el hiperplano es:
Inserte la descripción de la imagen aquí
Entonces, la distancia total desde todos los puntos mal clasificados hasta el hiperplano es:

Inserte la descripción de la imagen aquí
Aquí no consideramos 1 ∣ ∣ w ∣ ∣ \ frac {1} {|| w ||}w 1, Entonces obtuvimos la función de pérdida
Inserte la descripción de la imagen aquí
que necesitamos : Por lo tanto, debemos minimizar la función de pérdida y usar el descenso de gradiente para obtener los parámetros óptimos requeridos por el modelo.

2. Modo primitivo de perceptrón

No se hablará mucho de los detalles del descenso del gradiente. Aquí necesitamos minimizar el valor de la función de pérdida del modelo para obtener los parámetros del modelo "w, b". Entonces solo necesitamos obtener la derivada parcial de la fórmula de la función de pérdida, y luego de acuerdo con el descenso del gradiente y lo siguiente El algoritmo encuentra los parámetros óptimos del modelo.
Inserte la descripción de la imagen aquí

2.1 La implementación del algoritmo de modo original

# 感知机算法实现
import numpy as np
import time
# 定义时间装饰器
def timmer(func):
    def wrapper(*args,**kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)
        stop_time = time.time()
        print('Func %s,run time :%s' %(func.__name__,stop_time-start_time))
        return res
    return wrapper

class Perceptron:
    def __init__(self):
        self.weights=None
        self.bias=None

    def sign(self,value):
        return 1 if value>=0 else -1
    @timmer
    def train(self,dataSet,labels,iter=50):
        # 学习率
        lr=0.9
        dataSet = np.array(dataSet)
        n,m = np.shape(dataSet)

        # 初始化参数
        w = np.zeros(m)
        b=0

        # 迭代
        for k in range(iter):
            print("Round{0}:{1}".format(k,iter))
            # 使用随机梯度下降
            for i in range(n):
                if (-labels[i]*self.sign(np.dot(w,dataSet[i])+b)>=0):
                    w=w+lr*labels[i]*dataSet[i]
                    b=b+lr*labels[i]
        self.weights=w
        self.bias=b

    def predict(self, data):
        if (self.weights is not None and self.bias is not None):
            return self.sign(np.dot(self.weights, data) + self.bias)
        else:
            return 0

if __name__ == '__main__':
    data_set = [[3, 3],
                [4, 3],
                [1, 1]]
    labels = [1, 1, -1]

    perceptron = Perceptron()
    perceptron.train(data_set, labels,30)
    print("weights is:", perceptron.weights)
    print("bias is:", perceptron.bias)
    result = perceptron.predict([3, 3])
    print("prediction:", result)

Supongo que te gusta

Origin blog.csdn.net/weixin_41044112/article/details/108513620
Recomendado
Clasificación