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
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β
Peb yuav xav tias qhov muaj nqis yog lub hli ntawm lub xyoo, thiab - nyiaj tau los lub hli no. Hauv lwm lo lus, cov nyiaj tau los nyob ntawm lub hli ntawm lub xyoo, thiab - 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:
qhov twg yog lub hli uas tau txais cov nyiaj tau los, - cov nyiaj tau los sib xws rau lub hli, ΠΈ yog cov regression coefficients ntawm txoj kab kwv yees.
Nco ntsoov tias tus coefficient feem ntau hu ua txoj kab nqes lossis gradient ntawm txoj kab kwv yees; sawv cev tus nqi uas tus thaum nws hloov .
Pom tseeb, peb txoj haujlwm hauv qhov piv txwv yog xaiv cov coefficients hauv kab zauv ΠΈ , 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):
qhov twg yog lub luag haujlwm ntawm kwv yees cov lus teb tseeb (uas yog, cov nyiaj tau los peb suav),
yog cov lus teb tseeb (cov nyiaj tau los hauv cov qauv),
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 mus rau txoj cai los ntawm ib tug pa unit, tus nqi nce los ntawm 25 pa units. Ntawm daim duab nws zoo li ib qho kev nce siab hauv cov txiaj ntsig los ntawm qhov muab.
Lwm qhov piv txwv. Tus nqi derivative yog sib npaug -0,1 txhais tau tias thaum hloov chaw nyob rau hauv ib tug pa unit, tus nqi 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 los ntawm qhov txawv ΠΈ , 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. ΠΈ , 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. yuav ua daim ntawv:
1st order partial derivative equation with respect to yuav ua daim ntawv:
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 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 thiab los ntawm , tom qab ntawd, faib cov determinant los ntawm mus rau qhov kev txiav txim dav dav - nrhiav cov coefficient , zoo ib yam li peb pom cov coefficient .
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:
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β
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, %β
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 ΠΈ 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 ΠΈ , 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)
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 ΠΈ .
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 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. ΠΈ 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 ΠΈ . 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 rho tus nqi ntawm qhov kev txiav txim thib 1 ib nrab derivative ntawm qhov taw tes . 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 : rho tawm tus nqi ntawm ib feem derivative ntawm qhov taw tes .
- 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 ΠΈ rho tawm qhov tseem ceeb ntawm cov derivatives, peb tau txais kev tswj hwm tshiab ΠΈ . 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
Peb dhia mus rau hauv qab ntawm Mariana Trench thiab nyob ntawd peb pom tag nrho cov txiaj ntsig tib coefficient ΠΈ , 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
Cov nqi coefficient ΠΈ 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β
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)
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 ΠΈ 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 ΠΈ ). 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 ΠΈ , 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. ΠΈ 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])
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 ΠΈ . 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β
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()
Graph No. 6 "Sum of squared deviations thaum lub sij hawm stochastic gradient qhovntsej thiaj tsis mob (80 txhiab kauj ruam)"
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)β
Graph No. 8 βSum of squared deviations SGD (kawg 1000 kauj ruam)β
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 ΠΈ , 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
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)
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 nyob ntawm ib qho kos npe . 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
2. Tsawg squares txoj kev
3. Derivative
4. Gradient
5. Gradient qhovntsej thiaj tsis mob
6. NumPy library
Tau qhov twg los: www.hab.com