Линейная регрессия

Последнее сообщение
PetroleumEng 331 7
Окт 22

Не могу понять почему не работает Gradient Descend для линейного уравнения типа

у = а + b*х1+c*x2....

В python рассчитывает линейную регрессию, но результат совсем не удовлетворяет.

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

У меня подозрения что мое уравнение нелинейное поэтому так происходит. Как проверить что уравнение соответствует линейности?

Или в чем может быть ошибка?

Myp3uJIKA 236 16
Окт 22 #1

Можно встречный вопрос, что вы ищете?

Петя Ботев 1116 12
Окт 22 #2

Myp3uJIKA пишет:

Можно встречный вопрос, что вы ищете?

судя по всему человек балуется новодным направленим - машинное обучение, и выборка явно не маленькая,  и ну надо же - это черный ящик не работает, как ожидалось, и концов не найти. Ну бывает и так)))   с высоты своего чайничного уровня, могу только посоветовать перепроверить входные данные,  и удалить выбросы для начала. Ну вдргу поможет

PetroleumEng 331 7
Окт 22 #3

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

Петя Ботев 1116 12
Окт 22 #4

PetroleumEng пишет:

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

ну выкладывай статью. Попробуем попробовать и сравним)   

kealon 138 15
Окт 22 #5

PetroleumEng, для линейного уравнения множественные итерации не нужны

 

viv1981 98 15
Окт 22 #6

kealon пишет:

PetroleumEng, для линейного уравнения множественные итерации не нужны

 

Для поиска минимума loss function и нахождения весов (коэффициентов) методом градиентого спуска нужны.

kealon 138 15
Окт 22 #7

viv1981 пишет:

kealon пишет:

PetroleumEng, для линейного уравнения множественные итерации не нужны

 

Для поиска минимума loss function и нахождения весов (коэффициентов) методом градиентого спуска нужны.

а зачем тут метод градиентного спуска? если выводится простая линейная формула

viv1981 98 15
Окт 22 #8

[/quote]

а зачем тут метод градиентного спуска? если выводится простая линейная формула

[/quote]

веса (коэффициенты) перед х1, х2...x_n вы каким образом найдете?
Можно конечно все загнать в scikit-learn или другую библиотеку не углубляясь в тонкости, но мы же не знаем, что автор там считает.

PetroleumEng 331 7
Окт 22 #9

Спасибо за комментарии. Пробовал оба способа. Метод градиентного спуска пробовал для того чтобы конкретно проследить весь процесс сходимости. 

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

Просто по ссылке https://www.statisticssolutions.com/free-resources/directory-of-statistical-analyses/assumptions-of-multiple-linear-regression/

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

kealon 138 15
Окт 22 #10

ох странные люди, для начала надо разобраться что считаем то

вот у вас линейное уравнение относительно параметров

у = а0 + a1*х1+a2*x2....

есть группа значений [(yi, x1i, x2i ..)]

Судя по тому, что вы пытаете метод градиентного спуска, вы мытаетесь применить "Метод Наименьших Квадратов", т.е. минимизировать оценочную функцию

 F(a0, a1, a2 ...) = Σ[ (а0 + a1*х1i+a2*x2i +.... - уi)^2]

Что бы функция имела минимальное значение частный производные по параметрам должны быть равны 0, т.е. нужно решить систему

{ ∂ F(a0, a1, a2 ...) / ∂ aj  = 0 }

она линейная: (считаем, что x0i, которого нет = 1)

∂ F(a0, a1, a2 ...) / ∂ aj = Σ[ 2 * xji * (а0 + a1*х1i+a2*x2i +.... - уi)] = 0

или 

{Σ[ xji * (а0 + a1*х1i+a2*x2i +.... - уi)] = 0}

{Σ[ xji * (а0 + a1*х1i+a2*x2i +....)] = Σ[ xji * уi)]}

что по сути: найти решение для матричного уравнения

M * a = b

что бы оно имело решение, из курса ЛА: "определитель M не должен быть равен 0"

 

На вики всё расписано

 

ingwarsmith 11 7
Окт 22 #11

помимо верных комментариев выше - еще 1 вопрос: в многомерной регрессии переменные xi ~ {x1, x2, ..., xn} должны быть независимы друг от друга (если есть попарно-зависимые xi, то нужно оставить одну переменную из каждой такой пары в уравнении регрессии) - вы проверяли наличие связей (корреляции) между отдельными xi ?

PetroleumEng 331 7
Окт 22 #12

Входные переменные xi~{x1, х2, ..., xn} есть результат использования независимых функций где говориться что они соответствуют линейности в том числе что они не зависимы друг от друга. Данные не реальные а симулированные.

viv1981 98 15
Окт 22 #13

kealon пишет:

ох странные люди, для начала надо разобраться что считаем то...

 

 

ТС четко пишет, что хочет использовать градиентный спуск, а это процесс итеративный. То, что вы предлагаете это аналитическое решение. В данном случае, работает точнее и быстрее, но работать будет не всегда. Например, попробуйте найти аналитическое решение для линейной регрессии с L1 регуляризацией (LASSO). 

kealon 138 15
Окт 22 #14

ТС вообще заморачиваться не хочет. Судя по всему, ему: что-то вставить, что-то получить.

Оно работает всегда, если оно "не работает" - значит данные не соответствуют действительности и считать бессмысленно 

Как, например, в ситуации с зависимыми переменными определитель будет 0.

PS: Для гладких функций естественно

PetroleumEng 331 7
Окт 22 #15

kealon пишет:

ТС вообще заморачиваться не хочет. Судя по всему, ему: что-то вставить, что-то получить.

Оно работает всегда, если оно "не работает" - значит данные не соответствуют действительности и считать бессмысленно 

Как, например, в ситуации с зависимыми переменными определитель будет 0.

PS: Для гладких функций естественно

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

kealon 138 15
Окт 22 #16

PetroleumEng пишет:

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

скинь табличку просто, здесь же предсказателей нет

PetroleumEng 331 7
Окт 22 #17

Данные под катом

kealon пишет:

PetroleumEng пишет:

y x1 x2 x3 x4
-0.35978 60 -175.249 -4199.93 -50000
-0.7192 60 -157.187 -4199.86 -25000
-1.07831 60 -146.622 -4199.78 -16666.7
-1.43717 60 -139.126 -4199.71 -12500
-1.79574 60 -133.311 -4199.64 -10000
-2.15403 60 -128.56 -4199.57 -8333.33
-2.51217 60 -124.543 -4199.5 -7142.86
-2.86996 60 -121.064 -4199.42 -6250
-3.22754 60 -117.995 -4199.35 -5555.56
-3.61997 60 -114.995 -4199.27 -4951.39
-4.05993 60 -111.995 -4199.18 -4412.93
-4.55319 60 -108.995 -4199.08 -3933.03
-5.1061 60 -105.995 -4198.97 -3505.32
-5.72588 60 -102.995 -4198.85 -3124.12
-6.42048 60 -99.9946 -4198.71 -2784.37
-7.1989 60 -96.9946 -4198.55 -2481.58
-8.07109 60 -93.9946 -4198.37 -2211.71
-9.04825 60 -90.9946 -4198.17 -1971.19
-10.1428 60 -87.9946 -4197.95 -1756.82
-11.3687 60 -84.9946 -4197.7 -1565.77
-12.7413 60 -81.9946 -4197.42 -1395.49
-14.278 60 -78.9946 -4197.11 -1243.73
-15.9979 60 -75.9946 -4196.75 -1108.48
-17.9223 60 -72.9946 -4196.36 -987.933
-20.075 60 -69.9946 -4195.91 -880.496
-22.4823 60 -66.9946 -4195.41 -784.743
-25.1732 60 -63.9946 -4194.85 -699.403
-28.18 60 -60.9946 -4194.22 -623.344
-31.5384 60 -57.9946 -4193.52 -555.556
-35.2875 60 -54.9946 -4192.73 -495.139
-39.4707 60 -51.9946 -4191.84 -441.293
-44.1353 60 -48.9946 -4190.85 -393.303
-49.3333 60 -45.9946 -4189.73 -350.532
-55.1215 60 -42.9946 -4188.48 -312.412
-61.5617 60 -39.9946 -4187.07 -278.437
-68.7206 60 -36.9946 -4185.49 -248.158
-76.671 60 -33.9946 -4183.72 -221.171
-85.4901 60 -30.9946 -4181.74 -197.119
-95.2616 60 -27.9946 -4179.51 -175.682
-106.073 60 -24.9946 -4177.01 -156.577
-118.018 60 -21.9946 -4174.2 -139.549
-131.192 60 -18.9946 -4171.05 -124.373
-145.698 60 -15.9946 -4167.52 -110.848
-161.635 60 -12.9946 -4163.56 -98.7933
-179.108 60 -9.99457 -4159.11 -88.0496
-198.216 60 -6.99457 -4154.13 -78.4743
-219.057 60 -3.99457 -4148.53 -69.9403
-241.717 60 -0.99457 -4142.25 -62.3344
-266.276 60 2.005425 -4135.2 -55.5556
-292.792 60 5.005425 -4127.29 -49.5139
-321.309 60 8.005425 -4118.42 -44.1293
-351.836 60 11.00543 -4108.47 -39.3303
-384.356 60 14.00543 -4097.3 -35.0532
-418.807 60 17.00543 -4084.77 -31.2412
-455.087 60 20.00543 -4070.71 -27.8437
-493.041 60 23.00543 -4054.93 -24.8158
-532.458 60 26.00543 -4037.23 -22.1171
-573.081 60 29.00543 -4017.37 -19.7119
-614.584 60 32.00543 -3995.08 -17.5682
-656.613 60 35.00543 -3970.08 -15.6577
-698.752 60 38.00543 -3942.03 -13.9549
-740.587 60 41.00543 -3910.55 -12.4373
-781.667 60 44.00543 -3875.23 -11.0848
-818.171 60 46.7447 -3839.23 -9.97868
-850.116 60 49.22321 -3803.23 -9.07328
-878.184 60 51.48631 -3767.23 -8.31852
-903.018 60 53.56848 -3731.23 -7.67968
-925.055 60 55.4965 -3695.23 -7.13197
-944.697 60 57.29165 -3659.23 -6.65718
-962.322 60 58.97105 -3623.23 -6.24166
-978.202 60 60.54875 -3587.23 -5.87497
-992.512 60 62.03634 -3551.23 -5.54897
-1005.51 60 63.44358 -3515.23 -5.25724
-1017.36 60 64.7787 -3479.23 -4.99466
-1028.21 60 66.04874 -3443.23 -4.75706
-1038.16 60 67.25974 -3407.23 -4.54104
-1047.32 60 68.41695 -3371.23 -4.34379
-1055.78 60 69.52494 -3335.23 -4.16296
-1063.64 60 70.58774 -3299.23 -3.99658
-1070.94 60 71.60888 -3263.23 -3.843
-1077.76 60 72.59152 -3227.23 -3.70077
-1084.13 60 73.53844 -3191.23 -3.5687
-1090.11 60 74.45215 -3155.23 -3.44574
-1095.73 60 75.33491 -3119.23 -3.33096
-1101.02 60 76.18873 -3083.23 -3.22358
-1106.03 60 77.01547 -3047.23 -3.12291
-1110.77 60 77.81678 -3011.23 -3.02834
-1115.27 60 78.59418 -2975.23 -2.93933
-1119.54 60 79.34906 -2939.23 -2.8554
-1123.62 60 80.08269 -2903.23 -2.77613
-1127.51 60 80.79622 -2867.23 -2.70114
-1131.22 60 81.49074 -2831.23 -2.6301
-1134.78 60 82.16723 -2795.23 -2.5627
-1138.19 60 82.82659 -2759.23 -2.49867
-1141.47 60 83.46968 -2723.23 -2.43775
-1144.61 60 84.09729 -2687.23 -2.37974
-1147.65 60 84.71013 -2651.23 -2.32443
-1150.58 60 85.30889 -2615.23 -2.27162
-1153.4 60 85.8942 -2579.23 -2.22117
-1156.14 60 86.46665 -2543.23 -2.1729
-1158.78 60 87.02679 -2507.23 -2.12669
-1161.34 60 87.57515 -2471.23 -2.08241
-1163.82 60 88.1122 -2435.23 -2.03993
-1166.22 60 88.63841 -2399.23 -1.99915
-1168.56 60 89.1542 -2363.23 -1.95996
-1170.82 60 89.65998 -2327.23 -1.92229
-1173.03 60 90.15613 -2291.23 -1.88603
-1175.18 60 90.64301 -2255.23 -1.85112
-1177.28 60 91.12096 -2219.23 -1.81748
-1179.32 60 91.5903 -2183.23 -1.78503
-1181.32 60 92.05133 -2147.23 -1.75373
-1183.26 60 92.50435 -2111.23 -1.7235
-1185.16 60 92.94963 -2075.23 -1.6943
-1187.02 60 93.38743 -2039.23 -1.66607
-1188.84 60 93.81799 -2003.23 -1.63877
-1190.61 60 94.24156 -1967.23 -1.61235
-1192.35 60 94.65835 -1931.23 -1.58676
-1194.05 60 95.06857 -1895.23 -1.56198
-1195.71 60 95.47244 -1859.23 -1.53796
-1197.35 60 95.87015 -1823.23 -1.51466
-1198.95 60 96.26187 -1787.23 -1.49206
-1200.52 60 96.6478 -1751.23 -1.47013
-1202.06 60 97.02809 -1715.23 -1.44883
-1203.58 60 97.40291 -1679.23 -1.42814
-1205.07 60 97.77242 -1643.23 -1.40803
-1206.53 60 98.13676 -1607.23 -1.38848
-1207.96 60 98.49607 -1571.23 -1.36946
-1209.38 60 98.8505 -1535.23 -1.35096
-1210.76 60 99.20017 -1499.23 -1.33295
-1212.13 60 99.54522 -1463.23 -1.31542
-1213.47 60 99.88575 -1427.23 -1.29834
-1214.79 60 100.2219 -1391.23 -1.2817
-1216.09 60 100.5537 -1355.23 -1.26548
-1217.37 60 100.8814 -1319.23 -1.24967
-1218.64 60 101.2051 -1283.23 -1.23424
-1219.88 60 101.5247 -1247.23 -1.21919
-1221.1 60 101.8405 -1211.23 -1.20451
-1221.29 60 101.8894 -1205.62 -1.20225
-1221.48 0 101.9382 -4200 -1.2
-1221.12 0 277.188 -4200 49998.8
-1220.77 0 259.1268 -4200 24998.8
-1220.41 0 248.5619 -4200 16665.47
-1220.05 0 241.0662 -4200 12498.8
-1219.7 0 235.2523 -4200 9998.8
-1219.34 0 230.502 -4200 8332.134
-1218.99 0 226.4858 -4200 7141.657
-1218.63 0 223.0069 -4200 6248.8
-1218.27 0 219.9384 -4200 5554.356
-1217.88 0 216.9391 -4200 4950.194
-1217.45 0 213.9399 -4200 4411.735
-1216.96 0 210.9407 -4200 3931.833
-1216.41 0 207.9417 -4200 3504.119
-1215.79 0 204.9428 -4200 3122.919
-1215.1 0 201.944 -4200 2783.174
-1214.33 0 198.9454 -4200 2480.376
-1213.46 0 195.9469 -4200 2210.507
-1212.49 0 192.9486 -4200 1969.986
-1211.41 0 189.9506 -4200 1755.622
-1210.19 0 186.9527 -4200 1564.569
-1208.83 0 183.9552 -4200 1394.293
-1207.3 0 180.9579 -4200 1242.535
-1205.59 0 177.961 -4200 1107.28
-1203.68 0 174.9644 -4200 986.7345
-1201.54 0 171.9683 -4200 879.2979
-1199.15 0 168.9726 -4200 783.5449
-1196.48 0 165.9774 -4200 698.2051
-1193.49 0 162.9829 -4200 622.1459
-1190.16 0 159.989 -4200 554.3581
-1186.44 0 156.9959 -4200 493.9423
-1182.28 0 154.0035 -4200 440.0967
-1177.65 0 151.0122 -4200 392.1069
-1172.49 0 148.0218 -4200 349.336
-1166.75 0 145.0327 -4200 311.2164
-1160.35 0 142.0448 -4200 277.2425
-1153.25 0 139.0585 -4200 246.9633
-1145.35 0 136.0738 -4200 219.9771
-1136.6 0 133.0909 -4200 195.9258
-1126.9 0 130.1102 -4200 174.4902
-1116.18 0 127.1317 -4200 155.386
-1104.32 0 124.1559 -4200 138.3595
-1091.26 0 121.183 -4200 123.1849
-1076.87 0 118.2134 -4200 109.6608
-1061.06 0 115.2474 -4200 97.6077
-1043.74 0 112.2855 -4200 86.86576
-1024.79 0 109.3282 -4200 77.29238
-1004.14 0 106.3761 -4200 68.76054
-981.682 0 103.4296 -4200 61.15702
-957.354 0 100.4896 -4200 54.38093
-931.096 0 97.55677 -4200 48.34234
-902.869 0 94.63189 -4200 42.96111
-872.666 0 91.71593 -4200 38.16585
-840.508 0 88.8099 -4200 33.89291
-806.461 0 85.91493 -4200 30.08557
-770.632 0 83.03227 -4200 26.69332
-733.181 0 80.16331 -4200 23.67111
-694.325 0 77.30956 -4200 20.97882
-654.327 0 74.47268 -4200 18.58072
-613.52 0 71.6545 -4200 16.44493
-572.265 0 68.857 -4200 14.5431
-530.986 0 66.08235 -4200 12.84994
-490.106 0 63.3329 -4200 11.34293
-450.084 0 60.61119 -4200 10.00201
-414.646 0 58.15255 -4200 8.907492
-383.753 0 55.95168 -4200 8.013451
-356.723 0 53.96329 -4200 7.269803
-332.916 0 52.15297 -4200 6.641851
-311.893 0 50.49399 -4200 6.104799
-293.252 0 48.96514 -4200 5.640454
-276.618 0 47.54933 -4200 5.235169
-261.717 0 46.23259 -4200 4.878502
-248.374 0 45.00337 -4200 4.562334
-236.333 0 43.85196 -4200 4.28025
-225.424 0 42.77019 -4200 4.027121

 

скинь табличку просто, здесь же предсказателей нет

kealon 138 15
Окт 22 #18

Проблема здесь не в методе, вот табличка с решением

ddddd.png

то, что красным, и правее - это проверка

Красная должна быть единичной матрицей, как видим это не так. Да и при расчёте матрицы A не факт, что эксель не напортачил.

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

PetroleumEng 331 7
Окт 22 #19

kealon пишет:

Проблема здесь не в методе, вот табличка с решением

ddddd.png

то, что красным, и правее - это проверка

Красная должна быть единичной матрицей, как видим это не так. Да и при расчёте матрицы A не факт, что эксель не напортачил.

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

Не стал бы доверять эксель в точности расчетов. Хотя матрица почти единичная, если округлить.

В статье был добавлен шум в 5% и сказано что метод устойчив к шумам.

Stroncz 1116 17
Окт 22 #20

PetroleumEng пишет:
 В статье был добавлен шум в 5% и сказано что метод устойчив к шумам.

а где ссылка на саму статью? 

Петя Ботев 1116 12
Окт 22 #21

Stroncz пишет:

PetroleumEng пишет:
 В статье был добавлен шум в 5% и сказано что метод устойчив к шумам.

а где ссылка на саму статью? 

если я ничего не напутал то вот:

Просто по ссылке https://www.statisticssolutions.com/free-resources/directory-of-statistical-analyses/assumptions-of-multiple-linear-regression/

PetroleumEng 331 7
Мар 23 #22

Так для информации. Выяснил почему метод градиентного спуска не работал как ожидал. Оказывается шаг обучения был слишком высоким. Задавал примерно как 0,5 а алгоритм работал правильно с шагом примерно 0,0005.

Go to top