Ukuxazulula isibalo sokuhlehla komugqa okulula

I-athikili idingida izindlela ezimbalwa zokunquma isibalo sezibalo somugqa wokuhlehla olula (obhanqiwe).

Zonke izindlela zokuxazulula isibalo okuxoxwe ngaso lapha zisekelwe endleleni yezikwele ezincane. Ake sibonise izindlela ezilandelayo:

  • Isixazululo sokuhlaziya
  • Ukwehla kweGradient
  • Ukwehla kwe-Stochastic gradient

Ngendlela ngayinye yokuxazulula i-equation yomugqa oqondile, i-athikili ihlinzeka ngemisebenzi ehlukahlukene, ehlukaniswe ikakhulukazi leyo ebhaliwe ngaphandle kokusebenzisa umtapo wezincwadi. I-NumPy nalabo abasebenzisa izibalo I-NumPy. Kukholelwa ukuthi ukusetshenziswa okunekhono I-NumPy izokwehlisa izindleko zekhompyutha.

Yonke ikhodi enikezwe esihlokweni ibhalwe ngolimi i-python 2.7 usebenzisa Incwadi kaJupyter. Ikhodi yomthombo nefayela elinesampula yedatha kuthunyelwa kuyo Github

Lesi sihloko sihloselwe kakhulu kokubili abaqalayo nalabo asebevele baqala kancane kancane ukufunda isifundo sesigaba esibanzi kakhulu kubuhlakani bokufakelwa - ukufunda ngomshini.

Ukuze sicacise indaba, sisebenzisa isibonelo esilula kakhulu.

Izimo zesibonelo

Sinamanani amahlanu abonisa ukuncika Y kusukela X (Ithebula No. 1):

Ithebula No. 1 β€œIzimo zesibonelo”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Sizocabanga ukuthi amanani Ukuxazulula isibalo sokuhlehla komugqa okulula yinyanga yonyaka, futhi Ukuxazulula isibalo sokuhlehla komugqa okulula - imali engenayo kule nyanga. Ngamanye amazwi, imali engenayo incike enyangeni yonyaka, futhi Ukuxazulula isibalo sokuhlehla komugqa okulula - uphawu kuphela imali engenayo encike kulo.

Isibonelo sinjalo, kokubili ngokombono wokuncika okunemibandela kwemali engenayo enyangeni yonyaka, futhi ngokombono wenombolo yamanani - kukhona ambalwa kakhulu awo. Kodwa-ke, ukwenza lula okunjalo kuzokwenza kube lula, njengoba besho, ukuchaza, hhayi kalula, ukwaziswa abaqalayo abakutholayo. Futhi nokulula kwezinombolo kuzovumela labo abafisa ukuxazulula isibonelo ephepheni ngaphandle kwezindleko ezibalulekile zomsebenzi.

Ake sicabange ukuthi ukuncika okunikezwe esibonelweni kungalinganiselwa kahle ngezibalo zezibalo zomugqa wokuhlehla olula (obhanqiwe) wefomu:

Ukuxazulula isibalo sokuhlehla komugqa okulula

kuphi Ukuxazulula isibalo sokuhlehla komugqa okulula inyanga okwatholwa ngayo imali engenayo, Ukuxazulula isibalo sokuhlehla komugqa okulula - imali engenayo ehambisana nenyanga, Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula ama-coefficients okwehla komugqa olinganiselwe.

Qaphela ukuthi i-coefficient Ukuxazulula isibalo sokuhlehla komugqa okulula ngokuvamile ebizwa ngokuthi umthambeka noma ukuthambeka komugqa olinganiselwe; imele inani i Ukuxazulula isibalo sokuhlehla komugqa okulula uma ishintsha Ukuxazulula isibalo sokuhlehla komugqa okulula.

Ngokusobala, umsebenzi wethu esibonelweni ukukhetha ama-coefficient anjalo ku-equation Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula, lapho ukuchezuka kwamanani ethu emali engenayo abaliwe ngenyanga kusuka ezimpendulweni zangempela, i.e. amanani ethulwa kusampula azoba mancane.

Indlela yesikwele encane

Ngokwendlela yezikwele ezincane, ukuchezuka kufanele kubalwe ngokusikwela. Le nqubo ikuvumela ukuthi ugweme ukwesulwa okufanayo kokuphambuka uma kunezimpawu eziphambene. Isibonelo, uma kwesinye isimo, ukuchezuka +5 (kanye nesihlanu), kanti kwenye -5 (khipha okuhlanu), bese isamba sokuchezuka sizokhansela ngaphandle futhi sibe ngu-0 (ziro). Kungenzeka ukuthi ungasikwele ukuchezuka, kodwa ukusebenzisa indawo yemoduli bese konke ukuchezuka kuzoba kuhle futhi kuzonqwabelana. Ngeke sigxile kuleli phuzu ngokuningiliziwe, kodwa simane sibonise ukuthi ukuze kube lula ukubala, kuwumkhuba ukufaka isikwele ukuphambuka.

Lena yindlela ifomula ebukeka ngayo esizonquma ngayo isamba esincane sokuchezuka okuyisikwele (amaphutha):

Ukuxazulula isibalo sokuhlehla komugqa okulula

kuphi Ukuxazulula isibalo sokuhlehla komugqa okulula kuwumsebenzi wokulinganisa izimpendulo zangempela (okungukuthi, imali engenayo esiyibalile),

Ukuxazulula isibalo sokuhlehla komugqa okulula yizimpendulo eziyiqiniso (imali engenayo inikezwe kusampula),

Ukuxazulula isibalo sokuhlehla komugqa okulula inkomba yesampula (inombolo yenyanga lapho kunqunywa khona ukuchezuka)

Masihlukanise umsebenzi, sichaze izilinganiso zokuhlukanisa ingxenye, futhi silungele ukudlulela kusixazululo sokuhlaziya. Kodwa okokuqala, ake sithathe uhambo olufushane mayelana nokuthi kuyini ukuhlukaniswa futhi sikhumbule incazelo yejometri yokuphuma kokunye.

Umehluko

Umehluko umsebenzi wokuthola okuphuma kokunye komsebenzi.

I-derivative isetshenziselwa ini? Okuphuma kokunye komsebenzi kubonakalisa izinga lokushintsha komsebenzi futhi kusitshela indlela yawo. Uma okuphuma kokunye endaweni ethile kuyiphozithivu, khona-ke umsebenzi uyakhula; ngaphandle kwalokho, umsebenzi uyancipha. Futhi uma likhulu inani lokuphuma kokunye okuphelele, izinga lokushintsha lamanani omsebenzi liyaphakama, kanye nokukhuphuka komthambeka wegrafu yomsebenzi.

Isibonelo, ngaphansi kwemibandela yesistimu yokuxhumanisa i-Cartesian, inani lokuphuma kokunye endaweni engu-M(0,0) lilingana no- + 25 kusho ukuthi endaweni ethile, lapho inani ligudluzwa Ukuxazulula isibalo sokuhlehla komugqa okulula kwesokudla ngeyunithi evamile, inani Ukuxazulula isibalo sokuhlehla komugqa okulula inyuka ngamayunithi angama-25 ajwayelekile. Kugrafu kubukeka sengathi amanani akhuphuka kancane Ukuxazulula isibalo sokuhlehla komugqa okulula kusuka endaweni ethile.

Esinye isibonelo. Inani lokuphuma kokunye liyalingana -0,1 kusho ukuthi uma esuswa Ukuxazulula isibalo sokuhlehla komugqa okulula ngeyunithi eyodwa evamile, inani Ukuxazulula isibalo sokuhlehla komugqa okulula yehla ngo-0,1 kuphela iyunithi evamile. Ngesikhathi esifanayo, kugrafu yomsebenzi, singakwazi ukubona umthambeka owehlayo ongabonakali kahle. Ukudweba isifaniso nentaba, kunjengokungathi sehla kancane kancane emthambekeni omnene usuka entabeni, ngokungafani nesibonelo sangaphambilini, lapho kudingeke khona ukugibela iziqongo eziphakeme kakhulu :)

Ngakho, ngemva kokuhlukanisa umsebenzi Ukuxazulula isibalo sokuhlehla komugqa okulula ngamaphutha Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula, sichaza izilinganiso ezihlukanisayo ze-oda loku-1. Ngemuva kokunquma izilinganiso, sizothola uhlelo lwezibalo ezimbili, ngokuxazulula esizokwazi ukukhetha amanani anjalo wama-coefficients. Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula, lapho amanani okuphuma kokunye okuhambisanayo emaphuzwini athile ashintsha khona ngenani elincane kakhulu, futhi esimweni sesixazululo sokuhlaziya awashintshi nhlobo. Ngamanye amazwi, umsebenzi wephutha kuma-coefficients atholiwe uzofinyelela ubuncane, njengoba amanani okuphuma okuyingxenye kulawa maphuzu azolingana noziro.

Ngakho-ke, ngokwemithetho yokuhlukanisa, i-equation eyingxenye ye-oda loku-1 ngokuphathelene ne-coefficient. Ukuxazulula isibalo sokuhlehla komugqa okulula izothatha ifomu:

Ukuxazulula isibalo sokuhlehla komugqa okulula

I-oda loku-1 i-equation yengxenye ephuma kokunye ngokuphathelene nokuthi Ukuxazulula isibalo sokuhlehla komugqa okulula izothatha ifomu:

Ukuxazulula isibalo sokuhlehla komugqa okulula

Ngenxa yalokho, sithole isistimu yezibalo enesixazululo sokuhlaziya esilula:

qala{equation*}
qala{cases}
na + bsumlimits_{i=1}^nx_i β€” sumlimits_{i=1}^ny_i = 0

sumlimits_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i - sumlimits_{i=1}^ny_i) = 0
end{cases}
ukuphela{isibalo*}

Ngaphambi kokuxazulula isibalo, masilayishe kuqala, sihlole ukuthi ukulayisha kulungile, bese sifometha idatha.

Ilayisha futhi ifometha idatha

Kufanele kuqashelwe ukuthi ngenxa yeqiniso lokuthi ngesixazululo sokuhlaziya, futhi kamuva ukwehla kwe-gradient kanye ne-stochastic gradient, sizosebenzisa ikhodi ngokuhlukahluka okubili: sisebenzisa umtapo wolwazi. I-NumPy futhi ngaphandle kokuyisebenzisa, sizobe sesidinga ukufometha kwedatha okufanele (bona ikhodi).

Ikhodi yokulayisha nokucubungula idatha

# ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
import pylab as pl
import random

# Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π² Jupyter
%matplotlib inline

# ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ²
from pylab import rcParams
rcParams['figure.figsize'] = 12, 6

# ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠΌ прСдупрСТдСния Anaconda
import warnings
warnings.simplefilter('ignore')

# Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ значСния
table_zero = pd.read_csv('data_example.txt', header=0, sep='t')

# посмотрим ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ Π½Π° саму Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ
print table_zero.info()
print '********************************************'
print table_zero
print '********************************************'

# ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· использования NumPy

x_us = []
[x_us.append(float(i)) for i in table_zero['x']]
print x_us
print type(x_us)
print '********************************************'

y_us = []
[y_us.append(float(i)) for i in table_zero['y']]
print y_us
print type(y_us)
print '********************************************'

# ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ с использованиСм NumPy

x_np = table_zero[['x']].values
print x_np
print type(x_np)
print x_np.shape
print '********************************************'

y_np = table_zero[['y']].values
print y_np
print type(y_np)
print y_np.shape
print '********************************************'

Ukubonakala

Manje, ngemva kokuba, okokuqala, silayishe idatha, okwesibili, sahlola ukufaneleka kokulayisha futhi ekugcineni safometha idatha, sizokwenza ukubonwa kokuqala. Indlela evame ukusetshenziselwa lokhu isiqephu imitapo yolwazi ozalwa olwandle. Esibonelweni sethu, ngenxa yezinombolo ezilinganiselwe, asikho isidingo sokusebenzisa umtapo wolwazi ozalwa olwandle. Sizosebenzisa umtapo wolwazi ojwayelekile I-Matplotlib futhi bheka nje uhlaka.

Ikhodi ye-scatterplot

print 'Π“Ρ€Π°Ρ„ΠΈΠΊ β„–1 "Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠΈ ΠΎΡ‚ мСсяца Π³ΠΎΠ΄Π°"'

plt.plot(x_us,y_us,'o',color='green',markersize=16)
plt.xlabel('$Months$', size=16)
plt.ylabel('$Sales$', size=16)
plt.show()

Ishadi No. 1 β€œUkuncika emalini engenayo enyangeni yonyaka”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Isixazululo sokuhlaziya

Masisebenzise amathuluzi avame kakhulu ku i-python futhi uxazulule isistimu yezibalo:

qala{equation*}
qala{cases}
na + bsumlimits_{i=1}^nx_i β€” sumlimits_{i=1}^ny_i = 0

sumlimits_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i - sumlimits_{i=1}^ny_i) = 0
end{cases}
ukuphela{isibalo*}

Ngokomthetho kaCramer sizothola i-determinant jikelele, kanye nezinqumo ngo Ukuxazulula isibalo sokuhlehla komugqa okulula futhi Ukuxazulula isibalo sokuhlehla komugqa okulula, ngemva kwalokho, ukuhlukanisa isihlukanisi nge Ukuxazulula isibalo sokuhlehla komugqa okulula kusihlukanisi esivamile - thola i-coefficient Ukuxazulula isibalo sokuhlehla komugqa okulula, ngokufanayo sithola i-coefficient Ukuxazulula isibalo sokuhlehla komugqa okulula.

Ikhodi yesixazululo sokuhlaziya

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для расчСта коэффициСнтов a ΠΈ b ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ ΠšΡ€Π°ΠΌΠ΅Ρ€Π°
def Kramer_method (x,y):
        # сумма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (всС мСсяца)
    sx = sum(x)
        # сумма истинных ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² (Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠ° Π·Π° вСсь ΠΏΠ΅Ρ€ΠΈΠΎΠ΄)
    sy = sum(y)
        # сумма произвСдСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° истинныС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹
    list_xy = []
    [list_xy.append(x[i]*y[i]) for i in range(len(x))]
    sxy = sum(list_xy)
        # сумма ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    list_x_sq = []
    [list_x_sq.append(x[i]**2) for i in range(len(x))]
    sx_sq = sum(list_x_sq)
        # количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    n = len(x)
        # ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ
    det = sx_sq*n - sx*sx
        # ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ a
    det_a = sx_sq*sy - sx*sxy
        # искомый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ a
    a = (det_a / det)
        # ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ b
    det_b = sxy*n - sy*sx
        # искомый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ b
    b = (det_b / det)
        # ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ значСния (ΠΏΡ€ΠΎΠΎΠ²Π΅Ρ€ΠΊΠ°)
    check1 = (n*b + a*sx - sy)
    check2 = (b*sx + a*sx_sq - sxy)
    return [round(a,4), round(b,4)]

# запустим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ запишСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹
ab_us = Kramer_method(x_us,y_us)
a_us = ab_us[0]
b_us = ab_us[1]
print ' 33[1m' + ' 33[4m' + "ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния коэффициСнтов a ΠΈ b:"  + ' 33[0m' 
print 'a =', a_us
print 'b =', b_us
print

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для подсчСта суммы ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ошибок
def errors_sq_Kramer_method(answers,x,y):
    list_errors_sq = []
    for i in range(len(x)):
        err = (answers[0] + answers[1]*x[i] - y[i])**2
        list_errors_sq.append(err)
    return sum(list_errors_sq)

# запустим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ запишСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ошибки
error_sq = errors_sq_Kramer_method(ab_us,x_us,y_us)
print ' 33[1m' + ' 33[4m' + "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ" + ' 33[0m'
print error_sq
print

# Π·Π°ΠΌΠ΅Ρ€ΠΈΠΌ врСмя расчСта
# print ' 33[1m' + ' 33[4m' + "ВрСмя выполнСния расчСта суммы ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ:" + ' 33[0m'
# % timeit error_sq = errors_sq_Kramer_method(ab,x_us,y_us)

Nakhu esinakho:

Ukuxazulula isibalo sokuhlehla komugqa okulula

Ngakho-ke, amanani ama-coefficients atholiwe, isamba sokuchezuka okuyisikwele sesisunguliwe. Masidwebe umugqa oqondile ku-histogram ehlakazayo ngokuhambisana nama-coefficients atholiwe.

Ikhodi yomugqa wokuhlehla

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для формирования массива рассчСтных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠΈ
def sales_count(ab,x,y):
    line_answers = []
    [line_answers.append(ab[0]+ab[1]*x[i]) for i in range(len(x))]
    return line_answers

# построим Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ
print 'Π“Ρ€Ρ„ΠΈΠΊβ„–2 "ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ расчСтныС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹"'
plt.plot(x_us,y_us,'o',color='green',markersize=16, label = '$True$ $answers$')
plt.plot(x_us, sales_count(ab_us,x_us,y_us), color='red',lw=4,
         label='$Function: a + bx,$ $where$ $a='+str(round(ab_us[0],2))+',$ $b='+str(round(ab_us[1],2))+'$')
plt.xlabel('$Months$', size=16)
plt.ylabel('$Sales$', size=16)
plt.legend(loc=1, prop={'size': 16})
plt.show()

Ishadi No. 2 β€œIzimpendulo ezifanele nezibaliwe”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Ungabheka igrafu yokuchezuka yenyanga ngayinye. Esimweni sethu, ngeke sithole inzuzo ebalulekile kuyo, kodwa sizokwanelisa ilukuluku lethu lokuthi isibalo sokuhlehla esilula somugqa sikubonisa kanjani ukuncika kwemali engenayo enyangeni yonyaka.

Ikhodi yeshadi lokuchezuka

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для формирования массива ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…
def error_per_month(ab,x,y):
    sales_c = sales_count(ab,x,y)
    errors_percent = []
    for i in range(len(x)):
        errors_percent.append(100*(sales_c[i]-y[i])/y[i])
    return errors_percent

# построим Π³Ρ€Π°Ρ„ΠΈΠΊ
print 'Π“Ρ€Π°Ρ„ΠΈΠΊβ„–3 "ΠžΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ ΠΏΠΎ-мСсячно, %"'
plt.gca().bar(x_us, error_per_month(ab_us,x_us,y_us), color='brown')
plt.xlabel('Months', size=16)
plt.ylabel('Calculation error, %', size=16)
plt.show()

Ishadi No. 3 β€œDeviations, %”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Asiphelele, kodwa siwuqedile umsebenzi wethu.

Masibhale umsebenzi, ukuze sinqume ama-coefficients Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula isebenzisa umtapo wolwazi I-NumPy, ngokunembile, sizobhala imisebenzi emibili: eyodwa isebenzisa i-pseudoinverse matrix (ayinconyiwe ekusebenzeni, njengoba inqubo iyinkimbinkimbi futhi ayizinzile), enye isebenzisa i-matrix equation.

Ikhodi Yesixazululo Sokuhlaziya (NumPy)

# для Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ столбСц с Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² 1. 
# Π”Π°Π½Π½Ρ‹ΠΉ столбСц Π½ΡƒΠΆΠ΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ коэффицСнт a
vector_1 = np.ones((x_np.shape[0],1))
x_np = table_zero[['x']].values # Π½Π° всякий случай ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ x_np
x_np = np.hstack((vector_1,x_np))

# ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС сдСлали ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ
print vector_1[0:3]
print x_np[0:3]
print '***************************************'
print

# напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая опрСдСляСт значСния коэффициСнтов a ΠΈ b с использованиСм псСвдообратной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
def pseudoinverse_matrix(X, y):
    # Π·Π°Π΄Π°Π΅ΠΌ явный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²
    X = np.matrix(X)
    # опрСдСляСм Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    XT = X.T
    # опрСдСляСм ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    XTX = XT*X
    # опрСдСляСм ΠΏΡΠ΅Π²Π΄ΠΎΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ
    inv = np.linalg.pinv(XTX)
    # Π·Π°Π΄Π°Π΅ΠΌ явный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²
    y = np.matrix(y)
    # Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ вСсов
    return (inv*XT)*y

# запустим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
ab_np = pseudoinverse_matrix(x_np, y_np)
print ab_np
print '***************************************'
print

# напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅
def matrix_equation(X,y):
    a = np.dot(X.T, X)
    b = np.dot(X.T, y)
    return np.linalg.solve(a, b)

# запустим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
ab_np = matrix_equation(x_np,y_np)
print ab_np

Ake siqhathanise isikhathi esichithwe ekunqumeni ama-coefficients Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula, ngokuhambisana nezindlela ezi-3 ezethulwe.

Ikhodi yokubala isikhathi sokubala

print ' 33[1m' + ' 33[4m' + "ВрСмя выполнСния расчСта коэффициСнтов Π±Π΅Π· использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy:" + ' 33[0m'
% timeit ab_us = Kramer_method(x_us,y_us)
print '***************************************'
print
print ' 33[1m' + ' 33[4m' + "ВрСмя выполнСния расчСта коэффициСнтов с использованиСм псСвдообратной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:" + ' 33[0m'
%timeit ab_np = pseudoinverse_matrix(x_np, y_np)
print '***************************************'
print
print ' 33[1m' + ' 33[4m' + "ВрСмя выполнСния расчСта коэффициСнтов с использованиСм ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ уравнСния:" + ' 33[0m'
%timeit ab_np = matrix_equation(x_np, y_np)

Ukuxazulula isibalo sokuhlehla komugqa okulula

Ngenani elincane ledatha, umsebenzi "ozibhalayo" uphuma phambili, othola ama-coefficients usebenzisa indlela ye-Cramer.

Manje ungadlulela kwezinye izindlela zokuthola ama-coefficient Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula.

Ukwehla kweGradient

Okokuqala, ake sichaze ukuthi iyini i-gradient. Kalula nje, i-gradient iyisegimenti ebonisa isiqondiso sokukhula okuphezulu komsebenzi. Ngokufanisa nokuqwala intaba, lapho i-gradient ibheke khona kulapho umqansa ukhuphukela esiqongweni sentaba. Ukuthuthukisa isibonelo ngentaba, sikhumbula ukuthi empeleni sidinga ukwehla okuphakeme kakhulu ukuze sifinyelele endaweni ephansi ngokushesha ngangokunokwenzeka, okungukuthi, okungenani - indawo lapho umsebenzi ungakhuli noma unganciphi. Kuleli qophelo okuphuma kokunye kuzolingana noziro. Ngakho-ke, asidingi i-gradient, kodwa i-antigradient. Ukuze uthole i-antigradient udinga nje ukuphindaphinda i-gradient ngayo -1 (khipha okukodwa).

Ake sinake iqiniso lokuthi umsebenzi ungaba nama-minima amaningana, futhi sehlele kwenye yazo sisebenzisa i-algorithm ehlongozwayo ngezansi, ngeke sikwazi ukuthola obunye ubuncane, obungaba ngaphansi kwalowo otholakele. Ake siphumule, lokhu akulona usongo kithi! Esimweni sethu sibhekene nobuncane obuncane, kusukela emsebenzini wethu Ukuxazulula isibalo sokuhlehla komugqa okulula kugrafu kune-parabola evamile. Futhi njengoba sonke kufanele sazi kahle kakhulu esifundweni sethu sezibalo zesikole, i-parabola inenani eliphansi elilodwa kuphela.

Ngemva kokuthola ukuthi kungani sidinga i-gradient, nokuthi i-gradient iyisegimenti, okungukuthi, i-vector enezixhumanisi ezinikeziwe, ezingama-coefficient afanayo ncamashi. Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula singasebenzisa ukwehla kwe-gradient.

Ngaphambi kokuqala, ngiphakamisa ukuthi ufunde imisho embalwa nje mayelana ne-algorithm yokwehla:

  • Sinquma ngendlela mbumbulu-okungahleliwe izixhumanisi zama-coefficients Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula. Esibonelweni sethu, sizonquma ama-coefficient aseduze kukaziro. Lona umkhuba ovamile, kodwa icala ngalinye lingase libe nomkhuba walo.
  • Kusuka ku-coordinate Ukuxazulula isibalo sokuhlehla komugqa okulula khipha inani lokuphuma kokunye kokunye kwe-oda loku-1 endaweni Ukuxazulula isibalo sokuhlehla komugqa okulula. Ngakho-ke, uma i-derivative ilungile, khona-ke umsebenzi uyakhula. Ngakho-ke, ngokukhipha inani le-derivative, sizohamba ngendlela ehlukile yokukhula, okungukuthi, ekuqondeni kokwehla. Uma okuphuma kokunye kuyinegethivu, khona-ke umsebenzi kuleli phuzu uyancipha futhi ngokukhipha inani lokuphuma kokunye sihamba siye ohlangothini lokwehla.
  • Senza umsebenzi ofanayo nge-coordinate Ukuxazulula isibalo sokuhlehla komugqa okulula: susa inani lokuphuma kokunye ingxenye endaweni Ukuxazulula isibalo sokuhlehla komugqa okulula.
  • Ukuze ungagxumi phezu kobuncane bese undizela endaweni ejulile, kuyadingeka ukusetha usayizi wesinyathelo ngendlela yokwehla. Ngokuvamile, ungabhala i-athikili ephelele mayelana nendlela yokusetha isinyathelo ngendlela efanele nokuthi ungasishintsha kanjani phakathi nenqubo yokwehla ukuze unciphise izindleko zokubala. Kodwa manje sinomsebenzi ohluke kancane phambi kwethu, futhi sizosungula usayizi wesinyathelo sisebenzisa indlela yesayensi ye- "poke" noma, njengoba besho ngolimi oluvamile, ngokomthetho.
  • Uma sesisuka ezixhumanisini ezinikeziwe Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula khipha amanani we-derivatives, sithola izixhumanisi ezintsha Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula. Sithatha isinyathelo esilandelayo (ukukhipha), kakade kusukela kuzixhumanisi ezibaliwe. Futhi ngakho-ke umjikelezo uqala ngokuphindaphindiwe, kuze kube yilapho kufinyelelwa ukuhlangana okudingekayo.

Konke! Manje sesilungele ukuyofuna umhosha ojulile we-Mariana Trench. Ake siqale.

Ikhodi yokwehla kwe-gradient

# напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска Π±Π΅Π· использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy. 
# Ѐункция Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ x,y, Π΄Π»ΠΈΠ½Ρƒ шага (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ=0,1), Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ(tolerance)
def gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001):
    # сумма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (всС мСсяца)
    sx = sum(x_us)
    # сумма истинных ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² (Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠ° Π·Π° вСсь ΠΏΠ΅Ρ€ΠΈΠΎΠ΄)
    sy = sum(y_us)
    # сумма произвСдСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° истинныС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹
    list_xy = []
    [list_xy.append(x_us[i]*y_us[i]) for i in range(len(x_us))]
    sxy = sum(list_xy)
    # сумма ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    list_x_sq = []
    [list_x_sq.append(x_us[i]**2) for i in range(len(x_us))]
    sx_sq = sum(list_x_sq)
    # количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    num = len(x_us)
    # Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния коэффициСнтов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ псСвдослучайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ
    a = float(random.uniform(-0.5, 0.5))
    b = float(random.uniform(-0.5, 0.5))
    # создаСм массив с ошибками, для старта ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ значСния 1 ΠΈ 0
    # послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ спуска стартовыС значСния ΡƒΠ΄Π°Π»ΠΈΠΌ
    errors = [1,0]
    # запускаСм Ρ†ΠΈΠΊΠ» спуска
    # Ρ†ΠΈΠΊΠ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ послСднСй ошибки суммы ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ мСньшС tolerance
    while abs(errors[-1]-errors[-2]) > tolerance:
        a_step = a - l*(num*a + b*sx - sy)/num
        b_step = b - l*(a*sx + b*sx_sq - sxy)/num
        a = a_step
        b = b_step
        ab = [a,b]
        errors.append(errors_sq_Kramer_method(ab,x_us,y_us))
    return (ab),(errors[2:])

# запишСм массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 
list_parametres_gradient_descence = gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001)


print ' 33[1m' + ' 33[4m' + "ЗначСния коэффициСнтов a ΠΈ b:" + ' 33[0m'
print 'a =', round(list_parametres_gradient_descence[0][0],3)
print 'b =', round(list_parametres_gradient_descence[0][1],3)
print


print ' 33[1m' + ' 33[4m' + "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ:" + ' 33[0m'
print round(list_parametres_gradient_descence[1][-1],3)
print



print ' 33[1m' + ' 33[4m' + "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΌ спускС:" + ' 33[0m'
print len(list_parametres_gradient_descence[1])
print

Ukuxazulula isibalo sokuhlehla komugqa okulula

Sangena phansi kakhulu ku-Mariana Trench futhi lapho sathola amanani e-coefficient afanayo Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula, okuyilokho kanye obekulindelwe.

Ake sibhukule futhi, kulokhu kuphela, imoto yethu yasolwandle izogcwala obunye ubuchwepheshe, okuwumtapo wolwazi. I-NumPy.

Ikhodi yokwehla kwegradient (NumPy)

# ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy, 
# напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ опрСдСлСния суммы ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ с использованиСм NumPy
def error_square_numpy(ab,x_np,y_np):
    y_pred = np.dot(x_np,ab)
    error = y_pred - y_np
    return sum((error)**2)

# напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy. 
# Ѐункция Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ x,y, Π΄Π»ΠΈΠ½Ρƒ шага (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ=0,1), Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ(tolerance)
def gradient_descent_numpy(x_np,y_np,l=0.1,tolerance=0.000000000001):
    # сумма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (всС мСсяца)
    sx = float(sum(x_np[:,1]))
    # сумма истинных ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² (Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠ° Π·Π° вСсь ΠΏΠ΅Ρ€ΠΈΠΎΠ΄)
    sy = float(sum(y_np))
    # сумма произвСдСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° истинныС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹
    sxy = x_np*y_np
    sxy = float(sum(sxy[:,1]))
    # сумма ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    sx_sq = float(sum(x_np[:,1]**2))
    # количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    num = float(x_np.shape[0])
    # Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния коэффициСнтов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ псСвдослучайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ
    a = float(random.uniform(-0.5, 0.5))
    b = float(random.uniform(-0.5, 0.5))
    # создаСм массив с ошибками, для старта ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ значСния 1 ΠΈ 0
    # послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ спуска стартовыС значСния ΡƒΠ΄Π°Π»ΠΈΠΌ
    errors = [1,0]
    # запускаСм Ρ†ΠΈΠΊΠ» спуска
    # Ρ†ΠΈΠΊΠ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ послСднСй ошибки суммы ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ мСньшС tolerance
    while abs(errors[-1]-errors[-2]) > tolerance:
        a_step = a - l*(num*a + b*sx - sy)/num
        b_step = b - l*(a*sx + b*sx_sq - sxy)/num
        a = a_step
        b = b_step
        ab = np.array([[a],[b]])
        errors.append(error_square_numpy(ab,x_np,y_np))
    return (ab),(errors[2:])

# запишСм массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 
list_parametres_gradient_descence = gradient_descent_numpy(x_np,y_np,l=0.1,tolerance=0.000000000001)

print ' 33[1m' + ' 33[4m' + "ЗначСния коэффициСнтов a ΠΈ b:" + ' 33[0m'
print 'a =', round(list_parametres_gradient_descence[0][0],3)
print 'b =', round(list_parametres_gradient_descence[0][1],3)
print


print ' 33[1m' + ' 33[4m' + "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ:" + ' 33[0m'
print round(list_parametres_gradient_descence[1][-1],3)
print

print ' 33[1m' + ' 33[4m' + "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΌ спускС:" + ' 33[0m'
print len(list_parametres_gradient_descence[1])
print

Ukuxazulula isibalo sokuhlehla komugqa okulula
Amanani e-coefficient Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula engaguquleki.

Ake sibheke ukuthi iphutha lishintshe kanjani ngesikhathi sokwehla kwegradient, okungukuthi, ukuthi isamba sokuchezuka okuyisikwele sishintshe kanjani ngesinyathelo ngasinye.

Ikhodi yokuhlela izibalo zokuchezuka okuyisikwele

print 'Π“Ρ€Π°Ρ„ΠΈΠΊβ„–4 "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ-шагово"'
plt.plot(range(len(list_parametres_gradient_descence[1])), list_parametres_gradient_descence[1], color='red', lw=3)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()

Igrafu No. 4 β€œIsamba sokuchezuka okuyisikwele ngesikhathi sokwehla kwegradient”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Kugrafu sibona ukuthi ngesinyathelo ngasinye iphutha liyancipha, futhi ngemva kwenani elithile lokuphindaphinda sibona umugqa ocishe uvundlile.

Okokugcina, ake silinganisele umehluko esikhathini sokwenza ikhodi:

Ikhodi yokunquma isikhathi sokubala sokwehla kwe-gradient

print ' 33[1m' + ' 33[4m' + "ВрСмя выполнСния Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска Π±Π΅Π· использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy:" + ' 33[0m'
%timeit list_parametres_gradient_descence = gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001)
print '***************************************'
print

print ' 33[1m' + ' 33[4m' + "ВрСмя выполнСния Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy:" + ' 33[0m'
%timeit list_parametres_gradient_descence = gradient_descent_numpy(x_np,y_np,l=0.1,tolerance=0.000000000001)

Ukuxazulula isibalo sokuhlehla komugqa okulula

Mhlawumbe kukhona okungalungile esikwenzayo, kodwa futhi kuwumsebenzi olula β€œobhalwe ekhaya” ongawusebenzisi umtapo wolwazi. I-NumPy idlula isikhathi sokubala somsebenzi usebenzisa umtapo wolwazi I-NumPy.

Kodwa asimile, kodwa siphokophele ekufundeni enye indlela ethokozisayo yokuxazulula isibalo sokuhlehla esilula somugqa. Hlanganani!

Ukwehla kwe-Stochastic gradient

Ukuze uqonde ngokushesha umgomo wokusebenza kokwehla kwe-stochastic gradient, kungcono ukunquma umehluko wawo ekwehleni okujwayelekile kwe-gradient. Thina, endabeni yokwehla kwe-gradient, ezilinganisweni zokuphuma kokunye kwe Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula usebenzise izilinganiso zamanani azo zonke izici nezimpendulo eziyiqiniso ezitholakala kusampula (okungukuthi, isamba sakho konke Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula). Ekwehleni kwe-stochastic gradient, ngeke sisebenzise wonke amanani akhona kusampula, kodwa esikhundleni salokho, khetha okungahleliwe lokho okubizwa ngokuthi inkomba yesampula futhi sisebenzise amanani ayo.

Isibonelo, uma inkomba inqunywa ukuthi iyinombolo 3 (ezintathu), sithatha amanani Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula, bese sifaka amanani esikhundleni sezibalo eziphuma kokunye futhi sinquma izixhumanisi ezintsha. Khona-ke, ngemva kokunquma izixhumanisi, siphinde sinqume ngokungahleliwe inkomba yesampula, sishintshe amanani ahambisana nenkomba kuma-equations ahlukene ngokwengxenye, futhi sinqume izixhumanisi ngendlela entsha. Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula njll. kuze kube yilapho ukuhlangana kuba luhlaza. Uma uthi nhlΓ‘, kungase kungabonakali sengathi lokhu kungasebenza nhlobo, kodwa kuyasebenza. Kuyiqiniso ukuthi kubalulekile ukuqaphela ukuthi iphutha alinciphi ngesinyathelo ngasinye, kodwa kukhona ukuthambekela ngokuqinisekile.

Yiziphi izinzuzo zokwehla kwe-stochastic gradient kunokwejwayelekile? Uma usayizi wethu wesampula mkhulu kakhulu futhi ukalwa ngamashumi ezinkulungwane zamanani, kulula kakhulu ukucubungula, ukusho, inkulungwane engahleliwe yawo, kunesampula yonke. Yilapho ukwehla kwe-stochastic gradient kuqala khona. Esimweni sethu, vele, ngeke siqaphele umehluko omkhulu.

Ake sibheke ikhodi.

Ikhodi yokwehla kwe-stochastic gradient

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ стох.Π³Ρ€Π°Π΄.шага
def stoch_grad_step_usual(vector_init, x_us, ind, y_us, l):
#     Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ икс, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт случайному Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ind 
# (см.Ρ„-Ρ†ΠΈΡŽ stoch_grad_descent_usual)
    x = x_us[ind]
#     рассчитывыаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ y (Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΡƒ), которая соотвСтствуСт Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ x
    y_pred = vector_init[0] + vector_init[1]*x_us[ind]
#     вычисляСм ΠΎΡˆΠΈΠ±ΠΊΡƒ расчСтной Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСдставлСнной Π² Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅
    error = y_pred - y_us[ind]
#     опрСдСляСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° ab
    grad_a = error
#     опрСдСляСм Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ ab
    grad_b = x_us[ind]*error
#     вычисляСм Π½ΠΎΠ²Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ коэффициСнтов
    vector_new = [vector_init[0]-l*grad_a, vector_init[1]-l*grad_b]
    return vector_new


# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ стох.Π³Ρ€Π°Π΄.спуска
def stoch_grad_descent_usual(x_us, y_us, l=0.1, steps = 800):
#     для самого Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния коэффициСнтов
    vector_init = [float(random.uniform(-0.5, 0.5)), float(random.uniform(-0.5, 0.5))]
    errors = []
#     запустим Ρ†ΠΈΠΊΠ» спуска
# Ρ†ΠΈΠΊΠ» расчитан Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство шагов (steps)
    for i in range(steps):
        ind = random.choice(range(len(x_us)))
        new_vector = stoch_grad_step_usual(vector_init, x_us, ind, y_us, l)
        vector_init = new_vector
        errors.append(errors_sq_Kramer_method(vector_init,x_us,y_us))
    return (vector_init),(errors)


# запишСм массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 
list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.1, steps = 800)

print ' 33[1m' + ' 33[4m' + "ЗначСния коэффициСнтов a ΠΈ b:" + ' 33[0m'
print 'a =', round(list_parametres_stoch_gradient_descence[0][0],3)
print 'b =', round(list_parametres_stoch_gradient_descence[0][1],3)
print


print ' 33[1m' + ' 33[4m' + "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ:" + ' 33[0m'
print round(list_parametres_stoch_gradient_descence[1][-1],3)
print

print ' 33[1m' + ' 33[4m' + "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π² стохастичСском Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΌ спускС:" + ' 33[0m'
print len(list_parametres_stoch_gradient_descence[1])

Ukuxazulula isibalo sokuhlehla komugqa okulula

Sibheka ngokucophelela ama-coefficients futhi sizithole sibuza umbuzo "Kungenzeka kanjani lokhu?" Sithole amanye amanani we-coefficient Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula. Mhlawumbe ukwehla kwe-stochastic gradient kuthole amapharamitha angcono kakhulu esibalo? Ngeshwa cha. Kwanele ukubheka isamba sokuchezuka okuyisikwele futhi ubone ukuthi ngamavelu amasha wama-coefficients, iphutha likhulu. Asijahile ukulahla ithemba. Ake sakhe igrafu yoshintsho lwephutha.

Ikhodi yokuhlela isamba sokuchezuka okusikwele ekwehleni kwegradient ye-stochastic

print 'Π“Ρ€Π°Ρ„ΠΈΠΊ β„–5 "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ-шагово"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1])), list_parametres_stoch_gradient_descence[1], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()

Igrafu No. 5 β€œIsamba sokuchezuka okusikwele ngesikhathi sokwehla kwe-stochastic gradient”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Uma sibheka isheduli, yonke into ihamba kahle futhi manje sizolungisa yonke into.

Pho kwenzekani? Lokhu okulandelayo kwenzeka. Uma sikhetha inyanga ngokungahleliwe, kuba okwenyanga ekhethiwe lapho i-algorithm yethu ifuna ukunciphisa iphutha ekubaleni imali engenayo. Bese sikhetha enye inyanga bese siphinda ukubala, kodwa sinciphisa iphutha lenyanga yesibili ekhethiwe. Manje khumbula ukuthi izinyanga ezimbili zokuqala zichezuka kakhulu emugqeni wezibalo zokuhlehla ezilula zomugqa. Lokhu kusho ukuthi uma noma iyiphi yalezi zinyanga ezimbili ikhethiwe, ngokunciphisa iphutha lazo zonke, i-algorithm yethu ikhulisa kakhulu iphutha layo yonke isampula. Pho yini okumele uyenze? Impendulo ilula: udinga ukunciphisa isinyathelo sokwehla. Phela, ngokunciphisa isinyathelo sokwehla, iphutha lizoyeka "ukweqa" phezulu naphansi. Noma kunalokho, iphutha "lokweqa" ngeke liyeke, kodwa ngeke likwenze ngokushesha :) Ake sihlole.

Ikhodi yokusebenzisa i-SGD ngezinyuso ezincane

# запустим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ² шаг Π² 100 Ρ€Π°Π· ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ² количСство шагов ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰Π΅ 
list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.001, steps = 80000)

print ' 33[1m' + ' 33[4m' + "ЗначСния коэффициСнтов a ΠΈ b:" + ' 33[0m'
print 'a =', round(list_parametres_stoch_gradient_descence[0][0],3)
print 'b =', round(list_parametres_stoch_gradient_descence[0][1],3)
print


print ' 33[1m' + ' 33[4m' + "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ:" + ' 33[0m'
print round(list_parametres_stoch_gradient_descence[1][-1],3)
print



print ' 33[1m' + ' 33[4m' + "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π² стохастичСском Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΌ спускС:" + ' 33[0m'
print len(list_parametres_stoch_gradient_descence[1])

print 'Π“Ρ€Π°Ρ„ΠΈΠΊ β„–6 "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ-шагово"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1])), list_parametres_stoch_gradient_descence[1], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()

Ukuxazulula isibalo sokuhlehla komugqa okulula

Igrafu No. 6 β€œIsamba sokuchezuka okuyisikwele ngesikhathi sokwehla kwe-stochastic gradient (izinyathelo eziyizinkulungwane ezingu-80)”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Ama-coefficients athuthukile, kodwa namanje awalungile. Ngokuqagela, lokhu kungalungiswa ngale ndlela. Sikhetha, isibonelo, ekuphindaphindweni okungu-1000 kokugcina amanani ama-coefficients okwenziwa ngawo iphutha elincane. Yiqiniso, kulokhu kuzodingeka futhi sibhale phansi amanani ama-coefficients ngokwawo. Ngeke sikwenze lokhu, kodwa kunalokho sinake isimiso. Kubukeka bushelelezi futhi iphutha libonakala lehla ngokulinganayo. Empeleni lokhu akulona iqiniso. Ake sibheke ukuphindaphinda okungu-1000 kokuqala futhi sikuqhathanise nokugcina.

Ikhodi yeshadi le-SGD (izinyathelo zokuqala eziyi-1000)

print 'Π“Ρ€Π°Ρ„ΠΈΠΊ β„–7 "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ-шагово. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ 1000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1][:1000])), 
         list_parametres_stoch_gradient_descence[1][:1000], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()

print 'Π“Ρ€Π°Ρ„ΠΈΠΊ β„–7 "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ-шагово. ПослСдниС 1000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1][-1000:])), 
         list_parametres_stoch_gradient_descence[1][-1000:], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()

Igrafu No. 7 β€œIsamba sokuchezuka kwesikwele SGD (izinyathelo zokuqala ezingu-1000)”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Igrafu No. 8 β€œIsamba sokuchezuka okuyisikwele SGD (izinyathelo zokugcina ezingu-1000)”

Ukuxazulula isibalo sokuhlehla komugqa okulula

Ekuqaleni kokwehla, sibona iphutha elilinganayo kanye nokwehla okukhulu. Ekuphindaphindweni kokugcina, sibona ukuthi iphutha lizungeza futhi lizungeze inani le-1,475 futhi ngezinye izikhathi lilingana naleli nani eliphelele, kodwa-ke liyakhuphuka... Ngiyaphinda, ungabhala phansi amanani we- ama-coefficients Ukuxazulula isibalo sokuhlehla komugqa okulula ΠΈ Ukuxazulula isibalo sokuhlehla komugqa okulula, bese ukhetha lezo iphutha elincane kuzo. Kodwa-ke, sibe nenkinga enkulu kakhulu: bekufanele sithathe izinyathelo eziyizinkulungwane ezingama-80 (bona ikhodi) ukuze sithole amanani asondele kokulungile. Futhi lokhu vele kuyaphikisana nomqondo wokonga isikhathi sokubala ngokwehla kwe-stochastic gradient okuhlobene nokwehla kwe-gradient. Yini engalungiswa futhi ithuthukiswe? Akunzima ukuqaphela ukuthi ekuphindaphindweni kokuqala siyehla ngokuzethemba futhi, ngakho-ke, kufanele sishiye isinyathelo esikhulu ekuphindaphindweni kokuqala futhi sinciphise isinyathelo njengoba siqhubekela phambili. Ngeke sikwenze lokhu kulesi sihloko - sesivele side kakhulu. Labo abafisayo bangazicabangela bona ukuthi bangakwenza kanjani lokhu, akunzima :)

Manje masenze ukwehla kwe-stochastic gradient sisebenzisa umtapo wolwazi I-NumPy (futhi masingakhubeki ematsheni esiwahlonze ekuqaleni)

Ikhodi yokwehla kwe-Stochastic Gradient (NumPy)

# для Π½Π°Ρ‡Π°Π»Π° напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ шага
def stoch_grad_step_numpy(vector_init, X, ind, y, l):
    x = X[ind]
    y_pred = np.dot(x,vector_init)
    err = y_pred - y[ind]
    grad_a = err
    grad_b = x[1]*err
    return vector_init - l*np.array([grad_a, grad_b])

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ стохастичСского Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска
def stoch_grad_descent_numpy(X, y, l=0.1, steps = 800):
    vector_init = np.array([[np.random.randint(X.shape[0])], [np.random.randint(X.shape[0])]])
    errors = []
    for i in range(steps):
        ind = np.random.randint(X.shape[0])
        new_vector = stoch_grad_step_numpy(vector_init, X, ind, y, l)
        vector_init = new_vector
        errors.append(error_square_numpy(vector_init,X,y))
    return (vector_init), (errors)

# запишСм массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 
list_parametres_stoch_gradient_descence = stoch_grad_descent_numpy(x_np, y_np, l=0.001, steps = 80000)

print ' 33[1m' + ' 33[4m' + "ЗначСния коэффициСнтов a ΠΈ b:" + ' 33[0m'
print 'a =', round(list_parametres_stoch_gradient_descence[0][0],3)
print 'b =', round(list_parametres_stoch_gradient_descence[0][1],3)
print


print ' 33[1m' + ' 33[4m' + "Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ:" + ' 33[0m'
print round(list_parametres_stoch_gradient_descence[1][-1],3)
print



print ' 33[1m' + ' 33[4m' + "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π² стохастичСском Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΌ спускС:" + ' 33[0m'
print len(list_parametres_stoch_gradient_descence[1])
print

Ukuxazulula isibalo sokuhlehla komugqa okulula

Amanani acishe afana nalapho ehla ngaphandle kokusebenzisa I-NumPy. Nokho, lokhu kunengqondo.

Ake sithole ukuthi ukwehla kwe-stochastic gradient kusithatha isikhathi esingakanani.

Ikhodi yokunquma isikhathi sokubala se-SGD (izinyathelo eziyizinkulungwane ezingama-80)

print ' 33[1m' + ' 33[4m' +
"ВрСмя выполнСния стохастичСского Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска Π±Π΅Π· использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy:"
+ ' 33[0m'
%timeit list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.001, steps = 80000)
print '***************************************'
print

print ' 33[1m' + ' 33[4m' +
"ВрСмя выполнСния стохастичСского Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy:"
+ ' 33[0m'
%timeit list_parametres_stoch_gradient_descence = stoch_grad_descent_numpy(x_np, y_np, l=0.001, steps = 80000)

Ukuxazulula isibalo sokuhlehla komugqa okulula

Ukuqhubekela phambili ehlathini, amafu amnyama: futhi, ifomula "ezibhalile" ibonisa umphumela omuhle kakhulu. Konke lokhu kusikisela ukuthi kufanele kube nezindlela ezicashile zokusebenzisa umtapo wolwazi I-NumPy, okusheshisa ngempela ukusebenza kokubala. Kulesi sihloko ngeke sifunde ngabo. Kuzoba nokuthile ongacabanga ngakho ngesikhathi sakho esikhululekile :)

Sifingqa

Ngaphambi kokufingqa, ngithanda ukuphendula umbuzo okungenzeka uvele kumfundi wethu othandekayo. Kungani, empeleni, "ukuhlukunyezwa" okunjalo nokwehla, kungani sidinga ukuhamba sehla senyuka intaba (ikakhulukazi phansi) ukuze sithole indawo ephansi eyigugu, uma ezandleni zethu siphethe idivayisi enamandla futhi elula, uhlobo lwesixazululo sokuhlaziya, esisithumela ngokushesha endaweni elungile?

Impendulo yalo mbuzo itholakala phezulu. Manje sibheke isibonelo esilula kakhulu, lapho impendulo yeqiniso ikhona Ukuxazulula isibalo sokuhlehla komugqa okulula kuncike kuphawu olulodwa Ukuxazulula isibalo sokuhlehla komugqa okulula. Awukuboni lokhu kaningi empilweni, ngakho-ke ake sicabange ukuthi sinezimpawu ezingu-2, 30, 50 noma ngaphezulu. Ake sengeze kulokhu izinkulungwane, noma amashumi ezinkulungwane zamavelu kusibaluli ngasinye. Kulesi simo, isisombululo sokuhlaziya singase singamelani nokuhlolwa futhi sehluleke. Ngokulandelayo, ukwehla kwe-gradient nokuhluka kwakho kuzosisondeza kancane kancane kumgomo - ubuncane bomsebenzi. Futhi ungakhathazeki ngesivinini - cishe sizobheka izindlela ezizosivumela ukuthi sibeke futhi silawule ubude besinyathelo (okungukuthi, isivinini).

Futhi manje isifinyezo sangempela esifushane.

Okokuqala, ngithemba ukuthi izinto ezivezwe esihlokweni zizosiza ekuqaleni β€œososayensi bedatha” ekuqondeni indlela yokuxazulula izilinganiso zokuhlehla zomugqa ezilula (hhayi nje kuphela).

Okwesibili, sibheke izindlela ezimbalwa zokuxazulula i-equation. Manje, kuye ngesimo, singakhetha lowo ofaneleka kakhulu ukuxazulula inkinga.

Okwesithathu, sibone amandla ezilungiselelo ezengeziwe, okungukuthi ubude besinyathelo sokwehla kwe-gradient. Le pharamitha ayikwazi ukunganakwa. Njengoba kuphawuliwe ngenhla, ukuze kuncishiswe izindleko zokubala, ubude besinyathelo kufanele bushintshwe ngesikhathi sokwehla.

Okwesine, esimweni sethu, imisebenzi "ebhalwe ekhaya" ibonise imiphumela yesikhathi engcono kakhulu yokubala. Lokhu mhlawumbe kungenxa yokungasebenzisi kahle kakhulu kwamakhono omtapo wolwazi I-NumPy. Kodwa noma ngabe kunjalo, isiphetho esilandelayo siyazisikisela. Ngakolunye uhlangothi, ngezinye izikhathi kufanelekile ukubuza imibono emisiwe, futhi ngakolunye uhlangothi, akufanelekile ngaso sonke isikhathi ukuhlanganisa yonke into - ngokuphambene nalokho, ngezinye izikhathi indlela elula yokuxazulula inkinga iphumelela kakhulu. Futhi njengoba inhloso yethu bekuwukuhlaziya izindlela ezintathu zokuxazulula isibalo esilula sokuhlehla komugqa, ukusetshenziswa kwemisebenzi "ezibhale ngokwakho" bekwanele kithi.

Imibhalo (noma into efana naleyo)

1. Ukwehla komugqa

http://statistica.ru/theory/osnovy-lineynoy-regressii/

2. Indlela encane yezikwele

mathprofi.ru/metod_naimenshih_kvadratov.html

3. Okuphuma kokunye

www.mathprofi.ru/chastnye_proizvodnye_primery.html

I-4. I-Gradient

mathprofi.ru/proizvodnaja_po_napravleniju_i_gradient.html

5. Ukwehla kwe-gradient

habr.com/zu/post/471458

habr.com/zu/post/307312

artemarakcheev.com//2017-12-31/linear_regression

6. Umtapo wolwazi we-NumPy

docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.linalg.solve.html

docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.linalg.pinv.html

pythonworld.ru/numpy/2.html

Source: www.habr.com

Engeza amazwana