Fo'ia le fa'atusa o le fa'asolo laina faigofie

O lo'o fa'atalanoaina e le tala le tele o auala e fa'atatau ai le fa'atusatusaga fa'a-matematika o se laina fa'asolosolo faigofie (fa'alua).

O metotia uma e foia ai le fa'atusatusaga o lo'o talanoaina iinei e fa'avae i luga ole metotia sikuea aupito itiiti. Seʻi o tatou faʻaalia auala e faʻapea:

  • Fofo su'esu'e
  • Aga'i Fa'asa'o
  • Fa'asolo fa'asolo malie

Mo auala taʻitasi e foia ai le faʻatusatusaga o se laina saʻo, o le tusiga e tuʻuina atu ai galuega eseese, lea e masani ona vaevaeina i latou e tusia e aunoa ma le faʻaaogaina o le faletusi. Numasi ma i latou e fa'aoga mo fa'atatauga Numasi. E talitonuina o le faʻaaogaina poto Numasi o le a fa'aitiitia tau fa'akomepiuta.

O fa'ailoga uma o lo'o tu'uina atu i le tusiga o lo'o tusia i le gagana python-2.7 faʻaaogaina Tusigāmanatu Jupyter. O lo'o fa'apipi'i i luga le fa'ailoga fa'apogai ma le faila ma fa'amatalaga fa'ata'ita'iga Github

O le tusiga e sili atu ona faʻatatau i le amataga ma i latou ua amata faasolosolo ona aʻoaʻoina le suʻesuʻega o se vaega lautele tele i le atamai faʻapitoa - aʻoaʻoga masini.

Ina ia faʻamalamalama le mataupu, matou te faʻaaogaina se faʻataʻitaʻiga faigofie tele.

Fa'ata'ita'iga tulaga

E lima a matou tulaga taua e faʻaalia ai le faʻalagolago Y от X (Laulaula Nu. 1):

Laulau Numera 1 “Tulaga Fa'ata'ita'i”

Fo'ia le fa'atusa o le fa'asolo laina faigofie

O le a tatou manatu o tulaga taua Fo'ia le fa'atusa o le fa'asolo laina faigofie o le masina o le tausaga, ma Fo'ia le fa'atusa o le fa'asolo laina faigofie - tupe maua i lenei masina. I se isi faaupuga, o tupe maua e faalagolago i le masina o le tausaga, ma Fo'ia le fa'atusa o le fa'asolo laina faigofie - na'o le fa'ailoga e fa'alagolago ai tupe maua.

O le faʻataʻitaʻiga e faʻapea, e le gata i le tulaga o le faʻalagolago i le faʻalagolago o tupe maua i le masina o le tausaga, ma mai le tulaga o le numera o tau - e toʻaitiiti lava i latou. Ae ui i lea, o sea faʻafaigofieina o le a mafai ai, e pei ona latou fai mai ai, e faʻamatalaina, e le o taimi uma i le faigofie, mea e faʻaaogaina e le au amata. Ma o le faigofie foi o numera o le a faʻatagaina ai i latou e manaʻo e foia le faʻataʻitaʻiga i luga o pepa e aunoa ma le tele o tau o galuega.

Seʻi tatou manatu o le faʻalagolago o loʻo tuʻuina atu i le faʻataʻitaʻiga e mafai ona faʻatusatusa lelei i le faʻatusatusaina o le matematika o se laina faʻasolosolo faigofie (paiga) o le fomu:

Fo'ia le fa'atusa o le fa'asolo laina faigofie

le mea Fo'ia le fa'atusa o le fa'asolo laina faigofie o le masina lea na maua mai ai tupe maua, Fo'ia le fa'atusa o le fa'asolo laina faigofie - tupe maua e fetaui ma le masina, Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie o coefficients o le solomuli o le laina fuafuaina.

Manatua o le coefficient Fo'ia le fa'atusa o le fa'asolo laina faigofie e masani ona ta'ua o le malifa po o le faanene o le laina fuafuaina; o lo'o fa'atusalia ai le aofa'i o le Fo'ia le fa'atusa o le fa'asolo laina faigofie pe a suia Fo'ia le fa'atusa o le fa'asolo laina faigofie.

E manino lava, o la tatou galuega i le faʻataʻitaʻiga o le filifilia lea o ia coefficients i le faʻatusatusaga Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie, lea o le eseesega o a tatou tau o tupe maua fuafuaina i masina mai tali moni, i.e. tau o loʻo tuʻuina atu i le faʻataʻitaʻiga o le a laʻititi.

Auala sikuea aupito itiiti

E tusa ai ma auala aupito itiiti sikuea, e tatau ona fa'atatauina le va'aiga i le fa'atafafa. O lenei metotia e mafai ai ona e aloese mai le fa'aleaogaina fa'atasi o fa'ailoga pe a iai ni fa'ailoga fa'afeagai. Mo se faʻataʻitaʻiga, afai i se tasi tulaga, o le faʻasesega o +5 (faaopoopo le lima), ma le isi -5 (toese le lima), ona fa'aleaogaina lea o le aofa'iga o fa'a'ese'esega ma fa'amauina i le 0 (zero). E le mafai ona faʻataʻatia le faʻaogaina, ae faʻaaoga le meatotino o le modulus ona lelei uma ai lea o faʻasalalauga ma faʻaputuina. Matou te le o faʻatalanoaina auiliili lenei mea, ae naʻo le faʻaalia o le faʻaogaina o faʻatusatusaga, o se aganuʻu le faʻatafafa o le fesuiaiga.

O le mea lea e foliga mai o le fua lea o le a tatou iloa ai le itiiti ifo o le aofaʻi o sikuea sikuea (sese):

Fo'ia le fa'atusa o le fa'asolo laina faigofie

le mea Fo'ia le fa'atusa o le fa'asolo laina faigofie o se galuega fa'atatau o tali moni (o lona uiga, o tupe maua na matou fuafuaina),

Fo'ia le fa'atusa o le fa'asolo laina faigofie o tali moni ia (tupe maua mai le fa'ata'ita'iga),

Fo'ia le fa'atusa o le fa'asolo laina faigofie o le fa'ata'ita'iga fa'asino (numera o le masina lea e fa'amauina ai le 'ese'ese)

Se'i o tatou va'ava'ai le galuega, fa'amatala le vaega fa'avasega fa'atasi, ma sauni e fa'agasolo i le vaifofo su'esu'e. Ae muamua, seʻi o tatou faia se tafaoga puupuu e uiga i le eseesega ma manatua le uiga geometric o le derivative.

Eseesega

O le fa'aeseesega o le fa'agaioiga lea o le su'eina o mea e maua mai ai se galuega.

O le a le mea o loʻo faʻaaogaina i ai? O le fa'atupuina o se galuega e fa'aalia ai le fua o le suiga o le galuega ma ta'u mai ia i tatou lona itu. Afai e lelei le mea e maua mai i se itu, ona faʻateleina lea o le galuega; a leai, e faʻaitiitia le galuega. Ma o le sili atu o le tau o le faʻatupu atoatoa, o le maualuga o le suiga o le tau o galuega, faʻapea foʻi ma le maualuga o le slope o le kalafi galuega.

Mo se faʻataʻitaʻiga, i lalo o aiaiga o le Cartesian coordinate system, o le tau o le mea e maua i le mata M(0,0) e tutusa ma + 25 o lona uiga i se tulaga ua tuuina atu, pe a suia le tau Fo'ia le fa'atusa o le fa'asolo laina faigofie i le itu taumatau e se iunite masani, tau Fo'ia le fa'atusa o le fa'asolo laina faigofie siitia i le 25 iunite masani. I luga o le kalafi e foliga mai o se si'itia tifato o tau Fo'ia le fa'atusa o le fa'asolo laina faigofie mai se tulaga.

O le isi faataitaiga. Ole tau fa'atupu e tutusa -0,1 o lona uiga pe a see ese Fo'ia le fa'atusa o le fa'asolo laina faigofie i le tasi iunite masani, tau Fo'ia le fa'atusa o le fa'asolo laina faigofie fa'aitiitia ile na'o le 0,1 iunite masani. I le taimi lava e tasi, i luga o le kalafi o le galuega, e mafai ona tatou vaʻaia se faʻataʻitaʻiga i lalo. O le tusiaina o se talafaatusa ma se mauga, e pei lava o loʻo tatou alu ifo lemu i lalo o se malifa malie mai se mauga, e le pei o le faʻataʻitaʻiga muamua, lea e tatau ai ona tatou aʻe i luga o mauga tifato :)

O le mea lea, pe a uma ona faʻavasega le galuega Fo'ia le fa'atusa o le fa'asolo laina faigofie fa'apea Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie, matou te fa'auigaina le fa'asologa muamua o fa'atusa fa'avasegaga. A maeʻa ona fuafuaina faʻatusatusaga, o le a tatou mauaina se faiga o faʻatusatusaga e lua, e ala i le fofoina lea o le a mafai ai ona tatou filifilia ia tulaga taua o le coefficients. Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie, lea e suia ai le tau o mea faʻatatau i vaega tuʻufaʻatasia i se aofaiga laʻititi, ma i le tulaga o se fofo faʻataʻitaʻiga e le suia lava. I se isi faaupuga, o le sese o galuega i coefficients maua o le a oʻo i se laʻititi, talu ai o tau o vaega faʻavae i nei vaega o le a tutusa ma le zero.

O lea la, e tusa ai ma tulafono o le eseesega, o le vaega faʻasologa faʻasologa o le 1st order e tusa ai ma le coefficient. Fo'ia le fa'atusa o le fa'asolo laina faigofie o le a ave le fomu:

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Fa'atonuga muamua vaega fa'atusa fa'atatau e fa'atatau i Fo'ia le fa'atusa o le fa'asolo laina faigofie o le a ave le fomu:

Fo'ia le fa'atusa o le fa'asolo laina faigofie

O se taunuuga, na matou mauaina se faiga o faʻatusatusaga o loʻo i ai se fofo faʻapitoa faigofie:

amata{equation*}
amata{mataupu}
na + bsumlimits_{i=1}^nx_i — sumlimits_{i=1}^ny_i = 0

maualuga_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i — gata_{i=1}^ny_i) = 0
fa'ai'uga{mataupu}
fa'ai'uga{equation*}

A'o le'i fo'ia le fa'atusa, se'i mua'i uta, siaki pe sa'o le uta, ma fa'atulaga fa'amaumauga.

La'uina ma fa'avasegaina fa'amaumauga

E tatau ona maitauina ona o le mea moni e faapea mo le suʻesuʻega faʻataʻitaʻiga, ma mulimuli ane mo le gradient ma stochastic gradient descent, o le a matou faʻaogaina le code i ni suiga se lua: faʻaaoga le faletusi Numasi ma e aunoa ma le faʻaaogaina, o le a tatou manaʻomia le faʻatulagaina o faʻamaumauga talafeagai (silasila i le code).

Faʻamatalaga faʻapipiʻi ma faʻasologa o tulafono

# импортируем все нужные нам библиотеки
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 '********************************************'

Faʻaaliga vaaia

I le taimi nei, a uma ona matou, muamua, utaina faʻamatalaga, lona lua, siaki le saʻo o le utaina ma mulimuli ane faʻatulagaina faʻamaumauga, o le a matou faia le ata muamua. O le auala e masani ona faʻaaogaina mo lenei mea taitoalua faletusi fuatai. I la matou faʻataʻitaʻiga, ona o le faʻatapulaʻaina o numera, e leai se aoga i le faʻaaogaina o le faletusi fuatai. O le a matou faaaogaina le faletusi masani matplotlib ae na o le vaai atu i le mea o loo faataapeapeina.

Fa'ailoga fa'asalalau

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

Siata Nu. 1 “Faalagolago o tupe maua i le masina o le tausaga”

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Fofo su'esu'e

Se'i o tatou fa'aogaina meafaigaluega sili ona taatele i totonu python ma foia le faiga o fa'atusa:

amata{equation*}
amata{mataupu}
na + bsumlimits_{i=1}^nx_i — sumlimits_{i=1}^ny_i = 0

maualuga_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i — gata_{i=1}^ny_i) = 0
fa'ai'uga{mataupu}
fa'ai'uga{equation*}

E tusa ai ma le tulafono a Cramer o le a tatou maua le determinant lautele, faapea foi ma determinants e Fo'ia le fa'atusa o le fa'asolo laina faigofie ma e Fo'ia le fa'atusa o le fa'asolo laina faigofie, ina ua uma, vaevae le determinant e Fo'ia le fa'atusa o le fa'asolo laina faigofie i le fua fa'atatau lautele - su'e le coefficient Fo'ia le fa'atusa o le fa'asolo laina faigofie, e faapena foi ona tatou maua le coefficient Fo'ia le fa'atusa o le fa'asolo laina faigofie.

Fa'ailoga fa'amatalaga su'esu'e

# определим функцию для расчета коэффициентов 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)

O mea nei na matou maua:

Fo'ia le fa'atusa o le fa'asolo laina faigofie

O lea la, o le tau o coefficients ua maua, o le aofaʻi o faʻailoga sikuea ua faʻamautuina. Tatou tusi se laina sa'o i luga o le histogram fa'ata'ape'apeina e tusa ai ma le fa'atatau na maua.

Fa'ailoga laina toe fo'i

# определим функцию для формирования массива рассчетных значений выручки
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()

Siata Nu. 2 “Tali sa'o ma fuafua”

Fo'ia le fa'atusa o le fa'asolo laina faigofie

E mafai ona e vaʻavaʻai i le kalafi faʻafefe mo masina taʻitasi. I la matou tulaga, matou te le maua mai ai se aoga taua tele mai ai, ae o le a matou faamalieina lo matou fia iloa pe o le a le lelei o le faʻasologa o le faʻasologa o laina faigofie e faʻaalia ai le faʻalagolago o tupe maua i le masina o le tausaga.

Fa'ailoga siata fa'asese

# определим функцию для формирования массива отклонений в процентах
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()

Siata Nu. 3 “Vaega, %”

Fo'ia le fa'atusa o le fa'asolo laina faigofie

E le atoatoa, ae ua mae'a la matou galuega.

Sei o tatou tusia se galuega e, e fuafua ai le coefficients Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie fa'aaoga le faletusi Numasi, sili atu le saʻo, o le a matou tusia ni galuega se lua: tasi e faʻaaoga ai se pseudoinverse matrix (e le fautuaina i le faʻatinoga, talu ai o le faagasologa e faʻalavelave faʻapitoa ma le mautu), o le isi e faʻaaogaina se faʻatusatusaga matrix.

Fa'ailoga Fa'amatalaga Fa'amatalaga (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

Sei o tatou fa'atusatusa le taimi e fa'aalu i le fuafuaina o coefficients Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie, e tusa ai ma metotia e 3 na tuʻuina atu.

Fa'ailoga mo le fa'atulagaina o le taimi fa'atatau

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)

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Faatasi ai ma se vaega itiiti o faʻamaumauga, o se galuega "tusia e le tagata lava ia" o loʻo sau i luma, lea e maua ai le coefficients e faʻaaoga ai le auala a Cramer.

Ole taimi nei e mafai ona e fa'agasolo i isi auala e su'e ai coefficients Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie.

Aga'i Fa'asa'o

Muamua, se'i o tatou faauigaina le mea e ta'u o le gradient. I se faaupuga faigofie, o le gradient o se vaega e faʻaalia ai le itu o le maualuga o le tuputupu aʻe o se galuega. I se talafaatusa ma le a'ea'e i luga o se mauga, o le mea e fa'asaga i ai le fa'ali'i, o le mea lea o lo'o i ai le a'ega aupito maualuga i le tumutumu o le mauga. O le atinaʻeina o le faʻataʻitaʻiga ma le mauga, tatou te manatua o le mea moni tatou te manaʻomia le aʻega sili ona maualuga ina ia oʻo atu i le eleele maualalo i se taimi vave e mafai ai, o lona uiga, le maualalo - o le nofoaga e le faʻateleina pe faʻaitiitia ai le galuega. I le taimi lea, o le a tutusa le fa'asolo ma le zero. O le mea lea, matou te le manaʻomia se gradient, ae o se antigradient. Ina ia maua le antigradient e tatau ona e faʻateleina le gradient e -1 (toese le tasi).

Sei o tatou gauai atu i le mea moni o se galuega e mafai ona i ai ni nai minima, ma o le alu ifo i totonu o se tasi oi latou e faʻaaoga ai le algorithm o loʻo tuʻuina atu i lalo, o le a le mafai ona tatou maua se isi mea maualalo, atonu e maualalo ifo nai lo le mea na maua. Tatou malolo, e le o se taufaamatau ia i tatou! I la matou tulaga o loʻo matou feagai ma se tasi laʻititi, talu mai la matou galuega Fo'ia le fa'atusa o le fa'asolo laina faigofie i luga o le kalafi o se parabola masani. Ma e pei ona tatau ona tatou iloa lelei uma mai la tatou aʻoga o le matematika, o le parabola e naʻo le tasi le laʻititi.

Ina ua uma ona matou iloa pe aisea matou te manaʻomia ai se gradient, ma o le gradient o se vaega, o lona uiga, o se vector ma faʻamaopoopo tuʻufaʻatasia, e tutusa lelei lava coefficients. Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie e mafai ona tatou fa'atinoina le fa'asolo malie.

Aʻo leʻi amataina, ou te fautua atu e faitau naʻo ni nai fuaiupu e uiga i le alu ifo algorithm:

  • Matou te fuafuaina i se pseudo-faafuase'i faiga faamaopoopo o coefficients Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie. I la tatou faʻataʻitaʻiga, o le a tatou fuafuaina coefficient latalata ile zero. O se faiga masani lea, ae atonu e tofu lava le mataupu ma lana faiga masani.
  • Mai le faamaopoopo Fo'ia le fa'atusa o le fa'asolo laina faigofie toese le tau o le fa'asologa muamua o vaega fa'atatau ile mata'upu Fo'ia le fa'atusa o le fa'asolo laina faigofie. O lea la, afai e lelei le faʻasologa, ona faʻateleina lea o le galuega. O le mea lea, e ala i le toesea o le tau o le mea e maua mai ai, o le a tatou agai atu i le itu faafeagai o le tuputupu ae, o lona uiga, i le itu o le tupuaga. Afai e le lelei le fa'atupu, ona fa'aitiitia ai lea o le galuega i le taimi lea ma e ala i le toesea o le tau o le fa'asologa tatou te aga'i i le itu o le fa'asolo.
  • Matou te faia se gaioiga tutusa ma le faʻamaopoopo Fo'ia le fa'atusa o le fa'asolo laina faigofie: toese le tau o le vaega e maua mai i le tulaga Fo'ia le fa'atusa o le fa'asolo laina faigofie.
  • Ina ia aua neʻi oso i luga ole laʻititi ma lele i le vateatea loloto, e tatau ona seti le laʻa laʻasaga i le itu o le alu ifo. I se tulaga lautele, e mafai ona e tusia se tusiga atoa e uiga i le faʻatulagaina saʻo o le laasaga ma pe faʻafefea ona suia i le taimi o le faʻagasologa o le faʻagasologa ina ia faʻaitiitia ai tau faʻatusatusaga. Ae o le taimi nei o loʻo i ai se matou galuega eseʻese i luma atu, ma o le a matou faʻatuina le laʻasaga laʻasaga e faʻaaoga ai le metotia faasaienisi o le "poke" poʻo, e pei ona latou fai mai i le gagana masani, faʻapitoa.
  • O le taimi lava tatou te o mai ai faamaopoopo ua tuuina mai Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie toese le tau o mea e maua mai, matou te maua ni faʻasalalauga fou Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie. Matou te faia le isi laasaga (toesea), ua uma mai le faʻatulagaina faʻatulagaina. Ma o lea e amata ai pea le taamilosaga, seia oo ina ausia le convergence manaomia.

Uma! O lea ua matou sauni e o e su'e le alia aupito loloto o le Mariana Trench. Tatou amata.

Fa'ailoga mo le fa'asolo malie

# напишем функцию градиентного спуска без использования библиотеки 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

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Na matou maulu i le pito i lalo o le Mariana Trench ma o iina na matou maua ai tutusa uma tau faʻatatau Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie, o le mea tonu lava lea sa faatalitalia.

Sei o tatou toe maulu, ae o le taimi lenei, o le a faatumulia le tatou taavale i le sami loloto i isi tekinolosi, e pei o le faletusi. Numasi.

Fa'ailoga mo le fa'asolo malie (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

Fo'ia le fa'atusa o le fa'asolo laina faigofie
Tau fa'atatau Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie e le masuia.

Se'i o tatou va'ai pe na fa'afefea ona suia le mea sese i le taimi o le fa'asolosolo malie, o lona uiga, pe fa'afefea ona suia le aofa'i o fa'ailoga sikuea i la'asaga ta'itasi.

Fa'ailoga mo le fa'avasegaina o aofa'iga o mea fa'atafafa

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

Kalafi Nu. 4 “Aofa'iga o se'ese'ega fa'afafa a'o fa'asolo fa'asolo malie"

Fo'ia le fa'atusa o le fa'asolo laina faigofie

I luga o le kalafi tatou te iloa ai o laʻasaga taʻitasi e faʻaitiitia ai le mea sese, ma a maeʻa se numera o faʻasologa tatou te vaʻaia se laina toetoe lava faʻalava.

Ma le mea mulimuli, seʻi o tatou faʻatusatusa le eseesega i le taimi o le faʻatinoina o code:

Fa'ailoga e fuafua ai le fa'asolosolo taimi fa'atatau

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)

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Masalo o loʻo tatou faia se mea sese, ae toe fai foi o se galuega faigofie "tusia i le fale" e le faʻaogaina le faletusi Numasi e sili atu i le taimi fa'atatau o se galuega e fa'aaoga ai le faletusi Numasi.

Ae matou te le o tutu pea, ae o loʻo agaʻi atu i le suʻesuʻeina o se isi auala manaia e foia ai le faʻatusatusaga faʻasolosolo faigofie. Feiloai!

Fa'asolo fa'asolo malie

Ina ia vave ona malamalama i le mataupu faavae o le faʻaogaina o le faʻasologa o le stochastic gradient, e sili atu le fuafuaina o ona eseesega mai le faʻasolosolo masani. O matou, i le tulaga o le faasolosolo malie, i le tutusa o mea e maua mai o Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie fa'aogaina le aofa'iga o tau o foliga uma ma tali moni o lo'o maua i le fa'ata'ita'iga (o lona uiga, o le aofa'i o mea uma Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie). I le stochastic gradient descent, matou te le faʻaogaina uma tulaga taua o loʻo i ai i le faʻataʻitaʻiga, ae nai lo lena, pseudo-faʻafuaseʻi filifili le mea e taʻua o faʻataʻitaʻiga faʻasino ma faʻaaoga ona tau.

Mo se faʻataʻitaʻiga, afai o le faʻamaufaʻailoga ua faʻamoemoe e avea ma numera 3 (tolu), ona tatou ave lea o tau Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie, ona tatou suia lea o tau i totonu o faʻasologa faʻasolosolo ma fuafua faʻasalalauga fou. Ma, i le maeʻa ai o le faʻatulagaina o faʻasalalauga, matou te toe faʻaogaina faʻafuaseʻi le faʻataʻitaʻiga faʻataʻitaʻiga, sui tulaga taua e fetaui ma le faʻailoga i totonu o faʻatusatusaga faʻavasegaina, ma fuafua faʻamaopoopo i se auala fou. Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie ma isi. seia o'o ina lanu meamata le fa'atasi. I le tepa muamua, atonu e foliga mai e le mafai ona aoga lenei mea, ae e aoga. E moni e taua le matauina e le faʻaitiitia le mea sese i laʻasaga uma, ae e mautinoa lava e iai se faʻalavelave.

O a ni fa'amanuiaga o le fa'asolosolo fa'asolosolo fa'amasani nai lo le fa'agasologa masani? Afai o la tatou faʻataʻitaʻiga lapoʻa e matua tele ma fuaina i le fiasefulu afe o tau, ona sili atu lea ona faigofie le faʻagaioiina, fai mai, o le afe afe o latou, nai lo le faʻataʻitaʻiga atoa. O i'ina e amata mai ai le fa'asolo malie o le stochastic. I la tatou tulaga, ioe, o le a tatou le matauina le tele o se eseesega.

Sei o tatou tilotilo i le code.

Fa'ailoga mo le fa'asolo fa'asolo malie

# определим функцию стох.град.шага
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])

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Matou te vaʻavaʻai ma le totoa i faʻailoga ma maua i matou o loʻo fesiligia le fesili "E faʻapefea ona tupu lenei mea?" Na matou maua isi tau fa'atatau Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie. Masalo o le fa'asolosolo fa'asolo o le stochastic ua maua ai ni ta'iala sili ona lelei mo le fa'atusa? Ae paga lea e leai. Ua lava le vaʻavaʻai i le aofaʻi o sikuea sikuea ma vaʻai o faʻatasi ai ma tau fou o coefficients, e sili atu le sese. Tatou te le faanatinatia e faanoanoa. Sei o tatou fausia se kalafi o le suiga sese.

Fa'ailoga mo le fa'avasegaina o le aofa'i o fa'afeagai fa'afafa i le fa'asolo fa'asolo malie

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

Kalafi Nu. 5 “Aofa'iga o se'ese'ega sikuea a'o fa'asolo fa'asolo fa'asolo malie"

Fo'ia le fa'atusa o le fa'asolo laina faigofie

A vaʻai i le faʻatulagaga, o mea uma e paʻu i le tulaga ma o lenei o le a matou faʻaleleia mea uma.

O le a la le mea na tupu? O mea nei na tupu. A matou filifilia faʻafuaseʻi se masina, ona mo le masina filifilia lea e taumafai ai le matou algorithm e faʻaitiitia le mea sese i le faʻatulagaina o tupe maua. Ona matou filifilia lea o se isi masina ma toe fai le faʻatusatusaga, ae matou te faʻaitiitia le mea sese mo le masina lona lua ua filifilia. Ia manatua nei o le lua masina muamua e matua ese lava mai le laina o le faʻasologa faʻasolosolo faigofie. O lona uiga pe a filifilia soʻo se tasi o nei masina e lua, e ala i le faʻaitiitia o le sese o latou taʻitoʻatasi, o la matou algorithm e matua faʻateleina le mea sese mo le faʻataʻitaʻiga atoa. O le a la le mea e fai? E faigofie le tali: e tatau ona e faʻaitiitia le laʻasaga o le alu ifo. A uma, e ala i le faʻaitiitia o le laʻasaga o le alu ifo, o le mea sese o le a taofia ai foi le "oso" i luga ma lalo. Pe sili atu, o le mea sese "oso" o le a le taofia, ae o le a le faia vave :) Sei o tatou siaki.

Laiti e fa'agasolo ai le SGD ma fa'aopoopoga laiti

# запустим функцию, уменьшив шаг в 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()

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Kalafi Nu. 6 “Aofa'iga o eseesega faatafafa i le taimi o le faasolosolo malie (80 afe sitepu)”

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Ua faʻaleleia le faʻaupuga, ae e leʻo lelei. Hypothetically, e mafai ona faasaʻoina lenei auala. Matou te filifilia, mo se faʻataʻitaʻiga, i le 1000 faʻataʻitaʻiga mulimuli o tau o le coefficients na faia ai le mea sese maualalo. E moni, mo lenei mea e tatau foi ona tatou tusia i lalo le taua o le coefficient latou lava. Matou te le faia lenei mea, ae ia gauai atu i le faasologa. E foliga lamolemole ma e foliga mai ua faaitiitia tutusa le sese. O le mea moni e le moni lenei mea. Se'i o tatou va'ai i le 1000 muamua ma fa'atusatusa i le mulimuli.

Code mo le siata SGD (muamua 1000 laasaga)

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

Kalafi Nu. 7 “Aofa'iga o fa'a'ese'ese sikuea SGD (muamua 1000 sitepu)"

Fo'ia le fa'atusa o le fa'asolo laina faigofie

Kalafi Nu. 8 “Aofa'iga o fa'a'ese'ese sikuea SGD (1000 sitepu mulimuli)"

Fo'ia le fa'atusa o le fa'asolo laina faigofie

I le amataga lava o le alu ifo, matou te matauina le tutusa lelei ma le faʻaitiitia o mea sese. I faʻamatalaga mulimuli, matou te vaʻai ai o le mea sese e alu solo ma faʻataʻamilo i le tau o le 1,475 ma i nisi taimi e tutusa lava ma lenei tau sili ona lelei, ae o loʻo alu pea i luga ... Ou te toe fai atu, e mafai ona e tusia i lalo tau o le coefficients Fo'ia le fa'atusa o le fa'asolo laina faigofie и Fo'ia le fa'atusa o le fa'asolo laina faigofie, ona filifili lea o mea e itiiti le sese. Ae ui i lea, sa i ai se matou faʻafitauli sili atu ona ogaoga: e tatau ona matou faia le 80 afe laasaga (silasila i le code) e faʻalatalata atu ai tau i le sili. Ma o lea ua fete'ena'i ma le manatu o le fa'asaoina o le taimi fa'atatau i le fa'asolosolo fa'asolosolo fa'atatau i le fa'asolosolo fa'asolosolo. O a mea e mafai ona faasa'oina ma faaleleia? E le faigata ona maitauina i le uluaʻi faʻasologa o loʻo tatou alu ifo i lalo ma, o le mea lea, e tatau ona tatou tuʻuina se laʻasaga tele i faʻasologa muamua ma faʻaitiitia le laasaga aʻo tatou agai i luma. Matou te le faia lenei mea i lenei tusiga - ua leva tele. O i latou e manaʻo e mafai ona mafaufau mo i latou lava pe faʻapefea ona fai lenei mea, e le faigata :)

Se'i o tatou faia le fa'asolo fa'asolo malie fa'ata'atia e fa'aaoga ai le faletusi Numasi (ma aua nei o tatou tautevateva i luga o maa na tatou faailoaina muamua)

Fa'ailoga mo Stochastic Gradient Descent (NumPy)

# для начала напишем функцию градиентного шага
def stoch_grad_step_numpy(vector_init, X, ind, y, l):
    x = X[ind]
    y_pred = np.dot(x,vector_init)
    err = y_pred - y[ind]
    grad_a = err
    grad_b = x[1]*err
    return vector_init - l*np.array([grad_a, grad_b])

# определим функцию стохастического градиентного спуска
def stoch_grad_descent_numpy(X, y, l=0.1, steps = 800):
    vector_init = np.array([[np.random.randint(X.shape[0])], [np.random.randint(X.shape[0])]])
    errors = []
    for i in range(steps):
        ind = np.random.randint(X.shape[0])
        new_vector = stoch_grad_step_numpy(vector_init, X, ind, y, l)
        vector_init = new_vector
        errors.append(error_square_numpy(vector_init,X,y))
    return (vector_init), (errors)

# запишем массив значений 
list_parametres_stoch_gradient_descence = stoch_grad_descent_numpy(x_np, y_np, l=0.001, steps = 80000)

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


print ' 33[1m' + ' 33[4m' + "Сумма квадратов отклонений:" + ' 33[0m'
print round(list_parametres_stoch_gradient_descence[1][-1],3)
print



print ' 33[1m' + ' 33[4m' + "Количество итераций в стохастическом градиентном спуске:" + ' 33[0m'
print len(list_parametres_stoch_gradient_descence[1])
print

Fo'ia le fa'atusa o le fa'asolo laina faigofie

O tau na foliga mai e toetoe lava tutusa ma le taimi e alu ifo ai e aunoa ma le faʻaaogaina Numasi. Peitaʻi, e talafeagai lenei mea.

Se'i o tatou su'esu'e pe o le a le umi na alu ai le fa'asolo malie o le stochastic.

Laiti mo le fuafuaina o le SGD taimi fa'atatau (80 afe laasaga)

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)

Fo'ia le fa'atusa o le fa'asolo laina faigofie

O le sili atu i totonu o le vaomatua, o le pogisa o ao: toe, o le "tusitusi a le tagata lava ia" o loʻo faʻaalia ai le taunuuga sili. O nei mea uma e taʻu mai ai e tatau ona sili atu auala faʻapitoa e faʻaoga ai le faletusi Numasi, lea e matua faatelevaveina ai galuega fa'akomupiuta. I lenei mataupu o le a tatou le aoao e uiga ia i latou. O le ai ai se mea e mafaufau i ai i lou taimi avanoa :)

Se aotelega

Aʻo leʻi faʻauʻuina, ou te fia taliina se fesili e foliga mai na tulaʻi mai le matou au faitau pele. Aisea, o le mea moni, o sea "faʻasalaga" faʻatasi ma auga, aisea e manaʻomia ai ona tatou savavali i luga ma lalo ifo o le mauga (tele lava i lalo) ina ia maua ai le fanua maualalo faʻatauaina, pe afai o loʻo i o tatou lima se masini mamana ma faigofie, i le fo'i o se vaifofo au'ili'ili, lea e fa'afeso'ota'i vave i tatou i le nofoaga Sa'o?

O le tali i lenei fesili o loʻo taoto i luga. O lea ua tatou tilotilo i se faʻataʻitaʻiga faigofie tele, o loʻo i ai le tali moni Fo'ia le fa'atusa o le fa'asolo laina faigofie e faalagolago i le faailoga e tasi Fo'ia le fa'atusa o le fa'asolo laina faigofie. E te le vaʻaia soo lenei mea i le olaga, seʻi o tatou mafaufau e iai a tatou faʻailoga 2, 30, 50 pe sili atu. Sei o tatou faaopoopo i lenei afe, po o le fiasefulu afe foi o tau mo uiga taitasi. I lenei tulaga, o le suʻega suʻesuʻe atonu e le mafai ona tatalia le suʻega ma toilalo. I le isi itu, o le faasolosolo malie ma ona fesuiaiga o le a faasolosolo malie ae mautinoa tatou te latalata atili ai i le sini - o le pito maualalo o le galuega. Ma aua le popole i le saoasaoa - atonu o le a tatou vaʻavaʻai i auala e mafai ai ona tatou seti ma faʻatonutonu le umi o le laasaga (o lona uiga, saoasaoa).

Ma o lenei o le aotelega puupuu moni.

Muamua, ou te faʻamoemoe o mea o loʻo tuʻuina atu i totonu o le tusiga o le a fesoasoani i le amataina o "saienitisi faʻamatalaga" i le malamalama pe faʻafefea ona foia faigofie (ma e le gata) faʻasologa o laina laina.

Lona lua, na matou vaʻavaʻai i le tele o auala e foia ai le faʻatusatusaga. I le taimi nei, e faʻatatau i le tulaga, e mafai ona tatou filifilia le mea e sili ona fetaui e foia ai le faʻafitauli.

Lona tolu, na matou vaʻaia le malosi o faʻaopoopoga faʻaopoopo, e taʻua o le gradient down step length. E le mafai ona le amana'ia lenei fa'ailoga. E pei ona taʻua i luga, ina ia faʻaitiitia le tau o faʻatusatusaga, e tatau ona suia le umi o le laasaga i le taimi o le alu ifo.

Lona fa, i la matou tulaga, o galuega "tusitusi a le fale" na faʻaalia ai taimi sili ona lelei mo faʻatusatusaga. Masalo e mafua ona e le o le fa'aoga sili ona fa'apolofesa o agava'a a le faletusi Numasi. Ae po o le a lava le tulaga, o le faaiuga o loʻo mulimuli mai o loʻo fautua mai ai ia lava. I le tasi itu, o nisi taimi e aoga ai le fesiligia o manatu faʻavae, ma i le isi itu, e le aoga i taimi uma le faʻalavelaveina o mea uma - i se isi itu, o nisi taimi o se auala faigofie e foia ai se faʻafitauli e sili atu ona aoga. Ma talu ai o la matou sini o le suʻesuʻeina lea o auala e tolu e foia ai se faʻatusatusaga faʻasolosolo faigofie, o le faʻaaogaina o galuega "tusitusi a le tagata lava ia" na lava mo i matou.

Tusitala (poʻo se mea faapena)

1. Fa'asologa laina

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

2. Auala faatafafa aupito itiiti

mathprofi.ru/metod_naimenshih_kvadratov.html

3. Fa'atupu

www.mathprofi.ru/chastnye_proizvodnye_primery.html

4. Gradient

mathprofi.ru/proizvodnaja_po_napravleniju_i_gradient.html

5. Fa'asolo malie

habr.com/en/post/471458

habr.com/en/post/307312

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

6. Faletusi NumPy

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

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

pythonworld.ru/numpy/2.html

puna: www.habr.com

Faaopoopo i ai se faamatalaga