Задача : Линия наилучшего соответствия

Задача: Линией наилучшего соответствия называется прямая, проходящая на наименьшем удалении от набора из n точек. В данном упражнении мы предположим, что каждая точка в коллекции обладает координатами x и y. Символы и мы будем использовать для подсчета средних значений по осям x и y соответственно. Линия наилучшего соответствия представлена формулой y = mx + b, где m и b вычисляются по следующим формулам:Формулы

Напишите программу, которая будет запрашивать у пользователя координаты коллекции точек. При этом пользователь должен вводить сначала координату x, а затем y. Ввод координат может продолжаться до тех пор, пока пользователь не оставит пустым ввод координаты x. Отобразите формулу, характеризующую линию наилучшего соответствия, вида y = mx + b путем замены переменных m и b на значения, вычисленные по предыдущим формулам. Например, если пользователь введет три точки (1, 1), (2, 2.1) и (3, 2.9), итоговая формула должна приобрести вид y = 0,95x + 0,1.

При выводе, мой код выдает неверное значение. Не могу разобраться почему. Надеюсь, кто то из пользователей даст ответ.

        def line_of_best_fit(list_x, list_y):
            #Находим Exy - сумму произведений  точек x и y
            Exy = 0
            for x in range(len(list_x)):
                Exy += list_x[x] * list_y[x]
        
            #находим Ex и Ey - сумма значений x и y
            Ex = sum(list_x)
            Ey = sum(list_y)
        
            #находим n
            n = len(list_x)
        
            #находим среднее значение точек x и y
            middle_y = Ey / n
            middle_x = Ex / n
        
            #Находим Ex_squared - сумма квадратов каждого элемента и sum_Ex_squared - сумма всех элементов возведенная в квадрат
            Ex_squared = 0
            for x in range(len(list_x)):
                Ex_squared += list_x[x]**2
        
            sum_Ex_squared = Ex**2
            sum_Ey_squred = Ey**2
            #находим m и b
            m = (Exy - ((Ex * Ey) / n)) / (Ex_squared - (sum_Ex_squared  / n))
            b = middle_y - (m * middle_x)
        
            
            
            return print(f'y = {round(m,2)}x + {round(b,2)}')
        
        def main():
            list_x = []
            list_y = []
            part_x = int(input('Введите значение X: '))
            while part_x != '':
                list_x.append(float(part_x))
                part_y = input('Введите значение Y: ')
                list_y.append(float(part_y))
                part_x = input('Введите значение X: (для выхода введите пустую строку) ')
        
            line_of_best_fit(list_x,list_y)
        
        if __name__ == '__main__':
            main()

Ответы (1 шт):

Автор решения: MBo

Здесь возвели в квадрат

sum_Ex_squared = sum(list_x)**2

А здесь ещё раз

                                                         vvvv
m = (Exy - (Ex * Ey / n)) / (Ex_squared**2 - (sum_Ex_squared**2 / )) 
                                     ^^^^^
                           А это зачем?
→ Ссылка