Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Isiokwu ahụ na-atụle ọtụtụ ụzọ iji chọpụta nha nhata mgbakọ na mwepụ nke ahịrị nkwụghachi azụ dị mfe (paired).

Ụzọ niile nke idozi nha anya a tụlere ebe a gbadoro ụkwụ na usoro nke pere mpe. Ka anyị gosi usoro ndị a dị ka ndị a:

  • Ngwọta nyocha
  • Ọdịda gradient
  • Stochastic gradient mgbada

Maka usoro ọ bụla nke idozi nha nke ahịrị kwụ ọtọ, isiokwu ahụ na-enye ọrụ dị iche iche, nke a na-ekewa n'ime ndị edere na-ejighi ọbá akwụkwọ. Nọmba na ndị na-eji maka mgbako Nọmba. A kwenyere na iji nkà eme ihe Nọmba ga-ebelata ọnụ ahịa kọmputa.

Edere koodu niile enyere na akụkọ a n'asụsụ a Eke 2.7 eji Akwụkwọ Jupyter. A na-etinye koodu isi iyi na faịlụ nwere data nlele Github

Edemede a na-elekwasị anya ma ndị mbido na ndị ji nke nta nke nta malite ịmụta ọmụmụ nke ngalaba sara mbara na ọgụgụ isi - mmụta igwe.

Iji mee ihe atụ, anyị na-eji ihe atụ dị nnọọ mfe mee ihe.

Ọmụmaatụ ọnọdụ

Anyị nwere ụkpụrụ ise na-egosi ịdabere Y si X (Isiokwu nke 1):

Tebụlụ Nke 1 "Ọnọdụ ihe atụ"

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Anyị ga-eche na ụkpụrụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe bụ ọnwa nke afọ, na Ịdozi nhata nke nkwụghachi azụ linear dị mfe - ego ha nwetara n'ọnwa a. N'ikwu ya n'ụzọ ọzọ, ego ha ga-enweta na-adabere na ọnwa nke afọ, na Ịdozi nhata nke nkwụghachi azụ linear dị mfe - naanị ihe ịrịba ama nke ego na-adabere.

Ihe atụ dị otú ahụ, ma site n'echiche nke ịdabere na ọnọdụ ndabere nke ego na ọnwa nke afọ, na site n'echiche nke ọnụ ọgụgụ nke ụkpụrụ - e nwere nnọọ ole na ole n'ime ha. Otú ọ dị, ihe dị mfe dị otú ahụ ga-eme ka o kwe omume, dị ka ha na-ekwu, ịkọwa, ọ bụghị mgbe nile ka ọ dị mfe, ihe ndị na-amalite na-enweta. Nakwa ịdị mfe nke ọnụọgụgụ ga-ekwe ka ndị chọrọ dozie ihe atụ na akwụkwọ na-enweghị nnukwu ụgwọ ọrụ.

Ka anyị chee na ndabere e nyere n'ihe atụ ahụ nwere ike ịgbakọ nke ọma site na nhazi mgbakọ na mwepụ nke ahịrị nkwụghachi azụ dị mfe (paired) nke ụdị:

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

ebe Ịdozi nhata nke nkwụghachi azụ linear dị mfe bụ ọnwa nke e nwetara ego ha nwetara, Ịdozi nhata nke nkwụghachi azụ linear dị mfe - ego ha nwetara na ọnwa, Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe bụ ọnụọgụ regression nke ahịrị a na-eme atụmatụ.

Rịba ama na ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe a na-akpọkarị mkpọda ma ọ bụ gradient nke ahịrị echere; na-anọchi anya ego nke Ịdozi nhata nke nkwụghachi azụ linear dị mfe mgbe ọ na-agbanwe Ịdozi nhata nke nkwụghachi azụ linear dị mfe.

N'ụzọ doro anya, ọrụ anyị na ihe atụ bụ ịhọrọ ọnụọgụgụ ndị dị otú ahụ na nhata Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe, na nke deviations nke anyị gbakọọ ego ha ga enweta uru kwa ọnwa site na ezi azịza, i.e. ụkpụrụ ndị egosipụtara na nlele ahụ ga-adị ntakịrị.

Ụzọ square kacha nta

Dị ka usoro akụkụ anọ kachasị nta si dị, a ga-agbakọọ ntụgharị ahụ site na ịgbanye ya. Usoro a na-enye gị ohere izere ịkagbu ibe ha ma ọ bụrụ na ha nwere akara ndị na-emegiderịta onwe ha. Dịka ọmụmaatụ, ọ bụrụ n'otu oge, ntụgharị ahụ bụ +5 (gbakwunyere ise), na nke ọzọ -5 (mwepu ise), mgbe ahụ nchikota nke deviations ga-kagbuo ibe ya na-eru 0 (efu). Ọ ga-ekwe omume ịghara ịmegharị ihe ahụ, ma iji ihe onwunwe nke modul na mgbe ahụ, ihe niile dị iche iche ga-adị mma ma na-agbakọta. Anyị agaghị ebi n'ebe a n'ụzọ zuru ezu, ma nanị na-egosi na maka ịdị mma nke mgbako, ọ bụ omenala na square nke deviation.

Nke a bụ ihe usoro a dị ka nke anyị ga-eji chọpụta nchikota nke nchikota nke squared (mmejọ):

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

ebe Ịdozi nhata nke nkwụghachi azụ linear dị mfe bụ ọrụ nke mkpirisi nke ezi azịza (ya bụ, ego anyị gbakọrọ),

Ịdozi nhata nke nkwụghachi azụ linear dị mfe bụ ezi azịza (ego enyere na sample),

Ịdozi nhata nke nkwụghachi azụ linear dị mfe bụ sample index (ọnụọgụ nke ọnwa nke a na-ekpebi deviation)

Ka anyị kewaa ọrụ ahụ, kọwapụta nha nhata dị iche iche, ma dịrị njikere ịga n'ihu na ngwọta nyocha. Mana nke mbụ, ka anyị mee njem nlegharị anya dị nkenke gbasara ihe dị iche bụ ma cheta ihe geometric pụtara nke mwepu.

Ịdịiche

Iche iche bụ ọrụ nke ịchọta ihe mmepụta nke ọrụ.

Kedu ihe eji eme ya? Mwepụta nke ọrụ na-akọwa ọnụọgụ mgbanwe nke ọrụ ahụ ma gwa anyị ntụziaka ya. Ọ bụrụ na ihe nrụpụta na ebe enyere dị mma, mgbe ahụ ọrụ ahụ na-abawanye, ma ọ bụghị ya, ọrụ ahụ na-ebelata. Na uru nke ihe nrụpụta zuru oke, ọnụ ọgụgụ dị elu nke mgbanwe nke ụkpụrụ ọrụ, yana steepụ mkpọda nke eserese ọrụ.

Dịka ọmụmaatụ, n'okpuru ọnọdụ nke usoro nhazi nke Cartesian, uru nke ihe nrụpụta na ebe M(0,0) hà nhata. + 25 pụtara na n'oge enyere, mgbe a na-atụgharị uru Ịdozi nhata nke nkwụghachi azụ linear dị mfe n'aka nri site na otu unit, uru Ịdozi nhata nke nkwụghachi azụ linear dị mfe na-abawanye site na nkeji iri abụọ na ise. Na eserese ahụ ọ dị ka ịrị elu nke ụkpụrụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe site n'ihe enyere.

Ihe atụ ọzọ. Uru ewepụtara ya nhata -0,1 pụtara na mgbe a chụpụrụ ya Ịdozi nhata nke nkwụghachi azụ linear dị mfe kwa otu ot unit, uru Ịdozi nhata nke nkwụghachi azụ linear dị mfe na-ebelata site na naanị 0,1 otu nkeji. N'otu oge ahụ, na eserese nke ọrụ ahụ, anyị nwere ike ịhụ mkpọda ala na-adịghị ahụkebe. N'iji ugwu na-ese ihe atụ, ọ dị ka a ga-asị na anyị ji nwayọọ nwayọọ na-arịda nrịgo dị nro site n'ugwu, n'adịghị ka ihe atụ gara aga, ebe anyị kwesịrị ịrị elu ugwu ndị dị nrịgo :)

Ya mere, mgbe ọ dị iche iche ọrụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe site na ndabara Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe, anyị na-akọwapụta 1st usoro akụkụ dị iche iche nha anya. Mgbe achọpụtara nha nha, anyị ga-enweta usoro nke nha abụọ, site na idozi nke anyị ga-enwe ike ịhọrọ ụkpụrụ dị otú ahụ nke ọnụọgụgụ. Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe, nke ụkpụrụ nke usoro ndị kwekọrọ na isi ihe na-agbanwe site na obere obere ego, na n'ihe banyere ngwọta nyocha adịghị agbanwe ma ọlị. N'ikwu ya n'ụzọ ọzọ, ọrụ njehie na ọnụọgụ ndị a chọtara ga-eru opekempe, ebe ọ bụ na ụkpụrụ nke ihe nrụpụta akụkụ na isi ihe ndị a ga-abụ nha efu.

Ya mere, dị ka iwu nke iche iche si dị, akụkụ nke usoro mmepụta nke 1st n'ihe gbasara ọnụọgụgụ. Ịdozi nhata nke nkwụghachi azụ linear dị mfe ga-ewere fọm:

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

1st ịtụ n'otu n'otu akụkụ usoro n'ihe gbasara Ịdozi nhata nke nkwụghachi azụ linear dị mfe ga-ewere fọm:

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

N'ihi ya, anyị nwetara usoro nha anya nke nwere ngwọta nyocha dị mfe:

bido{nha nhata*}
bido{ikpe}
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
ngwụcha{ikpe}
ngwụcha{nha nhata*}

Tupu anyị edozi nhazi ahụ, ka anyị buo ụzọ buo ya, lelee na nbudata ahụ ziri ezi, wee hazie data ahụ.

Na-ebu na nhazi data

Ekwesiri iburu n'uche na n'ihi eziokwu na maka ngwọta nyocha, ma mechaa maka gradient na stochastic gradient, anyị ga-eji koodu ahụ na ọdịiche abụọ: iji ụlọ akwụkwọ. Nọmba na-ejighi ya, mgbe ahụ, anyị ga-achọ nhazi data kwesịrị ekwesị (lee koodu).

Koodu nbudata na nhazi data

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

Anya

Ugbu a, mgbe anyị nwechara, nke mbụ, bujuru data ahụ, nke abụọ, lelee izi ezi nke nbudata ma mechaa hazie data ahụ, anyị ga-eme ọhụụ mbụ. Usoro a na-ejikarị eme ya bụ ụzọ abụọ ọba akwụkwọ Osimiri mmiri. N'ihe atụ anyị, n'ihi ọnụọgụ ole na ole, ọ nweghị uru iji ụlọ akwụkwọ Osimiri mmiri. Anyị ga-eji ọbá akwụkwọ oge niile matplotlib leekwa anya n’ebe a na-akpasasị ihe.

Koodu scatterplot

print 'График №1 "Зависимость выручки от месяца года"'

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

Chart Nke 1 "ndabere na ego ha nwetara na ọnwa nke afọ"

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Ngwọta nyocha

Ka anyị jiri ngwa ndị a na-ahụkarị na ya eke ma dozie usoro nke nha anya:

bido{nha nhata*}
bido{ikpe}
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
ngwụcha{ikpe}
ngwụcha{nha nhata*}

Dị ka iwu Cramer si dị anyị ga-ahụ onye na-ekpebi izugbe, yana ndị na-ekpebi site Ịdozi nhata nke nkwụghachi azụ linear dị mfe na site Ịdozi nhata nke nkwụghachi azụ linear dị mfe, mgbe nke ahụ gasịrị, na-ekewa onye na-ekpebi ihe site na Ịdozi nhata nke nkwụghachi azụ linear dị mfe na onye na-ekpebi izugbe - chọta ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe, N'otu aka ahụ anyị na-ahụ ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe.

Koodu ngwọta nyocha

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

Nke a bụ ihe anyị nwetara:

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Ya mere, a chọpụtala ụkpụrụ nke ọnụọgụgụ, e guzobewo nchikota nke nchikota nke squared. Ka anyị see ahịrị kwụ ọtọ na histogram na-agbasasị dị ka ọnụọgụ nke achọpụtara.

Koodu ndọghachi azụ

# определим функцию для формирования массива рассчетных значений выручки
def sales_count(ab,x,y):
    line_answers = []
    [line_answers.append(ab[0]+ab[1]*x[i]) for i in range(len(x))]
    return line_answers

# построим графики
print 'Грфик№2 "Правильные и расчетные ответы"'
plt.plot(x_us,y_us,'o',color='green',markersize=16, label = '$True$ $answers$')
plt.plot(x_us, sales_count(ab_us,x_us,y_us), color='red',lw=4,
         label='$Function: a + bx,$ $where$ $a='+str(round(ab_us[0],2))+',$ $b='+str(round(ab_us[1],2))+'$')
plt.xlabel('$Months$', size=16)
plt.ylabel('$Sales$', size=16)
plt.legend(loc=1, prop={'size': 16})
plt.show()

Chart No. 2 "Azịza ziri ezi na agbakọọ"

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Ị nwere ike ilele eserese mgbagha maka ọnwa ọ bụla. N'ọnọdụ anyị, anyị agaghị enweta uru bara uru ọ bụla sitere na ya, mana anyị ga-emeju ọchịchọ anyị banyere ka usoro nkwụghachi azụ dị mfe na-esi akọwa ndabere nke ego ha nwetara na ọnwa nke afọ.

Koodu ngbanwe

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

Chart No. 3 "Ngbanwe,%"

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Ọ bụghị nke zuru oke, mana anyị rụchara ọrụ anyị.

Ka anyị dee ọrụ nke, iji chọpụta ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe na-eji ụlọ akwụkwọ Nọmba, Kpọmkwem, anyị ga-ede ọrụ abụọ: otu na-eji pseudoinverse matrix (anaghị akwado ya na omume, ebe ọ bụ na usoro ahụ dị mgbagwoju anya na mgbagwoju anya), nke ọzọ na-eji nhazi matrix.

Koodu Ngwọta nyocha (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

Ka anyị tulee oge etinyere n'ịchọpụta ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe, dabere na usoro 3 ewepụtara.

Koodu maka ịgbakọ oge ngụkọ

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)

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Site na obere data, ọrụ "edere onwe ya" na-apụta n'ihu, nke na-achọpụta ọnụọgụgụ site na iji usoro Cramer.

Ugbu a ị nwere ike ịga n'ihu na ụzọ ndị ọzọ iji chọta ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe.

Ọdịda gradient

Nke mbụ, ka anyị kọwapụta ihe gradient bụ. N'ikwu ya n'ụzọ dị mfe, gradient bụ akụkụ nke na-egosi ntụzịaka nke uto kachasị nke ọrụ. Site na ntụnyere na ịrịgo ugwu, ebe ihu gradient bụ ebe steepụ rịgoro n'elu ugwu ahụ dị. N'ịzụlite ihe atụ na ugwu ahụ, anyị na-echeta na n'eziokwu, anyị chọrọ mgbada kachasị elu iji ruo ala dị larịị ngwa ngwa o kwere mee, ya bụ, nke kacha nta - ebe ọrụ anaghị abawanye ma ọ bụ belata. N'ebe a, mwepu ga-ha nhata na efu. Ya mere, anyị adịghị mkpa a gradient, ma ihe antigradient. Iji chọta antigradient, ị ga-achọ naanị iji mee ka gradient mụbaa -1 (mwepu otu).

Ka anyị ṅaa ntị n'eziokwu ahụ bụ na otu ọrụ nwere ike inwe ọtụtụ minima, na-agbada n'ime otu n'ime ha site na iji algọridim a tụrụ aro n'okpuru ebe a, anyị agaghị enwe ike ịchọta opekempe ọzọ, nke nwere ike ịdị ala karịa nke achọtara. Ka anyị zuru ike, nke a abụghị ihe iyi egwu nye anyị! N'ọnọdụ anyị, anyị na-emeso otu kacha nta, ebe ọ bụ na ọrụ anyị Ịdozi nhata nke nkwụghachi azụ linear dị mfe na eserese bụ parabola mgbe niile. Ma dị ka anyị niile kwesịrị ịma nke ọma site na usoro mgbakọ na mwepụ nke ụlọ akwụkwọ anyị, parabola nwere naanị otu kacha nta.

Mgbe anyị chọpụtachara ihe kpatara anyị ji chọọ gradient, yana na gradient bụ akụkụ, ya bụ, vector nwere nhazi enyere, nke bụ otu ọnụọgụgụ. Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe anyị nwere ike mejuputa gradient mgbada.

Tupu ịmalite, a na m atụ aro ka ị gụọ naanị ahịrịokwu ole na ole gbasara algọridim mgbada:

  • Anyị na-ekpebi n'ụzọ pseudo-random nhazi nke ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe. N'ihe atụ anyị, anyị ga-ekpebi ọnụọgụgụ nso efu. Nke a bụ ihe a na-emekarị, mana ikpe ọ bụla nwere ike inwe omume nke ya.
  • Site na nhazi Ịdozi nhata nke nkwụghachi azụ linear dị mfe wepụrụ uru nke usoro izizi akụkụ nke mbụ n'ebe ahụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe. Ya mere, ọ bụrụ na mmepụta ahụ dị mma, mgbe ahụ ọrụ ahụ na-abawanye. Ya mere, site n'iwepụ uru nke mmepụta ihe, anyị ga-aga n'ihu na-abụghị nke uto, ya bụ, na ntụziaka nke ọdịda. Ọ bụrụ na ihe nrụpụta ahụ adịghị mma, mgbe ahụ ọrụ ahụ na-ebelata ma site n'iwepụ uru nke ihe mmepụta ahụ anyị na-aga n'ụzọ nke ọdịda.
  • Anyị na-arụ ọrụ yiri nke ahụ na nhazi Ịdozi nhata nke nkwụghachi azụ linear dị mfe: wepụ uru nke ihe nrụpụta akụkụ n'ebe ahụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe.
  • Ka ị ghara ịwụ elu nke kacha nta wee fega n'ime oghere miri emi, ọ dị mkpa ịtọ ọkwa ọkwa na ntụziaka nke ọdịda. N'ozuzu, ị nwere ike dee otu akụkọ dum gbasara otu esi edozi nzọụkwụ ahụ nke ọma na otu esi agbanwe ya n'oge usoro mgbada iji belata ọnụ ahịa mgbakọ. Ma ugbu a, anyị nwere a dịtụ iche ọrụ, na anyị ga-eguzobe nzọụkwụ size site na nkà mmụta sayensị usoro nke "poke" ma ọ bụ, dị ka ha na-ekwu n'asụsụ nkịtị, empirically.
  • Ozugbo anyị sitere na nhazi ndị enyere Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe wepụ ụkpụrụ nke usoro, anyị na-enweta ọhụrụ nhazi Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe. Anyị na-ewere nzọụkwụ ọzọ (mwepụ), ugbua site na nhazi nhazi. Ya mere, okirikiri ahụ na-amalite ugboro ugboro, ruo mgbe a ga-enweta nkwekọrịta achọrọ.

All! Ugbu a, anyị dị njikere ịga na-achọ nke miri emi gorge nke Mariana Trench. Ka anyị malite.

Koodu maka mgbada gradient

# напишем функцию градиентного спуска без использования библиотеки NumPy. 
# Функция на вход принимает диапазоны значений x,y, длину шага (по умолчанию=0,1), допустимую погрешность(tolerance)
def gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001):
    # сумма значений (все месяца)
    sx = sum(x_us)
    # сумма истинных ответов (выручка за весь период)
    sy = sum(y_us)
    # сумма произведения значений на истинные ответы
    list_xy = []
    [list_xy.append(x_us[i]*y_us[i]) for i in range(len(x_us))]
    sxy = sum(list_xy)
    # сумма квадратов значений
    list_x_sq = []
    [list_x_sq.append(x_us[i]**2) for i in range(len(x_us))]
    sx_sq = sum(list_x_sq)
    # количество значений
    num = len(x_us)
    # начальные значения коэффициентов, определенные псевдослучайным образом
    a = float(random.uniform(-0.5, 0.5))
    b = float(random.uniform(-0.5, 0.5))
    # создаем массив с ошибками, для старта используем значения 1 и 0
    # после завершения спуска стартовые значения удалим
    errors = [1,0]
    # запускаем цикл спуска
    # цикл работает до тех пор, пока отклонение последней ошибки суммы квадратов от предыдущей, не будет меньше tolerance
    while abs(errors[-1]-errors[-2]) > tolerance:
        a_step = a - l*(num*a + b*sx - sy)/num
        b_step = b - l*(a*sx + b*sx_sq - sxy)/num
        a = a_step
        b = b_step
        ab = [a,b]
        errors.append(errors_sq_Kramer_method(ab,x_us,y_us))
    return (ab),(errors[2:])

# запишем массив значений 
list_parametres_gradient_descence = gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001)


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


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



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

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Anyị rutere n'ala ala nke Mariana Trench ma n'ebe ahụ ka anyị hụrụ otu ụkpụrụ ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe, nke bụ kpọmkwem ihe a ga-atụ anya ya.

Ka anyi tugharia mmiri ozo, nani oge a, ugbo ala anyi ga-ejuputa na teknụzụ ndi ozo, ya bu ulo akwukwo. Nọmba.

Koodu maka mgbada gradient (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

Ịdozi nhata nke nkwụghachi azụ linear dị mfe
Ụkpụrụ ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe enweghị mgbanwe.

Ka anyị leba anya ka njehie ahụ siri gbanwee n'oge mgbadata gradient, ya bụ, ka nchikota nke nchikota squared siri gbanwee site na nke ọ bụla.

Koodu maka ịkpa nkata nchikota nke ngbanwe squared

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

Eserese Nke 4 “Nchịkọta ndahie akụkụ anọ n'oge mgbada gradient”

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Na eserese, anyị na-ahụ na nzọụkwụ ọ bụla njehie na-ebelata, na mgbe a ụfọdụ ọnụ ọgụgụ nke iterations anyị na-edebe ihe fọrọ nke nta kehoraizin akara.

N'ikpeazụ, ka anyị tụlee ọdịiche dị na oge mmebe koodu:

Koodu iji chọpụta oge mgbako mgbada gradient

print ' 33[1m' + ' 33[4m' + "Время выполнения градиентного спуска без использования библиотеки NumPy:" + ' 33[0m'
%timeit list_parametres_gradient_descence = gradient_descent_usual(x_us,y_us,l=0.1,tolerance=0.000000000001)
print '***************************************'
print

print ' 33[1m' + ' 33[4m' + "Время выполнения градиентного спуска с использованием библиотеки NumPy:" + ' 33[0m'
%timeit list_parametres_gradient_descence = gradient_descent_numpy(x_np,y_np,l=0.1,tolerance=0.000000000001)

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Ikekwe anyị na-eme ihe na-adịghị mma, ma ọzọ ọ bụ ọrụ dị mfe "dere n'ụlọ" nke na-adịghị eji ọbá akwụkwọ. Nọmba na-egosipụta oge ngụkọ nke ọrụ site na iji ụlọ akwụkwọ Nọmba.

Mana anyị anaghị eguzo otu ebe, mana anyị na-aga n'ihu n'ịmụ ụzọ ọzọ na-atọ ụtọ iji dozie nha nhata kwụ ọtọ. Zute!

Stochastic gradient mgbada

Iji ghọta ngwa ngwa ụkpụrụ nke ọrụ nke stochastic gradient mgbada, ọ ka mma ikpebi ọdịiche ya na gradient nkịtị. Anyị, n'ihe banyere mgbada gradient, na nha nhata nke mmepụta nke Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe jiri nchikota nke ụkpụrụ niile atụmatụ na ezi azịza dị na sample (ya bụ, nchikota niile. Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe). Na stochastic gradient mgbada, anyị agaghị eji ụkpụrụ niile dị ugbu a na sample, kama, pseudo-na-ahọrọ ihe a na-akpọ sample index na-eji ụkpụrụ ya.

Dịka ọmụmaatụ, ọ bụrụ na index na-ekpebi na ọ ga-abụ nọmba 3 (atọ), mgbe ahụ, anyị na-ewere ụkpụrụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe, mgbe ahụ, anyị na-eji dochie ụkpụrụ n'ime usoro mmepụta ihe na-ekpebi ọhụrụ nhazi. Mgbe ahụ, anyị kpebisiri ike na nhazi ndị ahụ, anyị na-ekpebikwa usoro ntinye aka n'enweghị ihe ọ bụla, dochie ụkpụrụ ndị kwekọrọ na ndeksi n'ime nha anya dị iche iche, wee chọpụta nhazi ahụ n'ụzọ ọhụrụ. Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe wdg. ruo mgbe convergence na-atụgharị akwụkwọ ndụ akwụkwọ ndụ. Na ilele mbụ, ọ nwere ike ọ gaghị adị ka nke a nwere ike ịrụ ọrụ ma ọlị, mana ọ na-arụ ọrụ. Ọ bụ ezie na ọ dị mma ịmara na njehie adịghị ebelata na nzọụkwụ ọ bụla, ma e nwere n'ezie ọchịchọ.

Kedu uru dị na mgbada stochastic gradient karịa nke ochie? Ọ bụrụ na anyị sample size bụ nnọọ nnukwu na tụrụ na iri puku kwuru iri puku ụkpụrụ, mgbe ahụ, ọ bụ nnọọ mfe hazie, sịnụ, random puku n'ime ha, kama dum sample. Nke a bụ ebe mgbada stochastic gradient na-abata. N'ọnọdụ anyị, n'ezie, anyị agaghị achọpụta ọtụtụ ihe dị iche.

Ka anyị leba anya na koodu.

Koodu maka mgbada stochastic gradient

# определим функцию стох.град.шага
def stoch_grad_step_usual(vector_init, x_us, ind, y_us, l):
#     выбираем значение икс, которое соответствует случайному значению параметра ind 
# (см.ф-цию stoch_grad_descent_usual)
    x = x_us[ind]
#     рассчитывыаем значение y (выручку), которая соответствует выбранному значению x
    y_pred = vector_init[0] + vector_init[1]*x_us[ind]
#     вычисляем ошибку расчетной выручки относительно представленной в выборке
    error = y_pred - y_us[ind]
#     определяем первую координату градиента ab
    grad_a = error
#     определяем вторую координату ab
    grad_b = x_us[ind]*error
#     вычисляем новый вектор коэффициентов
    vector_new = [vector_init[0]-l*grad_a, vector_init[1]-l*grad_b]
    return vector_new


# определим функцию стох.град.спуска
def stoch_grad_descent_usual(x_us, y_us, l=0.1, steps = 800):
#     для самого начала работы функции зададим начальные значения коэффициентов
    vector_init = [float(random.uniform(-0.5, 0.5)), float(random.uniform(-0.5, 0.5))]
    errors = []
#     запустим цикл спуска
# цикл расчитан на определенное количество шагов (steps)
    for i in range(steps):
        ind = random.choice(range(len(x_us)))
        new_vector = stoch_grad_step_usual(vector_init, x_us, ind, y_us, l)
        vector_init = new_vector
        errors.append(errors_sq_Kramer_method(vector_init,x_us,y_us))
    return (vector_init),(errors)


# запишем массив значений 
list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.1, steps = 800)

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


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

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

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Anyị na-ele anya nke ọma na ọnụọgụgụ wee jide onwe anyị na-ajụ ajụjụ a "Olee otu nke a ga-esi bụrụ?" Anyị nwetara ụkpụrụ ọnụọgụgụ ndị ọzọ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe. Enwere ike mgbada gradient stochastic achọpụtala parampat kacha mma maka nhatanha? Ọ dị nwute mba. O zuru ezu ilele nchikota nke nchikota squared wee hụ na site na ụkpụrụ ọhụrụ nke ọnụọgụgụ, njehie ahụ ka ukwuu. Anyị adịghị ngwa ngwa inwe obi nkoropụ. Ka anyị wuo eserese nke mgbanwe njehie.

Koodu maka ịkpa nkata nchikota nke ndahie squared na mgbada gradient stochastic

print 'График №5 "Сумма квадратов отклонений по-шагово"'
plt.plot(range(len(list_parametres_stoch_gradient_descence[1])), list_parametres_stoch_gradient_descence[1], color='red', lw=2)
plt.xlabel('Steps (Iteration)', size=16)
plt.ylabel('Sum of squared deviations', size=16)
plt.show()

Eserese nke 5 “Nchịkọta ndahie akụkụ anọ n'oge mgbada gradient stochastic”

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

N'ileghachi anya na nhazi oge, ihe niile dabara na ebe ugbu a, anyị ga-edozi ihe niile.

Ya mere gịnị mere? Ihe a mere. Mgbe anyị na-ahọrọ otu ọnwa na-enweghị usoro, mgbe ahụ ọ bụ maka ọnwa ahọpụtara ka algọridim anyị na-achọ ibelata njehie na ịgbakọ ego ha nwetara. Mgbe ahụ, anyị na-ahọrọ ọnwa ọzọ ma na-emegharị ngụkọta oge, ma anyị na-ebelata njehie maka ọnwa nke abụọ ahọpụtara. Ugbu a cheta na ọnwa abụọ mbụ na-akpaghasị nke ọma site n'ahịrị nke nhata nkwụghachi azụ ahịrị dị mfe. Nke a pụtara na mgbe ahọpụtara nke ọ bụla n'ime ọnwa abụọ a, site n'ibelata njehie nke ọ bụla n'ime ha, algọridim anyị na-abawanye njehie maka nlele niile. Yabụ kedu ihe ị ga-eme? Azịza ya dị mfe: ịkwesịrị ibelata nzọụkwụ mgbada. A sị ka e kwuwe, site n'ibelata nzọụkwụ mgbada, njehie ahụ ga-akwụsịkwa "ịwụ elu" na ala. Ma ọ bụ kama, njehie "ịwụ elu" agaghị akwụsị, mana ọ gaghị eme ya ngwa ngwa :) Ka anyị lelee.

Koodu iji mee ka SGD jiri obere ịrị elu mee ihe

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

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Eserese Nke 6 "Nchịkọta ndapụta squared n'oge mgbada gradient stochastic ( puku nzọụkwụ 80)"

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Ọnụọgụ ọnụọgụgụ abawanyela, mana ka adịghị mma. N'echiche efu, enwere ike idozi nke a otu a. Anyị na-ahọrọ, dịka ọmụmaatụ, n'ime 1000 gara aga, ụkpụrụ nke ọnụọgụgụ nke e ji mee njehie kacha nta. N'ezie, maka nke a, anyị ga-edekwa ụkpụrụ nke ọnụọgụgụ n'onwe ha. Anyị agaghị eme nke a, kama ṅaa ntị na nhazi oge. Ọ na-adị ire ụtọ na njehie yiri ka ọ na-ebelata nke ọma. N'ezie nke a abụghị eziokwu. Ka anyị leba anya na 1000 mbụ itieration ma tụnyere ha na nke ikpeazụ.

Koodu maka eserese SGD (usoro 1000 mbụ)

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

Eserese No. 7 "Nchịkọta nke squared deviations SGD (usoro 1000 mbụ)"

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Eserese No. 8 "Nchịkọ nke squared deviations SGD (nzọụkwụ 1000 ikpeazụ)"

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

N'isi mmalite nke mgbada ahụ, anyị na-ahụ otu n'ụzọ ziri ezi na mbelata njehie. Na nke ikpeazụ iterations, anyị na-ahụ na njehie na-aga gburugburu na gburugburu uru nke 1,475 na n'oge ụfọdụ ọbụna hà nke a ezigbo uru, ma mgbe ahụ, ọ ka na-arị elu ... m ikwugharị, ị nwere ike dee ala ụkpụrụ nke ọnụọgụgụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe и Ịdozi nhata nke nkwụghachi azụ linear dị mfe, wee họrọ ndị nke njehie dị ntakịrị maka. Otú ọ dị, anyị nwere nsogbu ka njọ: anyị ga-eme 80 puku nzọụkwụ (lee koodu) iji nweta ụkpụrụ nso kacha mma. Ma nke a emegidelarị echiche nke ịchekwa oge ngụkọ na mgbako stochastic gradient metụtara agbụrụ gradient. Kedu ihe enwere ike imezi ma melite? Ọ bụghị ihe siri ike ịhụ na na mbụ iterations anyị ji obi ike na-agbada na, ya mere, anyị kwesịrị ịhapụ nnukwu nzọụkwụ na mbụ iterations na ibelata nzọụkwụ ka anyị na-aga n'ihu. Anyị agaghị eme nke a n'isiokwu a - ọ dịlarị ogologo. Ndị chọrọ nwere ike iche n'onwe ha otu esi eme nke a, ọ bụghị ihe siri ike :)

Ugbu a, ka anyị jiri ụlọ ọba akwụkwọ mee mgbada stochastic gradient Nọmba (ka anyị gharakwa ịsụ ngọngọ n'elu nkume ndị anyị chọpụtara na mbụ)

Koodu maka mgbada Stochastic gradient (NumPy)

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

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

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

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


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



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

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

Ụkpụrụ ndị ahụ tụgharịrị bụrụ ihe fọrọ nke nta ka ọ bụrụ otu mgbe ọ na-agbada n'ejighị ya Nọmba. Agbanyeghị, nke a bụ ezi uche.

Ka anyị chọpụta ogologo oge stochastic gradient siri were were anyị.

Koodu maka ikpebi oge mgbako SGD (usoro puku 80)

print ' 33[1m' + ' 33[4m' +
"Время выполнения стохастического градиентного спуска без использования библиотеки NumPy:"
+ ' 33[0m'
%timeit list_parametres_stoch_gradient_descence = stoch_grad_descent_usual(x_us, y_us, l=0.001, steps = 80000)
print '***************************************'
print

print ' 33[1m' + ' 33[4m' +
"Время выполнения стохастического градиентного спуска с использованием библиотеки NumPy:"
+ ' 33[0m'
%timeit list_parametres_stoch_gradient_descence = stoch_grad_descent_numpy(x_np, y_np, l=0.001, steps = 80000)

Ịdozi nhata nke nkwụghachi azụ linear dị mfe

N'ịga n'ihu n'ime ọhịa ahụ, ígwé ojii na-agba ọchịchịrị: ọzọ, usoro "edere onwe ya" na-egosi nsonaazụ kacha mma. Ihe ndị a niile na-egosi na a ga-enwerịrị ụzọ aghụghọ karịa iji ụlọ akwụkwọ ahụ Nọmba, nke na-eme ka ọrụ mgbakọ na-eme ngwa ngwa. N’isiokwu a, anyị agaghị amụ banyere ha. A ga-enwe ihe ị ga-eche n'oge ezumike gị :)

Ka anyi ichikota

Tupu m chịkọta ọnụ, ọ ga-amasị m ịza ajụjụ nke yikarịrị ka ọ sitere n'aka onye na-agụ akwụkwọ anyị hụrụ n'anya. Kedu ihe kpatara, n'ezie, "mmekpa ahụ" dị otú ahụ na ụmụ, gịnị mere anyị ji kwesị ịga ije na ala ugwu (ọtụtụ n'ime ala) iji chọta ala dị oké ọnụ ahịa, ma ọ bụrụ na anyị nwere ngwaọrụ dị ike ma dị mfe n'aka anyị, na ụdị ngwọta nyocha, nke na-ezigara anyị ozugbo na ebe kwesịrị ekwesị?

Azịza nye ajụjụ a dị n'elu. Ugbu a, anyị lere anya n'ihe atụ dị mfe, nke azịza ya bụ Ịdozi nhata nke nkwụghachi azụ linear dị mfe dabere n'otu akara Ịdozi nhata nke nkwụghachi azụ linear dị mfe. Ị naghị ahụ nke a ugboro ugboro na ndụ, yabụ ka anyị were ya na anyị nwere akara 2, 30, 50 ma ọ bụ karịa. Ka anyị tinye na puku kwuru puku a, ma ọ bụ ọbụna iri puku kwuru iri ụkpụrụ maka njirimara ọ bụla. N'okwu a, ngwọta nyocha nwere ike ọ gaghị anabata ule ahụ wee daa. N'aka nke ya, mgbada gradient na ọdịiche ya ga-eji nwayọọ nwayọọ na-eweta anyị nso na ihe mgbaru ọsọ - kacha nta nke ọrụ. Ma echegbula onwe gị maka ọsọ - anyị ga-eleba anya n'ụzọ ga-enye anyị ohere ịtọ na ịhazi ogologo nzọụkwụ (ya bụ, ọsọ).

Ma ugbu a n'ezie nkenke nchịkọta.

Nke mbu, enwere m olile anya na ihe eweputara n’isiokwu a ga - enyere aka ibido “ndị sayensi data” n’ịghọta otu esi edozi usoro ngbanwe dị mfe (ọ bụghị naanị).

Nke abụọ, anyị lere anya ọtụtụ ụzọ iji dozie nhata. Ugbu a, dabere na ọnọdụ ahụ, anyị nwere ike ịhọrọ nke kachasị mma iji dozie nsogbu ahụ.

Nke atọ, anyị hụrụ ike nke ntọala agbakwunyere, ya bụ ogologo mgbada mgbada gradient. Enweghị ike ileghara oke a anya. Dị ka e kwuru n'elu, iji belata ọnụ ahịa nke ngụkọta oge, a ga-agbanwe ogologo nzọụkwụ n'oge mgbada.

Nke anọ, n'ọnọdụ anyị, ọrụ "edere n'ụlọ" gosipụtara nsonaazụ oge kacha mma maka mgbako. Nke a nwere ike ịbụ n'ihi na ọ bụghị ọkachamara kachasị iji ikike ụlọ akwụkwọ ahụ eme ihe Nọmba. Mana ọ bụrụ na ọ nwere ike, nkwubi okwu a na-egosi onwe ya. N'otu aka ahụ, mgbe ụfọdụ ọ bara uru ịjụ echiche ndị guzosiri ike, na n'aka nke ọzọ, ọ bụghị mgbe niile ka ọ dị mgbagwoju anya ihe niile - n'ụzọ megidere nke ahụ, mgbe ụfọdụ, ụzọ dị mfe iji dozie nsogbu na-adị irè karị. Ma ebe ebumnobi anyị bụ inyocha ụzọ atọ iji dozie nhata nkwụghachi azụ n'ahịrị dị mfe, iji ọrụ “edere onwe ya” ezuola anyị.

Akwụkwọ (ma ọ bụ ihe dị otú ahụ)

1. Linear regression

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

2. Ụzọ kacha nta n'ámá

mathprofi.ru/metod_naimenshih_kvadratov.html

3. Mwepụta

www.mathprofi.ru/chastnye_proizvodnye_primery.html

4. Nke nta nwayọ

mathprofi.ru/proizvodnaja_po_napravleniju_i_gradient.html

5. mgbada gradient

habr.com/ru/post/471458

habr.com/ru/post/307312

artemarakcheev.com/2017-12-31/linear_regression

6. Ọbá akwụkwọ 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

isi: www.habr.com

Tinye a comment