Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Tsab xov xwm tham txog ntau txoj hauv kev los txiav txim siab qhov sib npaug ntawm lej ntawm ib qho yooj yim (paired) kab regression.

Txhua txoj hauv kev los daws qhov sib npaug sib tham ntawm no yog ua raws li qhov tsawg tshaj plaws squares txoj kev. Cia peb qhia txog cov txheej txheem hauv qab no:

  • Kev tshuaj ntsuam xyuas
  • Gradient qhovntsej thiaj tsis mob
  • Stochastic gradient qhovntsej thiaj tsis mob

Rau txhua txoj hauv kev los daws qhov sib npaug ntawm txoj kab ncaj nraim, tsab xov xwm muab ntau yam haujlwm, uas feem ntau muab faib ua cov ntawv sau tsis siv lub tsev qiv ntawv. numpy thiab cov uas siv rau kev xam numpy. Nws yog ntseeg hais tias txawj siv numpy yuav txo cov nqi suav.

Tag nrho cov cai muab rau hauv tsab xov xwm yog sau ua lus sej 2.7 siv Jupyter Phau Ntawv. Lub hauv paus code thiab cov ntaub ntawv nrog cov ntaub ntawv piv txwv tau muab tso rau Github

Cov kab lus no yog tsom rau ob tus neeg pib tshiab thiab cov neeg uas twb tau pib maj mam kawm txog qhov dav dav hauv kev txawj ntse - tshuab kev kawm.

Txhawm rau piav qhia cov khoom, peb siv ib qho piv txwv yooj yim heev.

Piv txwv tej yam kev mob

Peb muaj tsib yam tseem ceeb uas qhia txog kev vam khom Y los ntawm X (Table No. 1):

Table No. 1 β€œPiv txwv tej yam kev mob”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Peb yuav xav tias qhov muaj nqis Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yog lub hli ntawm lub xyoo, thiab Kev daws qhov sib npaug ntawm qhov yooj yim linear regression - nyiaj tau los lub hli no. Hauv lwm lo lus, cov nyiaj tau los nyob ntawm lub hli ntawm lub xyoo, thiab Kev daws qhov sib npaug ntawm qhov yooj yim linear regression - tsuas yog kos npe rau qhov nyiaj tau los nyob ntawm.

Qhov piv txwv yog li ntawd, ob qho tib si los ntawm qhov pom ntawm qhov kev cia siab ntawm cov nyiaj tau los ntawm lub hli ntawm lub xyoo, thiab los ntawm qhov pom ntawm tus naj npawb ntawm cov nqi - muaj tsawg heev ntawm lawv. Txawm li cas los xij, xws li kev yooj yim yuav ua rau nws ua tau, raws li lawv hais, los piav qhia, tsis yog ib txwm yooj yim, cov khoom siv uas cov neeg pib pib assimilate. Thiab kuj qhov yooj yim ntawm cov lej yuav tso cai rau cov neeg uas xav daws qhov piv txwv ntawm daim ntawv yam tsis muaj nqi ua haujlwm tseem ceeb.

Cia peb xav tias qhov kev vam khom tau muab rau hauv qhov piv txwv tuaj yeem kwv yees tau zoo los ntawm kev sib npaug ntawm lej ntawm ib qho yooj yim (paired) regression kab ntawm daim ntawv:

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

qhov twg Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yog lub hli uas tau txais cov nyiaj tau los, Kev daws qhov sib npaug ntawm qhov yooj yim linear regression - cov nyiaj tau los sib xws rau lub hli, Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yog cov regression coefficients ntawm txoj kab kwv yees.

Nco ntsoov tias tus coefficient Kev daws qhov sib npaug ntawm qhov yooj yim linear regression feem ntau hu ua txoj kab nqes lossis gradient ntawm txoj kab kwv yees; sawv cev tus nqi uas tus Kev daws qhov sib npaug ntawm qhov yooj yim linear regression thaum nws hloov Kev daws qhov sib npaug ntawm qhov yooj yim linear regression.

Pom tseeb, peb txoj haujlwm hauv qhov piv txwv yog xaiv cov coefficients hauv kab zauv Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, ntawm qhov sib txawv ntawm peb cov nyiaj khwv tau los ntawm lub hli los ntawm cov lus teb tseeb, i.e. qhov tseem ceeb uas muaj nyob rau hauv cov qauv yuav tsawg heev.

Yam tsawg kawg nkaus square method

Raws li qhov tsawg tshaj plaws squares txoj kev, qhov sib txawv yuav tsum tau xam los ntawm squaring nws. Cov txheej txheem no tso cai rau koj kom tsis txhob muaj kev sib koom ua ke ntawm kev sib txawv yog tias lawv muaj cov cim qhia. Piv txwv li, yog tias nyob rau hauv ib rooj plaub, qhov sib txawv yog +5 (ntxiv rau tsib), thiab lwm yam -5 ( rho tawm tsib), tom qab ntawd cov lej ntawm qhov sib txawv yuav tshem tawm ib leeg thiab tus lej rau 0 (zero). Nws yog ib qho ua tau kom tsis txhob square qhov sib txawv, tab sis siv cov cuab yeej ntawm lub modulus thiab tom qab ntawd tag nrho cov kev sib txawv yuav zoo thiab yuav sib sau. Peb yuav tsis nyob ntawm qhov kev nthuav dav no, tab sis tsuas yog qhia tias kom yooj yim ntawm kev suav, nws yog ib txwm ua rau square qhov sib txawv.

Qhov no yog qhov formula zoo li uas peb yuav txiav txim siab qhov tsawg kawg nkaus ntawm squared deviations (yuam kev):

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

qhov twg Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yog lub luag haujlwm ntawm kwv yees cov lus teb tseeb (uas yog, cov nyiaj tau los peb suav),

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yog cov lus teb tseeb (cov nyiaj tau los hauv cov qauv),

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yog tus qauv ntsuas (tus naj npawb ntawm lub hli uas qhov sib txawv yog txiav txim siab)

Cia peb ua qhov sib txawv ntawm kev ua haujlwm, txhais cov kab zauv sib txawv ib nrab, thiab npaj txhij mus rau qhov kev tshuaj ntsuam xyuas. Tab sis ua ntej, cia peb mus ncig ua si luv luv txog qhov sib txawv yog dab tsi thiab nco ntsoov lub ntsiab lus geometric ntawm qhov derivative.

Kev sib txawv

Kev sib txawv yog kev ua haujlwm ntawm kev nrhiav qhov sib txawv ntawm kev ua haujlwm.

Dab tsi yog derivative siv rau? Lub derivative ntawm ib tug muaj nuj nqi characterizes tus nqi ntawm kev hloov ntawm lub functionality thiab qhia peb nws cov kev taw qhia. Yog hais tias tus derivative ntawm ib tug muab point yog qhov zoo, ces qhov muaj nuj nqi nce; txwv tsis pub, muaj nuj nqi txo. Thiab qhov ntau dua tus nqi ntawm qhov tseeb derivative, qhov siab dua qhov kev hloov pauv ntawm cov txiaj ntsig kev ua haujlwm, nrog rau qhov siab tshaj qhov nqes hav ntawm cov duab ua haujlwm.

Piv txwv li, nyob rau hauv cov xwm txheej ntawm Cartesian kev tswj hwm qhov system, tus nqi ntawm cov khoom siv ntawm qhov taw tes M (0,0) yog sib npaug rau + 25 txhais tau hais tias ntawm ib qho chaw, thaum tus nqi hloov Kev daws qhov sib npaug ntawm qhov yooj yim linear regression mus rau txoj cai los ntawm ib tug pa unit, tus nqi Kev daws qhov sib npaug ntawm qhov yooj yim linear regression nce los ntawm 25 pa units. Ntawm daim duab nws zoo li ib qho kev nce siab hauv cov txiaj ntsig Kev daws qhov sib npaug ntawm qhov yooj yim linear regression los ntawm qhov muab.

Lwm qhov piv txwv. Tus nqi derivative yog sib npaug -0,1 txhais tau tias thaum hloov chaw Kev daws qhov sib npaug ntawm qhov yooj yim linear regression nyob rau hauv ib tug pa unit, tus nqi Kev daws qhov sib npaug ntawm qhov yooj yim linear regression txo los ntawm tsuas yog 0,1 chav tsev. Nyob rau tib lub sijhawm, ntawm daim duab ntawm kev ua haujlwm, peb tuaj yeem pom qhov qis qis qis qis. Kos ib qho piv txwv nrog lub roob, nws zoo li yog tias peb maj mam nqis los ntawm txoj kab nqes maj mam los ntawm lub roob, tsis zoo li qhov piv txwv yav dhau los, qhov twg peb yuav tsum tau nce toj siab heev :)

Yog li, tom qab sib txawv ntawm qhov ua haujlwm Kev daws qhov sib npaug ntawm qhov yooj yim linear regression los ntawm qhov txawv Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, peb txhais 1st kev txiav txim ib nrab sib npaug sib npaug. Tom qab txiav txim siab qhov sib npaug, peb yuav tau txais ib qhov system ntawm ob qhov sib npaug, los ntawm kev daws teeb meem uas peb yuav tuaj yeem xaiv cov txiaj ntsig zoo li no ntawm cov coefficients. Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, uas qhov tseem ceeb ntawm qhov sib thooj derivatives ntawm cov ntsiab lus tau hloov pauv los ntawm qhov tsawg, tsawg heev, thiab nyob rau hauv cov ntaub ntawv ntawm kev tshuaj ntsuam xyuas tsis hloov txhua. Hauv lwm lo lus, qhov yuam kev ua haujlwm ntawm qhov pom coefficients yuav ncav cuag qhov tsawg kawg nkaus, txij li cov txiaj ntsig ntawm ib feem derivatives ntawm cov ntsiab lus no yuav sib npaug rau xoom.

Yog li, raws li cov cai ntawm kev sib txawv, ib feem ntawm qhov sib npaug ntawm qhov kev txiav txim thib 1 nrog rau kev sib piv ntawm cov coefficient. Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yuav ua daim ntawv:

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

1st order partial derivative equation with respect to Kev daws qhov sib npaug ntawm qhov yooj yim linear regression yuav ua daim ntawv:

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Yog li ntawd, peb tau txais ib qho kev sib npaug sib npaug uas muaj cov kev tshuaj ntsuam xyuas yooj yim:

pib{equation*}
pib{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
kawg{cases}
kawg {equation*}

Ua ntej yuav daws qhov sib npaug, cia peb preload, xyuas tias qhov chaw thau khoom yog lawm, thiab format cov ntaub ntawv.

Loading thiab formatting cov ntaub ntawv

Nws yuav tsum tau muab sau tseg tias vim lub fact tias rau lub analytical kev daws teeb meem, thiab tom qab ntawd rau gradient thiab stochastic gradient qhovntsej thiaj tsis mob, peb yuav siv cov cai nyob rau hauv ob variations: siv lub tsev qiv ntawv. numpy thiab tsis siv nws, ces peb yuav xav tau cov ntaub ntawv tsim nyog (saib code).

Cov ntaub ntawv thauj khoom thiab kev ua haujlwm 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 '********************************************'

Kev Pom Kev

Tam sim no, tom qab peb muaj, thawj zaug, thauj cov ntaub ntawv, thib ob, tshawb xyuas qhov tseeb ntawm kev thauj khoom thiab thaum kawg formatted cov ntaub ntawv, peb yuav ua tiav thawj qhov kev pom. Txoj kev feem ntau siv rau qhov no yog kev sib tw cov tsev qiv ntawv Seab Ua Si. Hauv peb qhov piv txwv, vim muaj tus lej tsawg, tsis muaj qhov taw qhia siv lub tsev qiv ntawv Seab Ua Si. Peb yuav siv lub tsev qiv ntawv tsis tu ncua matplotlib thiab cia li saib lub 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()

Daim duab No. 1 β€œKev vam meej ntawm cov nyiaj tau los ntawm lub hli ntawm lub xyoo”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Kev tshuaj ntsuam xyuas

Cia peb siv cov cuab yeej tshaj plaws hauv nab hab sej thiab daws qhov system ntawm equations:

pib{equation*}
pib{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
kawg{cases}
kawg {equation*}

Raws li Cramer txoj cai peb yuav pom cov kev txiav txim dav dav, nrog rau kev txiav txim los ntawm Kev daws qhov sib npaug ntawm qhov yooj yim linear regression thiab los ntawm Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, tom qab ntawd, faib cov determinant los ntawm Kev daws qhov sib npaug ntawm qhov yooj yim linear regression mus rau qhov kev txiav txim dav dav - nrhiav cov coefficient Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, zoo ib yam li peb pom cov coefficient Kev daws qhov sib npaug ntawm qhov yooj yim linear regression.

analytical solution 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)

Nov yog qhov peb tau txais:

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Yog li, cov txiaj ntsig ntawm cov coefficients tau pom, qhov sib npaug ntawm cov squared deviations tau tsim. Cia peb kos ib txoj kab ncaj nraim ntawm qhov tawg ntawm histogram raws li qhov pom coefficients.

Regression kab code

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

Daim duab No. 2 β€œCov lus teb raug thiab xam”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Koj tuaj yeem saib cov duab sib txawv rau txhua lub hlis. Hauv peb qhov xwm txheej, peb yuav tsis muab cov txiaj ntsig tseem ceeb los ntawm nws, tab sis peb yuav txaus siab rau peb txoj kev xav paub txog qhov yooj yim linear regression equation characterizes lub dependence ntawm cov nyiaj tau los ntawm lub hli ntawm lub xyoo.

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

Daim duab No. 3 β€œDeviations, %”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Tsis zoo tag nrho, tab sis peb ua tiav peb txoj haujlwm.

Cia peb sau ib txoj haujlwm uas, txhawm rau txiav txim siab cov coefficients Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression siv lub tsev qiv ntawv numpy, ntau dua qhov tseeb, peb yuav sau ob txoj haujlwm: ib qho siv pseudoinverse matrix (tsis pom zoo hauv kev xyaum, vim tias cov txheej txheem suav nrog qhov nyuaj thiab tsis ruaj khov), thiab lwm yam siv qhov sib npaug matrix.

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

Cia peb sib piv lub sij hawm siv los txiav txim cov coefficients Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, raws li 3 txoj hauv kev tau nthuav tawm.

Code rau xam lub sij hawm xam

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)

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Nrog ib tug me me ntawm cov ntaub ntawv, ib tug "tus kheej-sau" muaj nuj nqi los ua ntej, uas pom cov coefficients siv Cramer txoj kev.

Tam sim no koj tuaj yeem txav mus rau lwm txoj hauv kev los nrhiav cov coefficients Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression.

Gradient qhovntsej thiaj tsis mob

Ua ntej, cia peb txhais qhov gradient yog dab tsi. Yooj yim muab tso, gradient yog ib ntu uas qhia txog kev loj hlob siab tshaj plaws ntawm kev ua haujlwm. Los ntawm kev sib piv nrog kev nce toj roob, qhov twg lub ntsej muag gradient yog qhov chaw siab tshaj plaws nce mus rau saum lub roob. Tsim cov piv txwv nrog lub roob, peb nco ntsoov tias qhov tseeb peb xav tau qhov chaw siab tshaj plaws kom ncav cuag qhov chaw qis kom sai li sai tau, uas yog, qhov tsawg kawg nkaus - qhov chaw ua haujlwm tsis nce lossis txo. Hauv qhov no, qhov derivative yuav muab sib npaug rau xoom. Yog li ntawd, peb tsis xav tau gradient, tab sis muaj antigradient. Yuav kom nrhiav tau cov antigradient koj tsuas yog yuav tsum tau muab cov gradient los ntawm -1 (tso ib).

Cia peb them sai sai rau qhov tseeb tias ib qho kev ua haujlwm tuaj yeem muaj ntau yam minima, thiab tau nqis los rau hauv ib qho ntawm lawv siv cov algorithm uas tau hais hauv qab no, peb yuav tsis tuaj yeem nrhiav lwm yam tsawg kawg nkaus, uas tej zaum yuav qis dua qhov pom. Cia peb so, qhov no tsis yog kev hem thawj rau peb! Hauv peb qhov xwm txheej peb tab tom cuam tshuam nrog qhov tsawg kawg nkaus, txij li peb txoj haujlwm Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ntawm daim duab yog ib txwm parabola. Thiab raws li peb txhua tus yuav tsum paub zoo los ntawm peb lub tsev kawm ntawv chav kawm lej, parabola tsuas muaj tsawg kawg nkaus xwb.

Tom qab peb pom tias yog vim li cas peb xav tau ib qho gradient, thiab tseem hais tias qhov gradient yog ib ntu, uas yog, vector nrog muab cov kev tswj hwm, uas yog tib coefficients. Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression Peb tuaj yeem ua qhov gradient qhovntsej thiaj tsis mob.

Ua ntej pib, kuv xav kom nyeem ob peb kab lus hais txog qhovntsej thiaj tsis mob:

  • Peb txiav txim siab nyob rau hauv ib tug pseudo-random yam lub coordinates ntawm cov coefficients Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression. Hauv peb qhov piv txwv, peb yuav txhais cov coefficients zero. Qhov no yog ib qho kev coj ua, tab sis txhua rooj plaub yuav muaj nws tus kheej xyaum.
  • Los ntawm kev sib koom tes Kev daws qhov sib npaug ntawm qhov yooj yim linear regression rho tus nqi ntawm qhov kev txiav txim thib 1 ib nrab derivative ntawm qhov taw tes Kev daws qhov sib npaug ntawm qhov yooj yim linear regression. Yog li, yog tias qhov derivative yog qhov zoo, ces qhov kev ua haujlwm nce. Yog li ntawd, los ntawm kev rho tawm tus nqi ntawm qhov derivative, peb yuav txav mus rau qhov sib txawv ntawm kev loj hlob, uas yog, nyob rau hauv kev coj ntawm qhovntsej thiaj tsis mob. Yog hais tias tus derivative tsis zoo, ces qhov kev ua ntawm qhov no txo ​​qis thiab los ntawm kev rho tawm tus nqi ntawm qhov derivative peb txav mus rau qhov kev taw qhia ntawm qhovntsej thiaj tsis mob.
  • Peb ua haujlwm zoo sib xws nrog kev sib koom tes Kev daws qhov sib npaug ntawm qhov yooj yim linear regression: rho tawm tus nqi ntawm ib feem derivative ntawm qhov taw tes Kev daws qhov sib npaug ntawm qhov yooj yim linear regression.
  • Txhawm rau kom tsis txhob dhia dhau qhov tsawg kawg nkaus thiab ya mus rau hauv qhov chaw sib sib zog nqus, nws yog ib qho tsim nyog los teeb tsa cov kauj ruam loj nyob rau hauv qhov kev taw qhia ntawm qhovntsej thiaj tsis mob. Feem ntau, koj tuaj yeem sau tag nrho tsab xov xwm hais txog yuav ua li cas los teeb tsa cov kauj ruam kom raug thiab yuav hloov pauv li cas thaum lub sij hawm qhovntsej thiaj tsis mob thiaj li txo tau cov nqi suav. Tab sis tam sim no peb muaj ib txoj hauj lwm sib txawv me ntsis ua ntej ntawm peb, thiab peb yuav tsim cov kauj ruam loj uas siv txoj kev tshawb fawb ntawm "poke" los yog, raws li lawv hais nyob rau hauv ntau parlance, empirically.
  • Thaum peb yog los ntawm qhov muab coordinates Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression rho tawm qhov tseem ceeb ntawm cov derivatives, peb tau txais kev tswj hwm tshiab Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression. Peb ua cov kauj ruam tom ntej (subtraction), twb tau los ntawm kev xam qhov chaw. Thiab yog li ntawd lub voj voog pib dua thiab dua, kom txog rau thaum lub convergence yuav tsum tau tiav.

Txhua tus! Tam sim no peb npaj siab mus nrhiav qhov tob tshaj plaws ntawm Mariana Trench. Cia peb pib.

Code rau gradient qhovntsej thiaj tsis mob

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

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Peb dhia mus rau hauv qab ntawm Mariana Trench thiab nyob ntawd peb pom tag nrho cov txiaj ntsig tib coefficient Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, uas yog raws nraim qhov yuav tsum tau.

Cia wb mus dhia dej, tsuas yog lub sijhawm no, peb lub tsheb sib sib zog nqus dej hiav txwv yuav muaj lwm yam thev naus laus zis, uas yog lub tsev qiv ntawv numpy.

Code rau gradient qhovntsej thiaj tsis mob (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

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression
Cov nqi coefficient Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression hloov tsis tau.

Cia peb saib yuav ua li cas qhov yuam kev hloov thaum lub sij hawm gradient qhovntsej thiaj tsis mob, uas yog, yuav ua li cas cov sum ntawm squared deviations hloov nrog txhua kauj ruam.

Code rau plotting sums ntawm squared deviations

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 No. 4 β€œSum of squared deviations during gradient descent”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Ntawm daim duab peb pom tias nrog txhua kauj ruam qhov kev ua yuam kev txo qis, thiab tom qab qee qhov kev rov ua dua peb saib yuav luag kab rov tav.

Thaum kawg, cia peb kwv yees qhov sib txawv ntawm lub sijhawm ua tiav code:

Code los txiav txim gradient qhovntsej thiaj tsis suav lub sijhawm

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)

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Tej zaum peb tab tom ua ib yam dab tsi tsis ncaj ncees lawm, tab sis dua nws yog qhov yooj yim "sau hauv tsev" ua haujlwm uas tsis siv lub tsev qiv ntawv numpy outperforms lub sij hawm xam ntawm ib tug muaj nuj nqi siv lub tsev qiv ntawv numpy.

Tab sis peb tsis nyob twj ywm, tab sis tab tom mus rau kev kawm lwm txoj kev zoo siab los daws qhov yooj yim linear regression equation. Ntsib!

Stochastic gradient qhovntsej thiaj tsis mob

Yuav kom nkag siab sai sai rau lub hauv paus ntsiab lus ntawm kev ua haujlwm ntawm stochastic gradient qhovntsej thiaj tsis mob, nws yog qhov zoo dua los txiav txim siab nws qhov sib txawv ntawm qhov qhovntsej thiaj tsis zoo. Peb, nyob rau hauv cov ntaub ntawv ntawm gradient qhovntsej thiaj tsis mob, nyob rau hauv qhov sib npaug ntawm derivatives ntawm Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression siv cov sums ntawm qhov tseem ceeb ntawm tag nrho cov nta thiab cov lus teb tseeb muaj nyob rau hauv cov qauv (uas yog, cov sums ntawm tag nrho cov Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression). Nyob rau hauv stochastic gradient qhovntsej thiaj tsis mob, peb yuav tsis siv tag nrho cov txiaj ntsig tam sim no hauv cov qauv, tab sis hloov pauv, pseudo-randomly xaiv qhov hu ua qauv ntsuas thiab siv nws cov txiaj ntsig.

Piv txwv li, yog tias qhov ntsuas tau txiav txim siab yog tus lej 3 (peb), ces peb muab qhov tseem ceeb Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, tom qab ntawd peb hloov cov txiaj ntsig mus rau qhov sib npaug sib npaug thiab txiav txim siab cov kev tswj hwm tshiab. Tom qab ntawd, tau txiav txim siab qhov kev sib koom ua ke, peb rov pseudo-randomly txiav txim siab tus qauv ntsuas, hloov cov txiaj ntsig zoo sib xws rau qhov Performance index mus rau qhov sib npaug ntawm qhov sib txawv, thiab txiav txim siab cov kev tswj hwm hauv txoj kev tshiab. Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression lwm. kom txog thaum lub convergence hloov ntsuab. Thaum xub thawj siab ib muag, tej zaum nws yuav tsis zoo li qhov no yuav ua tau tag nrho, tab sis nws ua tau. Nws yog qhov tseeb tias nws tsim nyog sau cia tias qhov yuam kev tsis txo qis nrog txhua kauj ruam, tab sis yeej muaj qhov nyiam.

Dab tsi yog qhov zoo ntawm stochastic gradient qhovntsej thiaj tsis mob tshaj qhov qub? Yog tias peb cov qauv loj loj thiab ntsuas hauv kaum tawm txhiab tus nqi, ces nws yooj yim dua rau kev ua, hais, ib txhiab txhiab ntawm lawv, tsis yog tag nrho cov qauv. Qhov no yog qhov twg stochastic gradient qhovntsej thiaj tsis mob tuaj rau hauv kev ua si. Hauv peb qhov xwm txheej, tau kawg, peb yuav tsis pom ntau qhov sib txawv.

Cia peb saib cov cai.

Code rau stochastic gradient qhovntsej thiaj tsis mob

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

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Peb ua tib zoo saib cov coefficients thiab ntes peb tus kheej nug cov lus nug "Qhov no yuav ua li cas?" Peb tau txais lwm tus nqi coefficient Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression. Tej zaum stochastic gradient qhovntsej thiaj tsis pom qhov zoo tshaj plaws rau qhov sib npaug? Hmoov tsis tsis muaj. Nws yog txaus los saib cov lej ntawm squared deviations thiab pom tias nrog cov txiaj ntsig tshiab ntawm cov coefficients, qhov yuam kev ntau dua. Peb tsis maj mus poob siab. Cia peb tsim ib daim duab ntawm qhov kev hloov pauv yuam kev.

Code rau plotting cov sum ntawm squared deviations nyob rau hauv stochastic gradient qhovntsej thiaj tsis mob

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 of squared deviations during stochastic gradient descent”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Saib ntawm lub sijhawm, txhua yam poob rau hauv qhov chaw thiab tam sim no peb yuav kho txhua yam.

Yog li ntawd ua li cas? Cov nram qab no tshwm sim. Thaum peb random xaiv ib lub hlis, ces nws yog rau lub hli xaiv uas peb algorithm nrhiav kom txo tau qhov yuam kev nyob rau hauv xam cov nyiaj tau los. Tom qab ntawd peb xaiv lwm lub hlis thiab rov ua qhov kev suav, tab sis peb txo qhov yuam kev rau lub hli thib ob. Tam sim no nco ntsoov tias thawj ob lub hlis sib txawv los ntawm txoj kab ntawm qhov yooj yim linear regression equation. Qhov no txhais tau hais tias thaum twg ib qho ntawm ob lub hlis no raug xaiv, los ntawm kev txo qhov yuam kev ntawm txhua tus ntawm lawv, peb cov algorithm ua rau muaj qhov yuam kev rau tag nrho cov qauv. Yog li yuav ua li cas? Cov lus teb yog yooj yim: koj yuav tsum tau txo qis qhov nqis tes ua. Tom qab tag nrho, los ntawm kev txo qis qhov nqis tes ua, qhov yuam kev tseem yuav nres "dhia" nce thiab nqis. Los yog theej, qhov yuam kev "dhia" yuav tsis nres, tab sis nws yuav tsis ua sai sai :) Cia peb kuaj.

Code khiav SGD nrog me me increments

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

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Graph No. 6 "Sum of squared deviations thaum lub sij hawm stochastic gradient qhovntsej thiaj tsis mob (80 txhiab kauj ruam)"

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Cov coefficients tau txhim kho, tab sis tseem tsis zoo. Hypothetically, qhov no tuaj yeem kho tau li no. Peb xaiv, piv txwv li, nyob rau hauv lub xeem 1000 iterations qhov tseem ceeb ntawm cov coefficients uas qhov tsawg kawg nkaus yuam kev. Muaj tseeb, rau qhov no peb kuj yuav tau sau cov nqi ntawm cov coefficients lawv tus kheej. Peb yuav tsis ua qhov no, tab sis ua tib zoo saib xyuas lub sijhawm. Nws zoo nkaus li du thiab qhov yuam kev zoo li txo qis sib npaug. Qhov tseeb qhov no tsis muaj tseeb. Cia peb saib thawj 1000 iterations thiab muab piv rau qhov kawg.

Code rau SGD daim ntawv (thawj 1000 kauj ruam)

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 No. 7 β€œSum of squared deviations SGD (thawj 1000 kauj ruam)”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Graph No. 8 β€œSum of squared deviations SGD (kawg 1000 kauj ruam)”

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Nyob rau ntawm qhov pib ntawm qhovntsej thiaj tsis mob, peb pom ib qho kev sib haum xeeb thiab kev poob qis hauv qhov yuam kev. Nyob rau hauv lub xeem iterations, peb pom tias qhov yuam kev mus ib ncig thiab ib ncig ntawm tus nqi ntawm 1,475 thiab nyob rau hauv tej lub sij hawm txawm sib npaug no optimal tus nqi, tab sis ces nws tseem nce mus ... Kuv rov hais dua, koj tuaj yeem sau cov nqi ntawm cov coefficients Kev daws qhov sib npaug ntawm qhov yooj yim linear regression ΠΈ Kev daws qhov sib npaug ntawm qhov yooj yim linear regression, thiab tom qab ntawd xaiv cov uas qhov yuam kev tsawg tsawg. Txawm li cas los xij, peb muaj teeb meem loj dua: peb yuav tsum tau ua 80 txhiab kauj ruam (saib cov cai) kom tau txais txiaj ntsig ze rau qhov zoo. Thiab qhov no twb contradicts lub tswv yim ntawm kev txuag lub sij hawm xam nrog stochastic gradient qhovntsej thiaj tsis mob rau gradient qhovntsej thiaj tsis mob. Dab tsi tuaj yeem kho thiab txhim kho? Nws tsis yog qhov nyuaj kom pom tias nyob rau hauv thawj iterations peb muaj kev ntseeg siab yuav nqis mus thiab, yog li ntawd, peb yuav tsum tawm ib kauj ruam loj nyob rau hauv thawj iterations thiab txo cov kauj ruam thaum peb mus rau pem hauv ntej. Peb yuav tsis ua qhov no hauv kab lus no - nws twb ntev dhau lawm. Cov neeg uas xav tuaj yeem xav txog lawv tus kheej yuav ua li cas, nws tsis yooj yim :)

Tam sim no cia peb ua stochastic gradient qhovntsej thiaj tsis mob siv lub tsev qiv ntawv numpy (thiab cia peb tsis txhob ntog rau lub pob zeb uas peb tau txheeb xyuas ua ntej)

Code rau Stochastic Gradient qhovntsej thiaj tsis mob (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

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Cov txiaj ntsig tau hloov mus yuav luag tib yam li thaum nqis los tsis siv numpy. Txawm li cas los xij, qhov no yog qhov laj thawj.

Cia peb kawm seb ntev npaum li cas stochastic gradient descents coj peb.

Code rau kev txiav txim SGD xam lub sij hawm (80 txhiab kauj ruam)

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)

Kev daws qhov sib npaug ntawm qhov yooj yim linear regression

Ntxiv mus rau hauv hav zoov, qhov tsaus ntuj ntawm huab: dua, "tus kheej-sau" mis qhia tau hais tias qhov zoo tshaj plaws. Tag nrho cov no qhia tias yuav tsum muaj txoj hauv kev yooj yim dua los siv lub tsev qiv ntawv numpy, uas tiag tiag ua kom suav cov haujlwm. Hauv kab lus no peb yuav tsis kawm txog lawv. Yuav muaj qee yam xav txog hauv koj lub sijhawm ua haujlwm :)

Peb sau ua ke

Ua ntej xaus lus, kuv xav teb cov lus nug uas feem ntau yuav tshwm sim los ntawm peb cov neeg nyeem ntawv. Yog vim li cas, qhov tseeb, xws li "kev tsim txom" nrog cov xeeb leej xeeb ntxwv, yog vim li cas peb thiaj li yuav tsum tau taug kev nce toj thiab nqis roob (feem ntau nqes) thiaj li yuav nrhiav tau cov khoom muaj nqis qis, yog tias peb muaj nyob hauv peb txhais tes xws li cov cuab yeej muaj zog thiab yooj yim, hauv daim ntawv ntawm kev tshuaj ntsuam xyuas, uas instantly teleports peb mus rau qhov chaw?

Lo lus teb rau lo lus nug no yog nyob ntawm qhov chaw. Tam sim no peb tau saib ib qho piv txwv yooj yim heev, uas cov lus teb tseeb yog Kev daws qhov sib npaug ntawm qhov yooj yim linear regression nyob ntawm ib qho kos npe Kev daws qhov sib npaug ntawm qhov yooj yim linear regression. Koj tsis pom qhov no ntau zaus hauv lub neej, yog li cia peb xav tias peb muaj 2, 30, 50 lossis ntau dua. Cia peb ntxiv rau qhov no ntau txhiab, lossis txawm tias kaum tawm txhiab tus nqi rau txhua tus cwj pwm. Hauv qhov no, kev tshuaj ntsuam xyuas yuav tsis tiv thaiv qhov kev sim thiab ua tsis tiav. Nyob rau hauv lem, gradient qhovntsej thiaj tsis mob thiab nws cov variations yuav maj mam tab sis muaj tseeb coj peb los ze zog mus rau lub hom phiaj - qhov tsawg kawg nkaus muaj nuj nqi. Thiab tsis txhob txhawj txog kev ceev - peb yuav zaum saib txoj hauv kev uas yuav tso cai rau peb teeb tsa thiab tswj cov kauj ruam ntev (uas yog, ceev).

Thiab tam sim no cov ntsiab lus luv luv tiag tiag.

Ua ntej, kuv vam tias cov ntaub ntawv uas tau nthuav tawm hauv tsab xov xwm yuav pab pib "cov kws tshawb fawb cov ntaub ntawv" hauv kev nkag siab yuav ua li cas los daws qhov yooj yim (thiab tsis yog) kab rov tav kab sib npaug.

Qhov thib ob, peb tau saib ntau txoj hauv kev los daws qhov sib npaug. Tam sim no, nyob ntawm qhov xwm txheej, peb tuaj yeem xaiv qhov zoo tshaj plaws los daws qhov teeb meem.

Thib peb, peb pom lub zog ntawm kev teeb tsa ntxiv, uas yog qhov gradient qhovntsej thiaj tsis mob kauj ruam ntev. Qhov parameter no tsis tuaj yeem tsis quav ntsej. Raws li tau sau tseg saum toj no, txhawm rau txo tus nqi ntawm kev suav, cov kauj ruam ntev yuav tsum tau hloov pauv thaum lub sij hawm qhovntsej thiaj tsis mob.

Plaub, nyob rau hauv peb cov ntaub ntawv, "hauv tsev-sau" ua haujlwm tau pom lub sijhawm zoo tshaj plaws rau kev suav. Qhov no tej zaum yog vim tsis yog kev tshaj lij kev siv lub tsev qiv ntawv lub peev xwm numpy. Tab sis ua li ntawd raws li nws yuav, cov lus xaus hauv qab no qhia nws tus kheej. Ntawm ib sab, qee zaum nws tsim nyog nug cov kev xav tau tsim, thiab ntawm qhov tod tes, nws tsis yog ib txwm tsim nyog ua rau txhua yam nyuaj - ntawm qhov tsis sib xws, qee zaum txoj kev daws teeb meem yooj yim dua. Thiab txij li thaum peb lub hom phiaj yog los txheeb xyuas peb txoj hauv kev los daws qhov yooj yim kab rov tav kab sib npaug, kev siv "tus kheej sau" ua haujlwm tau txaus rau peb.

Literature (los yog tej yam zoo li ntawd)

1. Linear regression

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

2. Tsawg squares txoj kev

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 qhovntsej thiaj tsis mob

habr.com/en/post/471458

habr.com/en/post/307312

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

6. NumPy library

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

Tau qhov twg los: www.hab.com

Ntxiv ib saib