Python, странное значение при попытке вычисления ошибки линейной регрессии

Я новичок в python, и мне поручено создать собственный алгоритм для решения линейной регрессии без использования какого-либо импорта. Проблема в том, что, когда я пытаюсь выполнить мою программу для вычисления ошибки, она дает странное значение (я сравниваю его с расчетом от microsoft excel). Вот моя программа:

x=[1.,1.,2.,2.,2.,2.,2.,2.,2.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,3.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,4.,5.,5.,5.,5.,5.,5.,5.,5.,6.] y=[67.,62.,109.,83.,91.,88.,123.,100.,109.,137.,131.,122.,122.,118.,115.,131.,143.,142.,122.,140.,150.,140.,150,150.,140.,150.,130.,130.,138.,135.,146.,146.,145.,145.,144.,140.,150.,152.,157.,155.,153.,154.,158.,162.,161.,162.,165.,171.,162.,169.,167.,150.,170.,140.,140.,150.,150.,150.,160.,150.,150.,150.,150.,140.,160.,170.,160.,160.,170.,171.,188.,170.,150.,150.,160.,160.,180.,170.] sumx = 0 sumxdoubled = 0 sumxsquare = 0 sumxy = 0 meanx = 0 sumy = 0 sumerror = 0 n= 78 for i in range(78): sumxy = sumxy + (x[i] * y[i]) print("Total (xy) : ",sumxy) for i in range(78): sumx = sumx + x[i] print("Total x : ",sumx) for i in range(78): sumxsquare = sumxsquare + (x[i] ** 2) print("Total (x^2) : ",sumxsquare) sumxdoubled = sumx ** 2 print("(Total x)^2 : ",sumxdoubled) meanx = sumx / n print("Average x : ",meanx) for i in range(78): sumy = sumy + y[i] print("Total y : ",sumy) meany = sumy / n print("Average y : ",meany) a1 = ((n*sumxy) - (sumx * sumy)) / ((n*sumxsquare) - sumxdoubled) print("a1 = ",a1) a0 = meany - a1 * meanx print("a0 = ",a0) for i in range (78): sumerror = sumerror + (y[i] - a0 - (a1 * x[i])) print("Total error = ",sumerror) 

И выход:

 Total (xy) : 42117.0 Total x : 283.0 Total (x^2) : 1093.0 (Total x)^2 : 80089.0 Average x : 3.628205128205128 Total y : 11201.0 Average y : 143.60256410256412 a1 = 22.312294288480153 a0 = 62.64898354307843 Total error = -7.673861546209082e-13 

Значение ошибки, когда я пытаюсь использовать те же данные с microsoft excel, равно -14.25

Почему python дает значение, которое даже не близко к значению excel -14.25 ? Я не мог догадаться, что случилось с программой, потому что я уверен, что использую правильный алгоритм для вычисления ошибки.

Ваша проблема связана не с python, а с вашей математикой. Когда вы вычисляете свою ошибку, сначала вы должны добавить скобки, чтобы убедиться, что вы делаете правильный расчет:

 sumerror = sumerror + (y[i] - a0 - (a1 * x[i])) # <-- missing brackets sumerror = sumerror + (y[i] - (a0 - (a1 * x[i]))) 

Но тогда вы еще не закончили, вам нужно разделить этот результат на n, а затем взять квадратный корень.

 >>> sumerror = (sumerror / n)**0.5 >>> print("Total error = ",sumerror) Total error = 12.724274483009689 

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

 for i in range(78): sumxy = sumxy + (x[i] * y[i]) 

Плохо, вы строго кодировали длину ваших списков, которые вам нужно обновлять каждый раз, когда вы используете новые списки. Существует встроенная функция len (), которая получит это для вас. В этом случае это даже не нужно, но вы можете просто использовать sum () и немного более продвинутый zip для объединения списков вместе.

 # zip(x, y) returns an iterator like [(x0, y0), (x1, y1), ..., (xn, yn)] >>> sumxy = sum(x*y for x, y in zip(x, y)) >>> print("Total (xy) : ",sumxy) Total (xy) : 42117.0 
Interesting Posts

VBA для поиска определенной колонки в Excel

Выберите все столбцы combobox

Компонент или блок с открытым исходным кодом для экспорта Delphi TDataSet в собственный XLS без установленного Excel

Несколько макросов Excel работают в одном VBScript

Запрос обновления SQL для добавления данных Excel в Access

Функция Excel назначает определенное значение определенным атрибутам, не игнорируя пустые ячейки

Скопируйте и вставьте в следующую пустую строку и столбец соответственно

TypeError: объект 'set' не поддерживает индексирование в excel

вставьте строки, если они еще не существуют в листе excel, используя c #

Delphi и Excel – использование автозаполнения

В Excel, как бы я разделил сумму и имел одну ячейку с другим процентом

Корреляционная статистика

R, XLConnect: настройка цвета с кодом RGB

Excel замораживается после закрытия книги в Macro

Excel Microsoft 2007 предотвращает автоматическое преобразование текста в дату

Давайте будем гением компьютера.