Pagsulbad sa yano nga linear regression equation

Gihisgotan sa artikulo ang daghang mga paagi aron mahibal-an ang equation sa matematika sa usa ka yano (pares) nga linya sa pagbag-o.

Ang tanan nga mga pamaagi sa pagsulbad sa equation nga gihisgutan dinhi gibase sa pinakagamay nga squares method. Atong itudlo ang mga pamaagi sama sa mosunod:

  • Analitikal nga solusyon
  • Gradient nga Descent
  • Stochastic gradient nga pagkanaog

Alang sa matag pamaagi sa pagsulbad sa equation sa usa ka tul-id nga linya, ang artikulo naghatag lainlaing mga gimbuhaton, nga kadaghanan gibahin sa mga gisulat nga wala gigamit ang librarya. numpy ug kadtong naggamit sa mga kalkulasyon numpy. Gituohan nga ang batid nga paggamit numpy makapakunhod sa gasto sa pag-compute.

Ang tanang code nga gihatag sa artikulo gisulat sa pinulongan sawa sa 2.7 gamit Notebook ni Jupiter. Gi-post ang source code ug file nga adunay sample data Github

Ang artikulo mas gitumong sa mga magsusugod ug sa mga anam-anam na nga nagsugod sa pag-master sa pagtuon sa usa ka lapad kaayo nga seksyon sa artificial intelligence - machine learning.

Sa pag-ilustrar sa materyal, naggamit kami ug yano kaayong pananglitan.

Pananglitan nga mga kondisyon

Kami adunay lima ka mga kantidad nga nagpaila sa pagsalig Y gikan sa X (Talaan Num. 1):

Talaan Num. 1 "Pananglitan nga mga kondisyon"

Pagsulbad sa yano nga linear regression equation

Atong hunahunaon nga ang mga mithi Pagsulbad sa yano nga linear regression equation mao ang bulan sa tuig, ug Pagsulbad sa yano nga linear regression equation - kita karong bulana. Sa laing pagkasulti, ang kita nagdepende sa bulan sa tuig, ug Pagsulbad sa yano nga linear regression equation - ang bugtong timaan diin nagdepende ang kita.

Ang pananglitan mao ang ingon-ingon, gikan sa punto sa pagtan-aw sa kondisyon nga pagsalig sa kita sa bulan sa tuig, ug gikan sa punto sa pagtan-aw sa gidaghanon sa mga kantidad - adunay gamay ra niini. Bisan pa, ang ingon nga pagpayano magpaposible, ingon sa ilang giingon, nga ipasabut, dili kanunay nga dali, ang materyal nga gisagol sa mga nagsugod. Ug usab ang kayano sa mga numero magtugot sa mga gusto nga masulbad ang panig-ingnan sa papel nga wala’y daghang gasto sa pagtrabaho.

Atong hunahunaon nga ang pagsalig nga gihatag sa panig-ingnan mahimong gibanabana nga maayo sa matematika nga equation sa usa ka yano (pares) nga linya sa pagbag-o sa porma:

Pagsulbad sa yano nga linear regression equation

diin Pagsulbad sa yano nga linear regression equation mao ang bulan diin nadawat ang kita, Pagsulbad sa yano nga linear regression equation - kita nga katumbas sa bulan, Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation mao ang mga regression coefficient sa gibanabana nga linya.

Matikdi nga ang coefficient Pagsulbad sa yano nga linear regression equation sagad gitawag nga bakilid o gradient sa gibanabana nga linya; nagrepresentar sa kantidad diin ang Pagsulbad sa yano nga linear regression equation kon kini mausab Pagsulbad sa yano nga linear regression equation.

Dayag nga, ang among tahas sa pananglitan mao ang pagpili sa ingon nga mga coefficient sa equation Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation, diin ang mga pagtipas sa among gikalkula nga mga kantidad sa kita sa bulan gikan sa tinuod nga mga tubag, i.e. ang mga kantidad nga gipresentar sa sample gamay ra.

Labing gamay nga square nga pamaagi

Sumala sa pinakagamay nga pamaagi sa mga kwadro, ang pagtipas kinahanglang kalkulahon pinaagi sa pagkuwadrado niini. Kini nga teknik nagtugot kanimo sa paglikay sa us aka pagkansela sa mga pagtipas kung sila adunay kaatbang nga mga timailhan. Pananglitan, kung sa usa ka kaso, ang pagtipas mao +5 (dugang lima), ug sa lain -5 (minus lima), unya ang sumada sa mga pagtipas magkansela sa usag usa ug mokabat sa 0 (zero). Posible nga dili kuwadrado ang pagtipas, apan gamiton ang kabtangan sa modulus ug unya ang tanan nga mga pagtipas mahimong positibo ug magtigum. Dili kami maghisgot niini nga punto sa detalye, apan gipakita lamang nga alang sa kasayon ​​​​sa mga kalkulasyon, naandan nga i-square ang deviation.

Kini ang hitsura sa pormula diin atong mahibal-an ang labing gamay nga kantidad sa mga squared deviation (mga sayup):

Pagsulbad sa yano nga linear regression equation

diin Pagsulbad sa yano nga linear regression equation usa ka function sa pagbanabana sa tinuod nga mga tubag (nga mao, ang kita nga among gikalkula),

Pagsulbad sa yano nga linear regression equation mao ang tinuod nga mga tubag (kita nga gihatag sa sample),

Pagsulbad sa yano nga linear regression equation mao ang sample index (gidaghanon sa bulan diin ang pagtipas determinado)

Atong ilahi ang function, ipasabot ang partial differential equation, ug andam nga mopadayon sa analytical solution. Apan una, magkuha kita usa ka mubo nga ekskursiyon bahin sa kung unsa ang pagkalainlain ug hinumdomi ang geometric nga kahulugan sa gigikanan.

Pagkalainlain

Ang pagkalainlain mao ang operasyon sa pagpangita sa gigikanan sa usa ka function.

Para sa unsa ang derivative? Ang derivative sa usa ka function nagpaila sa rate sa pagbag-o sa function ug nagsulti kanato sa direksyon niini. Kung ang derivative sa usa ka punto positibo, nan ang function modaghan; kung dili, ang function mokunhod. Ug kon mas dako ang bili sa absolute derivative, mas taas ang rate sa kausaban sa function values, ingon man ang steeper nga slope sa function graph.

Pananglitan, ubos sa mga kondisyon sa Cartesian coordinate system, ang bili sa derivative sa punto M(0,0) katumbas sa + 25 nagpasabot nga sa usa ka gihatag nga punto, kung ang kantidad gibalhin Pagsulbad sa yano nga linear regression equation sa tuo pinaagi sa usa ka naandan nga yunit, bili Pagsulbad sa yano nga linear regression equation nagdugang sa 25 nga naandan nga mga yunit. Sa graph kini morag usa ka taas nga pagtaas sa mga kantidad Pagsulbad sa yano nga linear regression equation gikan sa gihatag nga punto.

Laing pananglitan. Ang derivative nga bili managsama -0,1 nagpasabot nga sa dihang nabakwit Pagsulbad sa yano nga linear regression equation kada usa ka conventional unit, value Pagsulbad sa yano nga linear regression equation mikunhod lamang sa 0,1 conventional unit. Sa samang higayon, sa graph sa function, atong maobserbahan ang usa ka halos dili mamatikdan nga paubos nga bakilid. Ang pagdrowing og analohiya sa usa ka bukid, sama ra nga hinay kaayo kita nga nanaog sa usa ka malumo nga bakilid gikan sa usa ka bukid, dili sama sa miaging pananglitan, diin kinahanglan namon nga mosaka sa labi ka titip nga mga taluktok :)

Busa, human sa paglainlain sa function Pagsulbad sa yano nga linear regression equation pinaagi sa mga kalisud Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation, among gihubit ang 1st order partial differential equation. Human matino ang mga equation, makadawat kita og usa ka sistema sa duha ka equation, pinaagi sa pagsulbad diin kita makahimo sa pagpili sa maong mga bili sa mga coefficients Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation, diin ang mga kantidad sa katugbang nga mga gigikanan sa gihatag nga mga punto nagbag-o sa usa ka gamay kaayo nga kantidad, ug sa kaso sa usa ka analitikal nga solusyon wala magbag-o. Sa ato pa, ang error function sa nakit-an nga mga coefficient moabot sa labing gamay, tungod kay ang mga kantidad sa partial derivatives sa kini nga mga punto mahimong katumbas sa zero.

Busa, sumala sa mga lagda sa pagkalahi, ang partial derivative equation sa 1st order nga may kalabotan sa coefficient Pagsulbad sa yano nga linear regression equation kuhaon ang porma:

Pagsulbad sa yano nga linear regression equation

1st order partial derivative equation may kalabotan sa Pagsulbad sa yano nga linear regression equation kuhaon ang porma:

Pagsulbad sa yano nga linear regression equation

Ingon usa ka sangputanan, nakadawat kami usa ka sistema sa mga equation nga adunay usa ka yano nga solusyon sa analitikal:

magsugod{equation*}
magsugod{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
katapusan {mga kaso}
katapusan{equation*}

Sa dili pa sulbaron ang equation, i-preload nato, susiha nga husto ang loading, ug i-format ang datos.

Pag-load ug pag-format sa datos

Kini kinahanglan nga matikdan nga tungod sa kamatuoran nga alang sa analytical nga solusyon, ug sunod alang sa gradient ug stochastic gradient descent, atong gamiton ang code sa duha ka mga kalainan: gamit ang librarya. numpy ug sa walay paggamit niini, nan kinahanglan nato ang tukma nga pag-format sa datos (tan-awa ang code).

Data loading ug pagproseso code

# ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
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 '********************************************'

Paglaraw

Karon, pagkahuman namo, una, nag-load sa datos, ikaduha, gisusi ang pagkahusto sa pagkarga ug sa katapusan na-format ang datos, among ipahigayon ang unang visualization. Ang pamaagi nga sagad gigamit alang niini mao ang pairplot mga librarya Kadagatan sa dagat. Sa among pananglitan, tungod sa limitado nga mga numero, wala’y kapuslanan ang paggamit sa librarya Kadagatan sa dagat. Atong gamiton ang regular nga librarya matplotlib ug tan-awa lang ang scatterplot.

Scatterplot code

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()

Chart Num. 1 "Pagdepende sa kita sa bulan sa tuig"

Pagsulbad sa yano nga linear regression equation

Analitikal nga solusyon

Atong gamiton ang labing komon nga mga himan sa python ug pagsulbad sa sistema sa mga equation:

magsugod{equation*}
magsugod{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
katapusan {mga kaso}
katapusan{equation*}

Sumala sa lagda ni Cramer atong makit-an ang kinatibuk-ang determinant, ingon man ang mga determinant pinaagi sa Pagsulbad sa yano nga linear regression equation ug sa Pagsulbad sa yano nga linear regression equation, pagkahuman niini, gibahin ang determinant pinaagi sa Pagsulbad sa yano nga linear regression equation sa kinatibuk-ang determinant - pangitaa ang coefficient Pagsulbad sa yano nga linear regression equation, sa susama atong makita ang coefficient Pagsulbad sa yano nga linear regression equation.

Analytical nga solusyon code

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для расчСта коэффициСнтов 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)

Ania ang among nakuha:

Pagsulbad sa yano nga linear regression equation

Mao nga, ang mga kantidad sa mga coefficient nakit-an, ang kantidad sa mga squared deviations natukod. Magdrowing kita og tul-id nga linya sa scattering histogram subay sa nakit-an nga coefficients.

Kodigo sa linya sa pagbag-o

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для формирования массива рассчСтных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠΈ
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()

Chart Num. 2 β€œHusto ug kalkulado nga mga tubag”

Pagsulbad sa yano nga linear regression equation

Mahimo nimong tan-awon ang deviation graph alang sa matag bulan. Sa among kaso, dili kami makakuha og bisan unsang mahinungdanong praktikal nga bili gikan niini, apan among tagbawon ang among pagkamausisaon mahitungod sa unsa ka maayo ang yano nga linear regression equation nga nagpaila sa pagsalig sa kita sa bulan sa tuig.

Deviation chart code

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для формирования массива ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…
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()

Tsart Num. 3 β€œMga Pagtipas, %”

Pagsulbad sa yano nga linear regression equation

Dili perpekto, apan nahuman namo ang among buluhaton.

Atong isulat ang usa ka function nga, sa pagtino sa mga coefficients Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation naggamit sa librarya numpy, sa mas tukma, kita mosulat sa duha ka mga function: ang usa gamit ang usa ka pseudoinverse matrix (dili girekomendar sa praktis, tungod kay ang proseso mao ang computationally komplikado ug dili lig-on), ang usa sa paggamit sa usa ka matrix equation.

Analytical Solution Code (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

Atong itandi ang oras nga gigugol sa pagtino sa mga coefficient Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation, uyon sa 3 nga gipresentar nga mga pamaagi.

Code alang sa pagkalkula sa oras sa pagkalkula

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)

Pagsulbad sa yano nga linear regression equation

Uban sa gamay nga kantidad sa datos, usa ka "self-written" nga function ang mogawas sa unahan, nga nakit-an ang mga coefficient gamit ang pamaagi ni Cramer.

Karon mahimo ka nga magpadayon sa ubang mga paagi aron makit-an ang mga coefficient Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation.

Gradient nga Descent

Una, atong ipasabut kung unsa ang gradient. Sa yano nga pagkasulti, ang gradient usa ka bahin nga nagpaila sa direksyon sa labing taas nga pagtubo sa usa ka function. Sa analohiya sa pagsaka sa usa ka bukid, diin ang gradient nag-atubang kung diin ang pinakataas nga pagsaka sa tumoy sa bukid. Pagpalambo sa panig-ingnan uban sa bukid, atong nahinumduman nga sa pagkatinuod kita nagkinahanglan sa labing titip nga paglugsong aron sa pagkab-ot sa ubos nga yuta sa labing madali, nga mao, ang minimum - ang dapit diin ang function dili sa pagdugang o pagkunhod. Niini nga punto ang derivative mahimong katumbas sa zero. Busa, wala kita magkinahanglan og gradient, apan usa ka antigradient. Aron makit-an ang antigradient kinahanglan nimo nga padaghanon ang gradient sa -1 (minus usa).

Atong hatagan ug pagtagad ang kamatuoran nga ang usa ka function mahimong adunay daghang minima, ug sa pagkanaog sa usa niini gamit ang algorithm nga gisugyot sa ubos, dili na nato makit-an ang laing minimum, nga mahimong mas ubos kaysa sa nakit-an. Relax ta, dili kini hulga kanato! Sa among kaso nag-atubang kami sa usa ka minimum, tungod kay ang among gimbuhaton Pagsulbad sa yano nga linear regression equation sa graph usa ka regular nga parabola. Ug ingon nga nahibal-an naton tanan gikan sa kurso sa matematika sa eskuylahan, ang parabola adunay usa ra ka minimum.

Pagkahuman nahibal-an namon kung ngano nga kinahanglan namon ang usa ka gradient, ug usab nga ang gradient usa ka bahin, nga mao, usa ka vector nga adunay gihatag nga mga coordinate, nga parehas nga mga coefficient. Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation mahimo natong ipatuman ang gradient descent.

Sa dili pa magsugod, gisugyot ko nga basahon lang ang pipila ka mga tudling-pulong bahin sa algorithm sa pagkunsad:

  • Atong determinado sa usa ka pseudo-random nga paagi ang mga koordinasyon sa mga coefficient Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation. Sa among pananglitan, among mahibal-an ang mga coefficient duol sa zero. Kini usa ka komon nga praktis, apan ang matag kaso mahimong adunay kaugalingong praktis.
  • Gikan sa coordinate Pagsulbad sa yano nga linear regression equation ibawas ang bili sa 1st order partial derivative sa punto Pagsulbad sa yano nga linear regression equation. Busa, kung ang derivative positibo, nan ang function nagdugang. Busa, pinaagi sa pagkunhod sa bili sa derivative, kita molihok sa atbang nga direksyon sa pagtubo, nga mao, sa direksyon sa kagikan. Kung negatibo ang derivative, nan ang function sa kini nga punto mikunhod ug pinaagi sa pagkunhod sa kantidad sa derivative kita molihok sa direksyon sa pagkanaog.
  • Naghimo kami og susama nga operasyon sa coordinate Pagsulbad sa yano nga linear regression equation: ibawas ang bili sa partial derivative sa punto Pagsulbad sa yano nga linear regression equation.
  • Aron dili molukso sa labing gamay ug molupad sa lawom nga wanang, kinahanglan nga ibutang ang gidak-on sa lakang sa direksyon sa pagkanaog. Sa kinatibuk-an, mahimo nimong isulat ang usa ka tibuuk nga artikulo kung giunsa pagtakda ang lakang sa husto ug kung giunsa kini pagbag-o sa proseso sa pagkunsad aron makunhuran ang gasto sa pagkalkula. Apan karon kami adunay usa ka gamay nga lahi nga buluhaton sa unahan, ug among i-establisar ang gidak-on sa lakang gamit ang siyentipikong pamaagi sa "poke" o, ingon sa giingon nila sa sagad nga parlance, empirically.
  • Sa higayon nga kita gikan sa gihatag nga mga coordinate Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation ibawas ang mga kantidad sa mga derivatives, makakuha kami bag-ong mga coordinate Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation. Gikuha namon ang sunod nga lakang (pagkuha), gikan na sa kalkulado nga mga koordinasyon. Ug mao nga ang siklo magsugod pag-usab ug pag-usab, hangtud nga ang gikinahanglan nga convergence makab-ot.

Tanan! Karon andam na kami nga mangita sa kinahiladman nga bung-aw sa Mariana Trench. Magsugod na ta.

Code para sa gradient descent

# напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска Π±Π΅Π· использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 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

Pagsulbad sa yano nga linear regression equation

Nagdive kami sa pinakailawom sa Mariana Trench ug didto among nakit-an ang tanan nga parehas nga coefficient values Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation, nga mao gayod ang gipaabot.

Mag-dive na sab ta, karong panahona, ang atong sakyanan sa lawom nga dagat mapuno sa ubang mga teknolohiya, nga mao ang librarya. numpy.

Code para sa gradient descent (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

Pagsulbad sa yano nga linear regression equation
Mga kantidad sa coefficient Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation dili mausab.

Atong tan-awon kung giunsa ang pagbag-o sa sayup sa panahon sa gradient descent, nga mao, kung giunsa pagbag-o ang kantidad sa mga square deviation sa matag lakang.

Kodigo alang sa paglaraw sa mga kantidad sa mga squared deviation

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()

Graph Num. 4 "Sum sa mga squared deviation atol sa gradient descent"

Pagsulbad sa yano nga linear regression equation

Sa graph atong makita nga sa matag lakang ang kasaypanan mikunhod, ug human sa usa ka piho nga gidaghanon sa mga pagbalik-balik atong makita ang halos pinahigda nga linya.

Sa katapusan, atong banabanaon ang kalainan sa oras sa pagpatuman sa code:

Kodigo aron mahibal-an ang oras sa pagkalkula sa gradient descent

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)

Pagsulbad sa yano nga linear regression equation

Tingali nakahimo kita og usa ka butang nga sayup, apan pag-usab kini usa ka yano nga "gisulat sa balay" nga function nga wala mogamit sa librarya numpy milabaw sa oras sa pagkalkula sa usa ka function gamit ang library numpy.

Apan wala kami nagbarog, apan nagpadayon sa pagtuon sa laing makapahinam nga paagi aron masulbad ang yano nga linear regression equation. Magkita mi!

Stochastic gradient nga pagkanaog

Aron dali nga masabtan ang prinsipyo sa operasyon sa stochastic gradient descent, mas maayo nga mahibal-an ang mga kalainan niini gikan sa ordinaryo nga gradient descent. Kami, sa kaso sa gradient descent, sa mga equation sa derivatives sa Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation gigamit ang mga kantidad sa mga kantidad sa tanan nga mga bahin ug tinuod nga mga tubag nga anaa sa sample (nga mao, ang mga sumada sa tanan Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation). Sa stochastic gradient descent, dili namo gamiton ang tanang values ​​nga naa sa sample, but instead, pseudo-randomly pilia ang gitawag nga sample index ug gamiton ang values ​​niini.

Pananglitan, kung ang indeks determinado nga mahimong numero 3 (tulo), nan atong kuhaon ang mga kantidad Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation, unya gipulihan namon ang mga kantidad sa mga derivative equation ug gitino ang bag-ong mga coordinate. Pagkahuman, sa pagtino sa mga koordinasyon, kami usab pseudo-random nga nagtino sa sample index, gipulihan ang mga kantidad nga katumbas sa indeks sa partial differential equation, ug gitino ang mga coordinate sa bag-ong paagi. Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation ug uban pa. hangtud nga ang convergence mahimong berde. Sa una nga pagtan-aw, ingon og dili kini mahimo, apan kini mahimo. Tinuod nga angay hinumdoman nga ang sayup dili mokunhod sa matag lakang, apan adunay usa ka kalagmitan.

Unsa ang mga bentaha sa stochastic gradient descent kaysa sa naandan? Kung ang among sample nga gidak-on dako kaayo ug gisukod sa napulo ka libo nga mga kantidad, nan kini mas sayon ​​sa pagproseso, ingnon ta, usa ka random nga libo niini, kay sa tibuok sample. Dinhi diin ang stochastic gradient descent moabut sa pagdula. Sa among kahimtang, siyempre, dili kami makamatikod sa daghang kalainan.

Atong tan-awon ang code.

Code para sa stochastic gradient descent

# ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ стох.Π³Ρ€Π°Π΄.шага
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])

Pagsulbad sa yano nga linear regression equation

Gitan-aw namon pag-ayo ang mga coefficient ug nahibal-an namon ang among kaugalingon nga gipangutana ang pangutana nga "Sa unsang paagi mahimo kini?" Nakuha namon ang ubang mga kantidad sa coefficient Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation. Tingali ang stochastic gradient descent nakit-an ang labi ka maayo nga mga parameter alang sa equation? Ikasubo nga dili. Igo na ang pagtan-aw sa kadaghanon sa squared deviations ug tan-awa nga sa bag-ong mga kantidad sa mga coefficient, ang sayup mas dako. Wala mi magdali nga mawad-ag paglaom. Magbuhat ta ug graph sa pagbag-o sa sayup.

Kodigo alang sa paglaraw sa sumada sa mga squared deviation sa stochastic gradient descent

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()

Graph No. 5 "Sum sa mga squared deviation atol sa stochastic gradient descent"

Pagsulbad sa yano nga linear regression equation

Sa pagtan-aw sa eskedyul, ang tanan nahulog sa lugar ug karon atong ayuhon ang tanan.

Busa unsay nahitabo? Ang mosunod nahitabo. Kung kita random nga mopili sa usa ka bulan, nan kini alang sa pinili nga bulan nga ang atong algorithm nagtinguha sa pagpakunhod sa sayup sa pagkalkula sa kita. Dayon mipili kami og laing bulan ug balikon ang kalkulasyon, apan among gipakunhod ang sayop alang sa ikaduhang pinili nga bulan. Karon hinumdomi nga ang unang duha ka bulan nagtipas pag-ayo gikan sa linya sa yano nga linear regression equation. Kini nagpasabot nga kung ang bisan unsa niining duha ka bulan gipili, pinaagi sa pagkunhod sa sayup sa matag usa niini, ang among algorithm seryoso nga nagdugang sa sayup alang sa tibuok sample. Busa unsa ang buhaton? Ang tubag yano ra: kinahanglan nimo nga pakunhuran ang lakang sa pagpaubos. Pagkahuman, pinaagi sa pagkunhod sa lakang sa pagkanaog, ang sayup mohunong usab sa "paglukso" pataas ug paubos. O hinoon, ang "paglukso" nga sayup dili mohunong, apan dili kini mahimo nga dali :) Atong susihon.

Kodigo sa pagpadagan sa SGD nga adunay gagmay nga mga pag-uswag

# запустим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ² шаг Π² 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()

Pagsulbad sa yano nga linear regression equation

Graph Num. 6 "Sum sa mga squared deviations sa panahon sa stochastic gradient descent (80 thousand steps)"

Pagsulbad sa yano nga linear regression equation

Ang mga coefficient miuswag, apan dili gihapon maayo. Sa hypothetically, kini mahimong matul-id niining paagiha. Gipili namon, pananglitan, sa katapusan nga 1000 nga mga pag-uli ang mga kantidad sa mga coefficient diin nahimo ang labing gamay nga sayup. Tinuod, alang niini kinahanglan usab naton isulat ang mga kantidad sa mga coefficient mismo. Dili namo kini buhaton, apan hatagan pagtagad ang iskedyul. Kini tan-awon nga hapsay ug ang sayup ingon nga pagkunhod parehas. Sa pagkatinuod kini dili tinuod. Atong tan-awon ang una nga 1000 nga mga pag-uli ug itandi kini sa katapusan.

Code para sa SGD nga tsart (unang 1000 ka lakang)

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()

Graph Num. 7 "Sum sa squared deviations SGD (unang 1000 nga mga lakang)"

Pagsulbad sa yano nga linear regression equation

Graph No. 8 "Sum sa mga squared deviations SGD (katapusang 1000 nga mga lakang)"

Pagsulbad sa yano nga linear regression equation

Sa sinugdanan pa lang sa pagkanaog, atong naobserbahan ang medyo uniporme ug kusog nga pagkunhod sa sayop. Sa katapusan nga mga pag-uli, nakita namon nga ang sayup naglibot ug naglibot sa kantidad nga 1,475 ug sa pipila ka mga gutlo katumbas sa kini nga kamalaumon nga kantidad, apan pagkahuman mosaka pa kini ... Akong gisubli, mahimo nimong isulat ang mga kantidad sa mga coefficient Pagsulbad sa yano nga linear regression equation ΠΈ Pagsulbad sa yano nga linear regression equation, ug dayon pilia kadtong diin gamay ra ang sayup. Bisan pa, kami adunay usa ka labi ka grabe nga problema: kinahanglan namon nga mohimo og 80 ka libo nga mga lakang (tan-awa ang code) aron makuha ang mga kantidad nga hapit sa kamalaumon. Ug kini sukwahi na sa ideya sa pagtipig sa oras sa pagkalkula sa stochastic gradient descent nga may kalabotan sa gradient descent. Unsa ang matul-id ug mapauswag? Dili lisud nga mamatikdan nga sa unang mga pag-uli kita masaligon nga mopaubos ug, busa, kinahanglan nga magbilin kita og usa ka dako nga lakang sa unang mga pag-usab ug pagpakunhod sa lakang samtang kita nagpadayon. Dili namon kini buhaton sa kini nga artikulo - dugay na kaayo. Kadtong gusto makahunahuna sa ilang kaugalingon kung giunsa kini buhaton, dili kini lisud :)

Karon atong ipahigayon ang stochastic gradient descent gamit ang library numpy (ug dili ta mapandol sa mga bato nga atong giila sa sayo pa)

Code para sa Stochastic Gradient Descent (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

Pagsulbad sa yano nga linear regression equation

Ang mga kantidad nahimo nga hapit parehas sa kung kanus-a nga wala gigamit numpy. Apan, lohikal kini.

Atong hibal-an kung unsa ka dugay ang stochastic gradient nga pag-ubos.

Kodigo alang sa pagtino sa oras sa pagkalkula sa SGD (80 ka libo nga mga lakang)

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)

Pagsulbad sa yano nga linear regression equation

Ang dugang ngadto sa lasang, ang mas ngitngit nga mga panganod: pag-usab, ang "self-written" nga pormula nagpakita sa pinakamaayo nga resulta. Kining tanan nagsugyot nga kinahanglan nga adunay mas malalangon nga mga paagi sa paggamit sa librarya numpy, nga makapadali sa mga operasyon sa pagkalkula. Niini nga artikulo dili kita makakat-on mahitungod kanila. Adunay usa ka butang nga hunahunaon sa imong libre nga oras :)

Gipahayag namon

Sa wala pa ang pag-summarize, gusto nakong tubagon ang usa ka pangutana nga lagmit mitungha gikan sa among minahal nga magbabasa. Ngano, sa tinuud, ang ingon nga "torture" uban ang mga pagkanaog, ngano nga kinahanglan naton maglakaw pataas ug paubos sa bukid (kasagaran paubos) aron makit-an ang gipakabahandi nga kapatagan, kung naa sa atong mga kamot ang usa ka kusgan ug yano nga aparato, sa porma sa usa ka analitikal nga solusyon, nga diha-diha dayon nag-teleport kanato ngadto sa Tuo nga dapit?

Ang tubag niini nga pangutana anaa sa ibabaw. Karon atong gitan-aw ang usa ka yano kaayo nga pananglitan, diin ang tinuod nga tubag Pagsulbad sa yano nga linear regression equation depende sa usa ka sign Pagsulbad sa yano nga linear regression equation. Dili nimo kini makita kanunay sa kinabuhi, busa hunahunaa nga kita adunay 2, 30, 50 o daghan pa nga mga timailhan. Atong idugang kini nga linibo, o bisan napulo ka libo nga mga kantidad alang sa matag hiyas. Sa kini nga kaso, ang analitikal nga solusyon mahimong dili makasugakod sa pagsulay ug mapakyas. Sa baylo, ang gradient descent ug ang mga kalainan niini hinay-hinay apan sigurado nga magdala kanato nga mas duol sa tumong - ang minimum sa function. Ug ayaw kabalaka bahin sa katulin - tingali tan-awon namon ang mga paagi nga magtugot kanamo sa pagtakda ug pag-regulate sa gitas-on sa lakang (nga mao, katulin).

Ug karon ang aktuwal nga mubo nga summary.

Una, nanghinaut ko nga ang materyal nga gipresentar sa artikulo makatabang sa pagsugod sa "data scientists" sa pagsabut kung unsaon pagsulbad ang yano (ug dili lamang) mga linear regression equation.

Ikaduha, gitan-aw namon ang daghang mga paagi aron masulbad ang equation. Karon, depende sa sitwasyon, makapili ta sa labing haom sa pagsulbad sa problema.

Ikatulo, nakita namon ang gahum sa dugang nga mga setting, nga mao ang gradient descent step length. Kini nga parameter dili mapasagdan. Sama sa gihisgutan sa ibabaw, aron makunhuran ang gasto sa mga kalkulasyon, ang gitas-on sa lakang kinahanglan nga usbon sa panahon sa pagkunsad.

Ikaupat, sa among kaso, ang mga function nga "sinulat sa balay" nagpakita sa labing kaayo nga mga resulta sa oras alang sa mga kalkulasyon. Kini lagmit tungod sa dili labing propesyonal nga paggamit sa mga kapabilidad sa librarya numpy. Apan bisan pa niana, ang mosunod nga konklusyon nagsugyot sa iyang kaugalingon. Sa usa ka bahin, usahay takus nga pangutan-on ang natukod nga mga opinyon, ug sa laing bahin, dili kanunay angay nga komplikado ang tanan - sa kasukwahi, usahay ang usa ka yano nga paagi sa pagsulbad sa usa ka problema mas epektibo. Ug tungod kay ang among tumong mao ang pag-analisar sa tulo ka mga pamaagi sa pagsulbad sa usa ka simple nga linear regression equation, ang paggamit sa "self-written" functions igo na alang kanamo.

Literatura (o ingon niana)

1. Linear regression

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

2. Labing gamay nga mga kuwadrado nga pamaagi

mathprofi.ru/metod_naimenshih_kvadratov.html

3. Derivative

www.mathprofi.ru/chastnye_proizvodnye_primery.html

4. Gradient

mathprofi.ru/proizvodnaja_po_napravleniju_i_gradient.html

5. Gradient nga pagkanaog

habr.com/en/post/471458

habr.com/en/post/307312

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

6. NumPy librarya

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

Idugang sa usa ka comment