Задать вопрос
  • Почему Python не изменяет переменные в цикле?

    @mupsick
    from random import uniform
    
    data = [
        [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 1],
        [0, 1, 0], [1, 0, 0], [1, 0, 0], [0, 1, 0],
        [0, 0, 1], [0, 0, 1], [0, 1, 0], [1, 0, 0]
    ]
    response = [0, 1, 2, 2, 1, 0, 0, 1, 2, 2, 1, 0]
    
    hardlim = lambda s: 1 if s >= 0 else 0
    
    def net(x: list, w: list, bias: float) -> float:
        return sum(w[i] * x[i] for i in range(len(x))) + bias
    
    def train_perceptron(data: list, target: list, epochs: int = 10, lr: float = 0.1):
        w = [uniform(-1, 1) for _ in range(3)]  
        bias = 0.0
        for _ in range(epochs):
            for i in range(len(data)):
                res = hardlim(net(data[i], w, bias))
                err = target[i] - res
                w = [w[j] + (lr * err * data[i][j]) for j in range(len(w))]
                bias += lr * err
        return w, bias
    
    perceptrons = []
    for class_label in [0, 1, 2]:   
        binary_target = [1 if y == class_label else 0 for y in response]
        w, bias = train_perceptron(data, binary_target, epochs=10, lr=0.1)
        perceptrons.append((w, bias))
    
    print("Trained perceptrons:")
    for i, (w, bias) in enumerate(perceptrons):
        print(f"Class {i}: Weights = {w}, Bias = {bias}")
    Написано