In [1]:
import numpy as np
import matplotlib.pyplot as plt
In [2]:
x = np.arange(0., 10., 0.2)
m = len(x)
target_data = 2 * x + 5 + np.random.randn(m) #从标准正态分布中返回一个或多个样本值
loop_max = 200 # 循环的次数
epsilon = 1e-3 # 正则化参数?

theta = np.random.randn(2)

alpha = 0.001
count = 0
finish = 0
costs = []
In [6]:
x0 = np.full(m, 1.0) #创建一个由常数填充的数组,第一个参数是数组的形状,第二个参数是数组中填充的常数
input_data = np.vstack([x0, x]).T
In [7]:
for count in range(loop_max):
    cost = 0
    err = 0
    gtheta0 = 0
    gtheta1 = 0
    for i in range(m):
        err = target_data[i] - np.dot(theta,input_data[i])
        cost += err**2
        gtheta0 += -(err) * input_data[i,0]
        gtheta1 += -(err) * input_data[i,1]
    theta[0] += alpha * (-gtheta0)
    theta[1] += alpha * (-gtheta1)
    print('loop count = ',count,'\t theta:',theta,'\t cost:',cost/2)
    costs.append(cost)
#     if np.linalg.norm(theta - error) < epsilon:
#         break
#     else:
#         error = theta
loop count =  0 	 theta: [0.54909476 4.39950514] 	 cost: 5461.633645802776
loop count =  1 	 theta: [0.19683033 1.68378975] 	 cost: 2433.4900476167077
loop count =  2 	 theta: [0.52752938 3.44569093] 	 cost: 1134.5477286620378
loop count =  3 	 theta: [0.41002769 2.27757663] 	 cost: 576.1987377794693
loop count =  4 	 theta: [0.5845891  3.02709107] 	 cost: 335.064801577717
loop count =  5 	 theta: [0.56679139 2.52187312] 	 cost: 229.8304853613327
loop count =  6 	 theta: [0.67366197 2.83795303] 	 cost: 182.84516619584218
loop count =  7 	 theta: [0.69774944 2.61674843] 	 cost: 160.85329452323265
loop count =  8 	 theta: [0.77482766 2.74733024] 	 cost: 149.6117927816864
loop count =  9 	 theta: [0.81605943 2.6478771 ] 	 cost: 143.0198120739934
loop count =  10 	 theta: [0.87959563 2.6991379 ] 	 cost: 138.46348824630107
loop count =  11 	 theta: [0.92739612 2.65194362] 	 cost: 134.82230662438297
loop count =  12 	 theta: [0.98436919 2.66935137] 	 cost: 131.6153157252562
loop count =  13 	 theta: [1.0342287  2.64465239] 	 cost: 128.6354877553649
loop count =  14 	 theta: [1.08764649 2.64767608] 	 cost: 125.79313074763888
loop count =  15 	 theta: [1.13765259 2.6327231 ] 	 cost: 123.04882826191887
loop count =  16 	 theta: [1.18882186 2.62969759] 	 cost: 120.38471978716235
loop count =  17 	 theta: [1.23817391 2.61902786] 	 cost: 117.79220078212056
loop count =  18 	 theta: [1.28767245 2.61351983] 	 cost: 115.26665453477054
loop count =  19 	 theta: [1.33604553 2.60479114] 	 cost: 112.80519545323651
loop count =  20 	 theta: [1.38413848 2.59832534] 	 cost: 110.4057020342342
loop count =  21 	 theta: [1.43141091 2.59053197] 	 cost: 108.06640215779674
loop count =  22 	 theta: [1.47822909 2.58375873] 	 cost: 105.78569493307546
loop count =  23 	 theta: [1.52436581 2.57646736] 	 cost: 103.56207386234328
loop count =  24 	 theta: [1.56998207 2.56966264] 	 cost: 101.39409340861208
loop count =  25 	 theta: [1.61498468 2.56268517] 	 cost: 99.28035416427493
loop count =  26 	 theta: [1.65944664 2.55596463] 	 cost: 97.21949599859484
loop count =  27 	 theta: [1.70333203 2.54921803] 	 cost: 95.2101946347101
loop count =  28 	 theta: [1.74667607 2.54262876] 	 cost: 93.25115970756812
loop count =  29 	 theta: [1.78946728 2.53607505] 	 cost: 91.34113346798425
loop count =  30 	 theta: [1.83172459 2.52963484] 	 cost: 89.47888977502456
loop count =  31 	 theta: [1.87344688 2.52325541] 	 cost: 87.66323322318506
loop count =  32 	 theta: [1.91464602 2.51696956] 	 cost: 85.89299833833955
loop count =  33 	 theta: [1.95532524 2.51075414] 	 cost: 84.16704881390233
loop count =  34 	 theta: [1.99549327 2.50462264] 	 cost: 82.48427677470555
loop count =  35 	 theta: [2.03515512 2.49856461] 	 cost: 80.84360206297974
loop count =  36 	 theta: [2.0743181  2.49258526] 	 cost: 79.2439715437749
loop count =  37 	 theta: [2.11298786 2.48667959] 	 cost: 77.68435842843287
loop count =  38 	 theta: [2.15117103 2.4808493 ] 	 cost: 76.163761615275
loop count =  39 	 theta: [2.18887346 2.47509171] 	 cost: 74.68120504690688
loop count =  40 	 theta: [2.22610138 2.46940705] 	 cost: 73.23573708365392
loop count =  41 	 theta: [2.26286064 2.46379365] 	 cost: 71.82642989269542
loop count =  42 	 theta: [2.29915723 2.45825109] 	 cost: 70.4523788524888
loop count =  43 	 theta: [2.33499691 2.45277819] 	 cost: 69.11270197209824
loop count =  44 	 theta: [2.37038546 2.44737425] 	 cost: 67.80653932505128
loop count =  45 	 theta: [2.40532856 2.44203828] 	 cost: 66.53305249735902
loop count =  46 	 theta: [2.43983181 2.43676951] 	 cost: 65.29142404934575
loop count =  47 	 theta: [2.47390075 2.43156705] 	 cost: 64.08085699094161
loop count =  48 	 theta: [2.50754085 2.42643008] 	 cost: 62.900574270101686
loop count =  49 	 theta: [2.54075749 2.42135776] 	 cost: 61.74981827402346
loop count =  50 	 theta: [2.57355603 2.4163493 ] 	 cost: 60.62785034284207
loop count =  51 	 theta: [2.60594171 2.41140388] 	 cost: 59.533950295490975
loop count =  52 	 theta: [2.63791973 2.40652072] 	 cost: 58.46741596742451
loop count =  53 	 theta: [2.66949523 2.40169902] 	 cost: 57.4275627599046
loop count =  54 	 theta: [2.70067327 2.39693801] 	 cost: 56.41372320056316
loop count =  55 	 theta: [2.73145885 2.39223693] 	 cost: 55.42524651495754
loop count =  56 	 theta: [2.76185692 2.38759503] 	 cost: 54.4614982088443
loop count =  57 	 theta: [2.79187235 2.38301155] 	 cost: 53.52185966090321
loop count =  58 	 theta: [2.82150996 2.37848578] 	 cost: 52.6057277256496
loop count =  59 	 theta: [2.85077451 2.37401697] 	 cost: 51.71251434628105
loop count =  60 	 theta: [2.87967069 2.36960441] 	 cost: 50.84164617720862
loop count =  61 	 theta: [2.90820313 2.36524739] 	 cost: 49.992564216031965
loop count =  62 	 theta: [2.93637642 2.36094522] 	 cost: 49.164723444720316
loop count =  63 	 theta: [2.96419508 2.35669721] 	 cost: 48.35759247977076
loop count =  64 	 theta: [2.99166357 2.35250266] 	 cost: 47.57065323111755
loop count =  65 	 theta: [3.0187863  2.34836091] 	 cost: 46.80340056957517
loop count =  66 	 theta: [3.04556762 2.3442713 ] 	 cost: 46.05534200260018
loop count =  67 	 theta: [3.07201183 2.34023317] 	 cost: 45.32599735816488
loop count =  68 	 theta: [3.09812317 2.33624587] 	 cost: 44.61489847653913
loop count =  69 	 theta: [3.12390584 2.33230875] 	 cost: 43.92158890978296
loop count =  70 	 theta: [3.14936396 2.3284212 ] 	 cost: 43.24562362875669
loop count =  71 	 theta: [3.17450163 2.32458258] 	 cost: 42.586568737460695
loop count =  72 	 theta: [3.19932287 2.32079228] 	 cost: 41.944001194521654
loop count =  73 	 theta: [3.22383168 2.31704969] 	 cost: 41.31750854164597
loop count =  74 	 theta: [3.24803198 2.31335421] 	 cost: 40.70668863886658
loop count =  75 	 theta: [3.27192766 2.30970525] 	 cost: 40.11114940641296
loop count =  76 	 theta: [3.29552255 2.30610222] 	 cost: 39.53050857303863
loop count =  77 	 theta: [3.31882044 2.30254454] 	 cost: 38.964393430644755
loop count =  78 	 theta: [3.34182507 2.29903164] 	 cost: 38.412440595042035
loop count =  79 	 theta: [3.36454012 2.29556297] 	 cost: 37.874295772698005
loop count =  80 	 theta: [3.38696925 2.29213795] 	 cost: 37.34961353331883
loop count =  81 	 theta: [3.40911605 2.28875605] 	 cost: 36.838057088121
loop count =  82 	 theta: [3.43098407 2.28541672] 	 cost: 36.33929807364947
loop count =  83 	 theta: [3.45257683 2.28211942] 	 cost: 35.85301634100436
loop count =  84 	 theta: [3.47389779 2.27886363] 	 cost: 35.37889975034
loop count =  85 	 theta: [3.49495037 2.27564882] 	 cost: 34.9166439705054
loop count =  86 	 theta: [3.51573796 2.27247447] 	 cost: 34.46595228369673
loop count =  87 	 theta: [3.53626387 2.26934008] 	 cost: 34.02653539499688
loop count =  88 	 theta: [3.55653142 2.26624515] 	 cost: 33.59811124667968
loop count =  89 	 theta: [3.57654384 2.26318918] 	 cost: 33.1804048371595
loop count =  90 	 theta: [3.59630436 2.26017167] 	 cost: 32.77314804447044
loop count =  91 	 theta: [3.61581615 2.25719214] 	 cost: 32.376079454160944
loop count =  92 	 theta: [3.63508232 2.25425012] 	 cost: 31.98894419149457
loop count =  93 	 theta: [3.65410599 2.25134514] 	 cost: 31.611493757847967
loop count =  94 	 theta: [3.67289019 2.24847672] 	 cost: 31.243485871201898
loop count =  95 	 theta: [3.69143794 2.2456444 ] 	 cost: 30.884684310622717
loop count =  96 	 theta: [3.70975223 2.24284774] 	 cost: 30.534858764634127
loop count =  97 	 theta: [3.72783598 2.24008628] 	 cost: 30.193784683382457
loop count =  98 	 theta: [3.7456921  2.23735958] 	 cost: 29.861243134500093
loop count =  99 	 theta: [3.76332346 2.2346672 ] 	 cost: 29.537020662574715
loop count =  100 	 theta: [3.78073288 2.23200872] 	 cost: 29.220909152134325
loop count =  101 	 theta: [3.79792316 2.2293837 ] 	 cost: 28.91270569405966
loop count =  102 	 theta: [3.81489706 2.22679172] 	 cost: 28.612212455338796
loop count =  103 	 theta: [3.83165729 2.22423236] 	 cost: 28.319236552079886
loop count =  104 	 theta: [3.84820656 2.22170523] 	 cost: 28.033589925700646
loop count =  105 	 theta: [3.86454751 2.2192099 ] 	 cost: 27.755089222215396
loop count =  106 	 theta: [3.88068277 2.21674598] 	 cost: 27.483555674541673
loop count =  107 	 theta: [3.89661492 2.21431308] 	 cost: 27.218814987751347
loop count =  108 	 theta: [3.91234653 2.2119108 ] 	 cost: 26.96069722719223
loop count =  109 	 theta: [3.92788012 2.20953876] 	 cost: 26.709036709408558
loop count =  110 	 theta: [3.94321817 2.20719658] 	 cost: 26.46367189579035
loop count =  111 	 theta: [3.95836316 2.20488389] 	 cost: 26.22444528888309
loop count =  112 	 theta: [3.97331751 2.2026003 ] 	 cost: 25.99120333129176
loop count =  113 	 theta: [3.98808362 2.20034546] 	 cost: 25.76379630711347
loop count =  114 	 theta: [4.00266386 2.198119  ] 	 cost: 25.5420782458364
loop count =  115 	 theta: [4.01706058 2.19592056] 	 cost: 25.325906828642506
loop count =  116 	 theta: [4.03127607 2.1937498 ] 	 cost: 25.115143297054455
loop count =  117 	 theta: [4.04531262 2.19160637] 	 cost: 24.909652363867707
loop count =  118 	 theta: [4.05917249 2.18948991] 	 cost: 24.70930212631102
loop count =  119 	 theta: [4.0728579 2.1874001] 	 cost: 24.513963981379092
loop count =  120 	 theta: [4.08637104 2.18533659] 	 cost: 24.32351254328362
loop count =  121 	 theta: [4.09971408 2.18329905] 	 cost: 24.137825562969198
loop count =  122 	 theta: [4.11288917 2.18128717] 	 cost: 23.95678384964273
loop count =  123 	 theta: [4.12589842 2.1793006 ] 	 cost: 23.780271194266
loop count =  124 	 theta: [4.13874391 2.17733905] 	 cost: 23.60817429496217
loop count =  125 	 theta: [4.15142771 2.17540218] 	 cost: 23.440382684288238
loop count =  126 	 theta: [4.16395185 2.1734897 ] 	 cost: 23.276788658327025
loop count =  127 	 theta: [4.17631834 2.17160129] 	 cost: 23.117287207553037
loop count =  128 	 theta: [4.18852917 2.16973665] 	 cost: 22.961775949427786
loop count =  129 	 theta: [4.20058629 2.16789548] 	 cost: 22.810155062681286
loop count =  130 	 theta: [4.21249164 2.16607748] 	 cost: 22.662327223237842
loop count =  131 	 theta: [4.22424714 2.16428237] 	 cost: 22.518197541744406
loop count =  132 	 theta: [4.23585466 2.16250986] 	 cost: 22.37767350266216
loop count =  133 	 theta: [4.24731607 2.16075966] 	 cost: 22.240664904881502
loop count =  134 	 theta: [4.25863321 2.15903149] 	 cost: 22.107083803822814
loop count =  135 	 theta: [4.26980789 2.15732507] 	 cost: 21.97684445498556
loop count =  136 	 theta: [4.28084192 2.15564013] 	 cost: 21.84986325890985
loop count =  137 	 theta: [4.29173705 2.1539764 ] 	 cost: 21.726058707514465
loop count =  138 	 theta: [4.30249504 2.15233361] 	 cost: 21.605351331777698
loop count =  139 	 theta: [4.31311761 2.15071151] 	 cost: 21.48766365072694
loop count =  140 	 theta: [4.32360647 2.14910982] 	 cost: 21.372920121704258
loop count =  141 	 theta: [4.3339633  2.14752829] 	 cost: 21.261047091876183
loop count =  142 	 theta: [4.34418977 2.14596667] 	 cost: 21.151972750956904
loop count =  143 	 theta: [4.3542875 2.1444247] 	 cost: 21.04562708511351
loop count =  144 	 theta: [4.36425814 2.14290215] 	 cost: 20.94194183202506
loop count =  145 	 theta: [4.37410326 2.14139876] 	 cost: 20.840850437065463
loop count =  146 	 theta: [4.38382446 2.1399143 ] 	 cost: 20.74228801058268
loop count =  147 	 theta: [4.3934233  2.13844852] 	 cost: 20.64619128624674
loop count =  148 	 theta: [4.4029013  2.13700119] 	 cost: 20.552498580439426
loop count =  149 	 theta: [4.41226001 2.13557208] 	 cost: 20.461149752660425
loop count =  150 	 theta: [4.42150091 2.13416096] 	 cost: 20.372086166923474
loop count =  151 	 theta: [4.43062549 2.1327676 ] 	 cost: 20.28525065411842
loop count =  152 	 theta: [4.43963521 2.13139178] 	 cost: 20.20058747531514
loop count =  153 	 theta: [4.44853152 2.13003328] 	 cost: 20.11804228598489
loop count =  154 	 theta: [4.45731585 2.12869188] 	 cost: 20.037562101117338
loop count =  155 	 theta: [4.46598961 2.12736736] 	 cost: 19.95909526120979
loop count =  156 	 theta: [4.47455419 2.12605952] 	 cost: 19.882591399107415
loop count =  157 	 theta: [4.48301096 2.12476813] 	 cost: 19.808001407673157
loop count =  158 	 theta: [4.49136128 2.12349301] 	 cost: 19.735277408266228
loop count =  159 	 theta: [4.49960648 2.12223393] 	 cost: 19.66437272000918
loop count =  160 	 theta: [4.50774791 2.12099071] 	 cost: 19.59524182982401
loop count =  161 	 theta: [4.51578685 2.11976313] 	 cost: 19.527840363217642
loop count =  162 	 theta: [4.5237246 2.118551 ] 	 cost: 19.46212505579825
loop count =  163 	 theta: [4.53156243 2.11735414] 	 cost: 19.398053725504464
loop count =  164 	 theta: [4.53930161 2.11617233] 	 cost: 19.335585245528925
loop count =  165 	 theta: [4.54694336 2.11500541] 	 cost: 19.274679517919342
loop count =  166 	 theta: [4.55448893 2.11385317] 	 cost: 19.215297447840108
loop count =  167 	 theta: [4.56193952 2.11271544] 	 cost: 19.157400918477578
loop count =  168 	 theta: [4.56929632 2.11159202] 	 cost: 19.100952766573233
loop count =  169 	 theta: [4.57656052 2.11048275] 	 cost: 19.04591675856893
loop count =  170 	 theta: [4.58373328 2.10938745] 	 cost: 18.992257567348993
loop count =  171 	 theta: [4.59081575 2.10830592] 	 cost: 18.939940749563927
loop count =  172 	 theta: [4.59780907 2.10723802] 	 cost: 18.888932723521588
loop count =  173 	 theta: [4.60471436 2.10618355] 	 cost: 18.839200747631498
loop count =  174 	 theta: [4.61153273 2.10514236] 	 cost: 18.790712899388136
loop count =  175 	 theta: [4.61826528 2.10411428] 	 cost: 18.74343805488032
loop count =  176 	 theta: [4.62491307 2.10309913] 	 cost: 18.697345868812963
loop count =  177 	 theta: [4.63147719 2.10209676] 	 cost: 18.652406755028743
loop count =  178 	 theta: [4.63795869 2.10110702] 	 cost: 18.608591867517028
loop count =  179 	 theta: [4.64435859 2.10012972] 	 cost: 18.565873081897827
loop count =  180 	 theta: [4.65067794 2.09916474] 	 cost: 18.52422297736908
loop count =  181 	 theta: [4.65691774 2.09821189] 	 cost: 18.483614819105398
loop count =  182 	 theta: [4.663079   2.09727105] 	 cost: 18.444022541097333
loop count =  183 	 theta: [4.6691627  2.09634204] 	 cost: 18.405420729419728
loop count =  184 	 theta: [4.67516983 2.09542473] 	 cost: 18.36778460591889
loop count =  185 	 theta: [4.68110134 2.09451897] 	 cost: 18.331090012307495
loop count =  186 	 theta: [4.68695818 2.0936246 ] 	 cost: 18.295313394657857
loop count =  187 	 theta: [4.69274131 2.0927415 ] 	 cost: 18.26043178828273
loop count =  188 	 theta: [4.69845163 2.09186951] 	 cost: 18.22642280299446
loop count =  189 	 theta: [4.70409008 2.09100849] 	 cost: 18.193264608733056
loop count =  190 	 theta: [4.70965756 2.09015832] 	 cost: 18.16093592155353
loop count =  191 	 theta: [4.71515495 2.08931885] 	 cost: 18.12941598996398
loop count =  192 	 theta: [4.72058315 2.08848994] 	 cost: 18.09868458160547
loop count =  193 	 theta: [4.72594301 2.08767147] 	 cost: 18.06872197026494
loop count =  194 	 theta: [4.73123541 2.0868633 ] 	 cost: 18.039508923213155
loop count =  195 	 theta: [4.73646119 2.0860653 ] 	 cost: 18.01102668885949
loop count =  196 	 theta: [4.74162119 2.08527735] 	 cost: 17.983256984715336
loop count =  197 	 theta: [4.74671624 2.08449931] 	 cost: 17.95618198565879
loop count =  198 	 theta: [4.75174716 2.08373107] 	 cost: 17.929784312492842
loop count =  199 	 theta: [4.75671475 2.0829725 ] 	 cost: 17.90404702078989
In [8]:
plt.plot(x,target_data,'g*')
plt.plot(x,theta[1] * x + theta[0],'r')
plt.show()
In [9]:
plt.scatter(range(len(costs)), costs) #画散点图
plt.show()