#!/usr/bin/python def load_dataset(): dataset = [] with open('petrol.csv') as f: for line in f: sample = list(map(float, line.split(','))) x, y = sample[:-1], sample[-1] dataset.append((x, y)) return dataset def get_error(dataset, model): errors = [] for x, y in dataset: delta = model(x) - y errors.append(delta * delta) return sum(errors) / len(errors) def make_linear_model(weights): def model(x): y = sum(x[i] * weights[i] for i in range(len(x))) y += weights[-1] return y return model dataset = load_dataset() p = len(dataset[0][0]) parameters = [0 for _ in range(p + 1)] rounds = 1000 * 1000 gamma = 10 ** -8 for i in range(rounds): model = make_linear_model(parameters) gradient = [0 for _ in range(p + 1)] for x, y in dataset: for j in range(p): gradient[j] += 2 * (x[j] * (model(x) - y)) / len(dataset) gradient[-1] += 2 * (model(x) - y) / len(dataset) if i % 10000 == 0 or i < 100: print("Iterace", i, ":") print("Parametry:", parameters) print("Střední kvadratická odchylka:", get_error(dataset, model)) for x, y in dataset[:5]: print(x, model(x), y) print(gradient) print() for i in range(len(gradient)): parameters[i] -= gradient[i] * gamma print("Výsledné parametry:", parameters)