Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Kūkākūkā ka ʻatikala i nā ʻano he nui e hoʻoholo ai i ka hoʻohālikelike makemakika o kahi laina hoʻihoʻi maʻalahi (pālua).

ʻO nā ʻano hana a pau o ka hoʻoponopono ʻana i ka hoohalike i kūkākūkā ʻia ma ʻaneʻi, ua hoʻokumu ʻia ma luna o ke ʻano huinahā liʻiliʻi. E hōʻike i nā ʻano hana penei:

  • ʻO ka hoʻoponopono hoʻoponopono
  • Ka Descent Gradient
  • Ka iho gradient Stochastic

No kēlā me kēia ʻano o ka hoʻoponopono ʻana i ka hoʻohālikelike o kahi laina pololei, hāʻawi ka ʻatikala i nā hana like ʻole, i māhele nui ʻia i nā mea i kākau ʻia me ka hoʻohana ʻole ʻana i ka waihona. Nā NumPy a me nā mea hoʻohana no ka helu ʻana Nā NumPy. Manaʻo ʻia ka hoʻohana akamai Nā NumPy e hoemi ana i na koina helu.

Ua kākau ʻia nā code āpau i hāʻawi ʻia ma ka ʻatikala ma ka ʻōlelo ʻthlelo 2.7 hoʻohana ʻana Puke Memo Jupyter. Hoʻopuka ʻia ka code kumu a me ka faila me ka ʻikepili laʻana Github

ʻOi aku ka manaʻo o ka ʻatikala i nā poʻe hoʻomaka a me ka poʻe i hoʻomaka mālie i ka hoʻopaʻa ʻana i kahi ʻāpana ākea loa i ka naʻauao artificial - aʻo mīkini.

No ka hōʻike ʻana i ka mea, hoʻohana mākou i kahi laʻana maʻalahi loa.

Kūlana laʻana

Loaʻa iā mākou nā waiwai ʻelima e hōʻike ana i ka hilinaʻi Y от X (Papa No. 1):

Papa No. 1 "Nā kūlana hoʻohālike"

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

E manaʻo mākou i nā waiwai Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi oia ka malama o ka makahiki, a Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi - loaʻa i kēia mahina. I nā huaʻōlelo ʻē aʻe, pili ka loaʻa kālā i ka mahina o ka makahiki, a Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi - ka hōʻailona wale nō e hilinaʻi ai ka loaʻa kālā.

ʻO ka hiʻohiʻona ka mea, mai ka manaʻo o ka hilinaʻi o ka loaʻa kālā ma ka mahina o ka makahiki, a mai ka manaʻo o ka helu o nā waiwai - he liʻiliʻi loa o lākou. Eia nō naʻe, ʻo ia ʻano maʻalahi e hiki ai, e like me kā lākou e ʻōlelo nei, e wehewehe, ʻaʻole i nā manawa a pau me ka maʻalahi, nā mea i hoʻohui ʻia e nā mea hoʻomaka. A ʻo ka maʻalahi hoʻi o nā helu e ʻae i ka poʻe makemake e hoʻoponopono i ka laʻana ma ka pepa me ka ʻole o nā uku hana nui.

E noʻonoʻo kākou e hiki ke hoʻohālikelike ʻia ka hilinaʻi i hāʻawi ʻia i ka laʻana e ka hoʻohālikelike makemakika o kahi laina regression maʻalahi (paired) o ke ʻano:

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

kahi Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ka malama i loaa mai ai ka loaa. Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi - loaʻa kālā e pili ana i ka mahina, Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ʻo ia nā koena hoʻihoʻi o ka laina i manaʻo ʻia.

E hoʻomanaʻo i ka coefficient Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi kapa pinepine ʻia ʻo ka slope a i ʻole gradient o ka laina i manaʻo ʻia; hōʻike i ka nui o ka Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ke hoololi Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi.

ʻIke loa, ʻo kā mākou hana ma ka laʻana e koho i nā coefficients i ka hoohalike Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, kahi i hoʻokaʻawale ʻia ai kā mākou mau waiwai i helu ʻia e ka mahina mai nā pane ʻoiaʻiʻo, ʻo ia hoʻi. liʻiliʻi nā waiwai i hōʻike ʻia ma ka hāpana.

ʻO ke ʻano huinahā liʻiliʻi loa

E like me ke ʻano o nā huinahā liʻiliʻi, pono e helu ʻia ka haʻalele ʻana ma ka hoʻohālikelike ʻana. Hāʻawi kēia ʻenehana iā ʻoe e pale i ka hoʻopau like ʻana o nā deviations inā loaʻa iā lākou nā hōʻailona kū'ē. No ka laʻana, inā ma kekahi hihia, ʻo ka deviation +5 (me ʻelima), a ma kekahi -5 (hōʻemi ʻelima), a laila e hoʻopau ka huina o nā ʻokoʻa i kekahi i kekahi a hiki i ka 0 (zero). ʻAʻole hiki ke hoʻokaʻawale i ka deviation, akā, e hoʻohana i ka waiwai o ka modulus a laila e maikaʻi nā deviations a pau a e hōʻiliʻili. ʻAʻole mākou e noʻonoʻo i kēia kikoʻī, akā hōʻike wale ʻia no ka maʻalahi o ka helu ʻana, he mea maʻamau ka hoʻohālikelike ʻana i ka deviation.

ʻO kēia ke ʻano o ke ʻano e hoʻoholo ai mākou i ka huina liʻiliʻi o nā haʻihaʻi huinaha (hewa):

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

kahi Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi He hana ia o ka hoʻopili ʻana i nā pane ʻoiaʻiʻo (ʻo ia hoʻi, ka loaʻa kālā a mākou i helu ai),

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ʻo nā pane ʻoiaʻiʻo (nā loaʻa i hāʻawi ʻia ma ka laʻana),

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ʻo ia ka hōʻailona hōʻailona (helu o ka mahina i hoʻoholo ʻia ai ka haʻalele ʻana)

E hoʻokaʻawale i ka hana, e wehewehe i nā haʻihaʻi ʻokoʻa hapa, a mākaukau e neʻe i ka hopena analytical. Akā ʻo ka mea mua, e hele mākou i kahi huakaʻi pōkole e pili ana i ke ʻano o ka ʻokoʻa a hoʻomanaʻo i ke ʻano geometric o ka derivative.

ʻokoʻa

ʻO ka ʻokoʻa ka hana o ka ʻimi ʻana i ka derivative o kahi hana.

He aha ka derivative i hoʻohana ʻia no? Hōʻike ka derivative o kahi hana i ka wikiwiki o ka loli o ka hana a haʻi iā mākou i kona kuhikuhi. Inā maikaʻi ka derivative ma kahi kiko, a laila e piʻi ka hana, a i ʻole, e emi ka hana. A ʻoi aku ka nui o ka waiwai o ka derivative paʻa, ʻoi aku ka kiʻekiʻe o ka hoʻololi ʻana o nā waiwai hana, a me ka ʻoi aku o ka pali o ka pakuhi hana.

No ka laʻana, ma lalo o nā kūlana o kahi ʻōnaehana hoʻonohonoho Cartesian, ua like ka waiwai o ka derivative ma ke kiko M(0,0) me 25 + 'o ia ho'i ma kahi kiko'ī, ke ho'ololi 'ia ka waiwai Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi i ka ʻākau e kahi ʻāpana maʻamau, waiwai Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi piʻi e 25 mau ʻāpana maʻamau. Ma ka pakuhi, ua like ia me ka pi'i 'ana o ka waiwai Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi mai kahi i hāʻawi ʻia.

ʻO kekahi laʻana. Ua like ka waiwai kumu -0,1 ʻo ia hoʻi ke hoʻoneʻe ʻia Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi i hoʻokahi ʻāpana maʻamau, waiwai Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi e emi iho ana ma ka 0,1 wae wale no. Ma ka manawa like, ma ka pakuhi o ka hana, hiki iā mākou ke nānā i kahi ʻano ʻike ʻole i lalo. Ke kiʻi ʻana i kahi hoʻohālikelike me kahi mauna, me he mea lā e iho mālie mākou i kahi pali mālie mai kahi mauna mai, ʻaʻole like me ka laʻana mua, kahi mākou e piʻi ai i nā piko pali loa :)

No laila, ma hope o ka hoʻokaʻawale ʻana i ka hana Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ma ke kuʻikahi Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, wehewehe mākou i nā hoʻohālikelike hapa ʻokoʻa. Ma hope o ka hoʻoholo ʻana i nā hoʻohālikelike, e loaʻa iā mākou kahi ʻōnaehana o nā hoʻohālikelike ʻelua, ma ka hoʻoholo ʻana e hiki ai iā mākou ke koho i nā waiwai o nā coefficients. Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, no ka mea e hoʻololi ʻia nā waiwai o nā derivatives e pili ana i nā wahi i hāʻawi ʻia e ka liʻiliʻi loa, a i ka hihia o kahi hopena analytical ʻaʻole e loli iki. I nā huaʻōlelo ʻē aʻe, ʻo ka hana hewa i nā coefficients i ʻike ʻia e hōʻea i ka liʻiliʻi, no ka mea, e like nā waiwai o nā derivatives hapa ma kēia mau wahi me ka zero.

No laila, e like me nā lula o ka hoʻokaʻawale ʻana, ʻo ka haʻihaʻi derivative hapa o ka papa mua e pili ana i ka coefficient. Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi e lawe i ke ʻano:

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

ʻO ka hoʻokaʻina haʻihaʻi hapa mua e pili ana i Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi e lawe i ke ʻano:

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

ʻO ka hopena, ua loaʻa iā mākou kahi ʻōnaehana hoʻohālikelike i loaʻa kahi hopena analytical maʻalahi:

hoʻomaka{equation*}
hoʻomaka{hihia}
na + bsumlimits_{i=1}^nx_i — huina_{i=1}^ny_i = 0

huina_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i — palena_{i=1}^ny_i) = 0
hope{hihia}
pau{equation*}

Ma mua o ka hoʻoholo ʻana i ka hoohalike, e hoʻouka mua kākou, e nānā i ka pololei o ka hoʻouka ʻana, a e hoʻopololei i ka ʻikepili.

Hoʻouka a hoʻopololei i ka ʻikepili

Pono e hoʻomaopopo ʻia ma muli o ka ʻoiaʻiʻo no ka hopena analytical, a ma hope no ka gradient a me ka stochastic gradient descent, e hoʻohana mākou i ke code ma nā ʻano ʻelua: me ka hoʻohana ʻana i ka waihona. Nā NumPy a me ka hoʻohana ʻole ʻana, a laila pono mākou i ka hoʻopololei ʻikepili kūpono (e ʻike i ke code).

Hoʻouka ʻikepili a me ke code hana

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

Hōʻikeʻike

I kēia manawa, ma hope o ka hoʻouka ʻana i ka ʻikepili, ʻo ka lua, nānā i ka pololei o ka hoʻouka ʻana a hoʻopau hope i ka ʻikepili, e hoʻokō mākou i ka ʻike mua. ʻO ke ʻano i hoʻohana pinepine ʻia no kēia papalua hale waihona puke Kapakai. I kā mākou laʻana, ma muli o nā helu liʻiliʻi, ʻaʻohe kumu o ka hoʻohana ʻana i ka waihona Kapakai. E hoʻohana mākou i ka waihona maʻamau matplotlib a e nana wale i ka scatterplot.

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

Palapala No. 1 "Ka hilinaʻi o ka loaʻa kālā ma ka mahina o ka makahiki"

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

ʻO ka hoʻoponopono hoʻoponopono

E hoʻohana kākou i nā mea hana maʻamau i python a hoʻoponopono i ka ʻōnaehana o nā hoohalike:

hoʻomaka{equation*}
hoʻomaka{hihia}
na + bsumlimits_{i=1}^nx_i — huina_{i=1}^ny_i = 0

huina_{i=1}^nx_i(a +bsumlimits_{i=1}^nx_i — palena_{i=1}^ny_i) = 0
hope{hihia}
pau{equation*}

E like me ke kānāwai o Cramer e loaʻa iā mākou ka mea hoʻoholo maʻamau, a me nā mea hoʻoholo e Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi a e Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, mahope iho, e puunaue ana i ka mea hooholo e Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi i ka mea hoʻoholo maʻamau - e ʻimi i ke koena Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, ʻike like mākou i ka coefficient Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi.

Code hoʻonā analytical

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

Eia ka mea i loaa ia makou:

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

No laila, ua ʻike ʻia nā waiwai o nā coefficients, ua hoʻokumu ʻia ka huina o nā deviations squared. E kahakiʻi i kahi laina pololei ma ka histogram hoʻopuehu e like me nā coefficient i loaʻa.

Code laina regression

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

Papa helu 2 “Nā pane pololei a helu ʻia”

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Hiki iā ʻoe ke nānā i ka pakuhi hoʻokaʻawale no kēlā me kēia mahina. I kā mākou hihia, ʻaʻole mākou e loaʻa i kekahi waiwai kūpono nui mai ia mea, akā e hoʻomāʻona mākou i ko mākou ʻimi e pili ana i ka maikaʻi o ka hoʻohālikelike ʻana o ka linear regression equation i ka hilinaʻi o ka loaʻa kālā ma ka mahina o ka makahiki.

Kiʻi palapala kuhi

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

Palapala No. 3 “Kuhie, %”

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

ʻAʻole maikaʻi, akā ua hoʻopau mākou i kā mākou hana.

E kākau kākou i kekahi hana i mea, e hoʻoholo i nā coefficients Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi hoʻohana i ka waihona Nā NumPy, ʻoi aku ka pololei, e kākau mākou i ʻelua mau hana: hoʻohana kekahi i ka matrix pseudoinverse (ʻaʻole ʻōlelo ʻia ma ka hana, no ka mea he paʻakikī a paʻa ʻole ke kaʻina hana), ʻo kekahi e hoʻohana ana i ka hoʻohālikelike matrix.

Code Hoʻoponopono Analytical (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

E hoʻohālikelike kākou i ka manawa e hoʻoholo ai i nā coefficients Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, e like me nā ʻano hana 3 i hōʻike ʻia.

Code no ka helu ʻana i ka manawa helu

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)

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Me ka liʻiliʻi o ka ʻikepili, e puka mai ana kahi hana "kākau pono'ī" i mua, e ʻike ai i nā coefficient e hoʻohana ana i ke ʻano o Cramer.

I kēia manawa hiki iā ʻoe ke neʻe i nā ala ʻē aʻe e ʻike ai i nā coefficient Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi.

Ka Descent Gradient

ʻO ka mua, e wehewehe kākou i ke ʻano o ka gradient. ʻO ka ʻōlelo maʻalahi, ʻo ka gradient kahi ʻāpana e hōʻike ana i ke kuhikuhi o ka ulu kiʻekiʻe o kahi hana. Ma ka hoʻohālikelike me ka piʻi ʻana i ke kuahiwi, ma kahi e kū pono ai ka gradient ma kahi o ka piʻi ʻoi loa o ka piko o ke kuahiwi. Ke hoʻomohala nei i ka laʻana me ka mauna, hoʻomanaʻo mākou i ka ʻoiaʻiʻo pono mākou i ka iho kiʻekiʻe loa e hiki ai i ka ʻāina haʻahaʻa me ka wikiwiki e hiki ai, ʻo ia hoʻi, ka liʻiliʻi loa - kahi kahi i piʻi ʻole ai ka hana. I kēia manawa e like ka derivative me ka ʻole. No laila, ʻaʻole pono mākou i kahi gradient, akā he antigradient. No ka huli ʻana i ka antigradient pono ʻoe e hoʻonui i ka gradient me -1 (emi hoʻokahi).

E hoʻolohe kākou i ka mea hiki ke loaʻa i kahi hana he mau minima, a i ka iho ʻana i loko o kekahi o lākou me ka hoʻohana ʻana i ka algorithm i manaʻo ʻia ma lalo nei, ʻaʻole hiki iā mākou ke ʻimi i kahi liʻiliʻi ʻē aʻe, ʻoi aku ka haʻahaʻa ma mua o ka mea i loaʻa. E hoʻomaha kākou, ʻaʻole kēia he mea hoʻoweliweli iā kākou! I kā mākou hihia, ke hana nei mākou me ka liʻiliʻi hoʻokahi, mai kā mākou hana Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ma ka pakuhi he parabola mau. A ʻoiai e ʻike pono kākou a pau mai kā mākou papa makemakika kula, hoʻokahi wale nō ka liʻiliʻi o ka parabola.

Ma hope o ko mākou ʻike ʻana i ke kumu e pono ai mākou i kahi gradient, a ʻo ka gradient kekahi ʻāpana, ʻo ia hoʻi, he vector me nā koina i hāʻawi ʻia, ʻo ia hoʻi nā coefficients like. Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi hiki iā mākou ke hoʻokō i ka iho gradient.

Ma mua o ka hoʻomaka ʻana, manaʻo wau e heluhelu i kekahi mau ʻōlelo e pili ana i ka algorithm descent:

  • Hoʻoholo mākou ma ke ʻano pseudo-random i nā hoʻonohonoho o nā coefficients Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi. Ma kā mākou laʻana, e hoʻoholo mākou i nā coefficient kokoke i ka zero. He hana maʻamau kēia, akā hiki i kēlā me kēia hihia ke hana ponoʻī.
  • Mai ka coordinate Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi e unuhi i ka waiwai o ka 1st order partial derivative ma ke kiko Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi. No laila, inā maikaʻi ka derivative, a laila hoʻonui ka hana. No laila, ma ka unuhi ʻana i ka waiwai o ka derivative, e neʻe mākou ma ka ʻaoʻao ʻē aʻe o ka ulu ʻana, ʻo ia hoʻi, ma ke ala o ka iho. Inā maikaʻi ʻole ka derivative, a laila e emi ka hana ma kēia wahi a ma ka unuhi ʻana i ka waiwai o ka derivative e neʻe mākou i ke ala o ka iho.
  • Hana mākou i kahi hana like me ka coordinate Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi: e unuhi i ka waiwai o ka huina hapa ma ke kiko Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi.
  • Iʻole e lele i luna o ka liʻiliʻi a lele i ka hohonu hohonu, pono e hoʻonohonoho i ka nui o ka paepae i ke ala o ka iho. Ma keʻano laulā, hiki iā ʻoe ke kākau i kahi ʻatikala holoʻokoʻa e pili ana i ka hoʻonohonoho pono ʻana i ka ʻanuʻu a pehea e hoʻololi ai i ka wā o ka iho ʻana i mea e hōʻemi ai i nā kumukūʻai helu. Akā i kēia manawa he hana ʻē aʻe kā mākou ma mua o mākou, a e hoʻokumu mākou i ka nui o ka ʻanuʻu me ka hoʻohana ʻana i ke ʻano ʻepekema o "poke" a i ʻole, e like me kā lākou e ʻōlelo nei ma ka ʻōlelo maʻamau, empirically.
  • Ke hele mākou mai nā hoʻonohonoho i hāʻawi ʻia Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi e unuhi i nā waiwai o nā derivatives, loaʻa iā mākou nā hoʻonohonoho hou Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi. Lawe mākou i ka ʻanuʻu aʻe (unuhi), mai nā hoʻonohonoho i helu ʻia. A no laila, hoʻomaka hou ka pōʻai, a hiki i ka hoʻokō ʻana i ka convergence i makemake ʻia.

ʻO nā mea a pau! I kēia manawa ua mākaukau mākou e hele e ʻimi i ke awāwa hohonu loa o ka ʻAuwai ʻo Mariana. E hoʻomaka kākou.

Code no ka iho 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

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Luʻu mākou i lalo loa o ka ʻAuwai ʻo Mariana a ma laila mākou i ʻike ai i nā helu helu helu like Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, ʻo ia ka mea i manaʻo ʻia.

E luʻu hou kākou, i kēia manawa wale nō, e hoʻopiha ʻia ko kākou kaʻa kai hohonu i nā ʻenehana ʻē aʻe, ʻo ia hoʻi he waihona. Nā NumPy.

Code no ka iho ʻana i ka 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

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi
Koefficient waiwai Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi hiki ole ke hoololiia.

E nānā i ke ʻano o ka hoʻololi ʻana o ka hewa i ka iho ʻana o ka gradient, ʻo ia hoʻi, pehea ka hoʻololi ʻana o ka huina o nā haʻihaʻi huinaha me kēlā me kēia ʻanuʻu.

Code no ka hoʻolālā ʻana i nā hōʻuluʻulu o nā haʻihaʻi huinaha

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

Kiʻikuhi No. 4 “Ka huina o nā haʻihaʻi huinahā like i ka wā e iho ana i ka gradient”

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Ma ka pakuhi ʻike mākou i kēlā me kēia ʻanuʻu e emi ana ka hewa, a ma hope o kekahi mau helu o ka hoʻomaʻamaʻa ʻike mākou i kahi laina kokoke.

ʻO ka hope, e koho i ka ʻokoʻa o ka manawa hoʻokō code:

Code no ka hoʻoholo ʻana i ka manawa helu gradient iho

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)

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Malia paha ke hana hewa nei mākou, akā he hana maʻalahi "home-kākau" ʻaʻole hoʻohana i ka waihona. Nā NumPy ʻoi aku ka maikaʻi o ka manawa helu o kahi hana me ka hoʻohana ʻana i ka waihona Nā NumPy.

ʻAʻole naʻe mākou e kū mālie, akā ke neʻe nei mākou i ke aʻo ʻana i kahi ala ʻē aʻe e hoʻoponopono ai i ka hoʻohālikelike hoʻihoʻi laina maʻalahi. E hālāwai me mākou!

Ka iho gradient Stochastic

I mea e hoʻomaopopo koke ai i ke kumumanaʻo o ka hana o ka iho gradient stochastic, ʻoi aku ka maikaʻi o ka hoʻoholo ʻana i kona ʻokoʻa mai ka iho gradient maʻamau. Mākou, ma ka hihia o ka gradient iho, ma ka hoohalike o na derivatives o Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi ua hoʻohana i nā huina o nā waiwai o nā hiʻohiʻona a me nā pane ʻoiaʻiʻo i loaʻa i ka hāpana (ʻo ia hoʻi, nā huina o nā mea a pau Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi). I ka stochastic gradient descent, ʻaʻole mākou e hoʻohana i nā waiwai āpau i loaʻa i ka hāpana, akā, koho pseudo-randomly i ka mea i kapa ʻia ʻo sample index a hoʻohana i kāna mau waiwai.

No ka laʻana, inā hoʻoholo ʻia ka helu helu 3 (ʻekolu), a laila lawe mākou i nā waiwai Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, a laila hoʻololi mākou i nā waiwai i nā hoʻohālikelike derivative a hoʻoholo i nā hoʻonohonoho hou. A laila, i ka hoʻoholo ʻana i nā coordinate, hoʻoholo hou mākou i ka index index, hoʻololi i nā waiwai e pili ana i ka index i loko o nā hoʻohālikelike ʻokoʻa ʻāpana, a hoʻoholo i nā hoʻonohonoho i kahi ala hou. Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi etc. a hiki i ka ʻōmaʻomaʻo o ka hui ʻana. I ka nānā mua ʻana, ʻaʻole paha e hiki ke hana i kēia, akā hana. He ʻoiaʻiʻo he mea pono e hoʻomaopopo ʻaʻole e emi ka hewa i kēlā me kēia pae, akā aia nō ke ʻano.

He aha nā mea maikaʻi o ka iho gradient stochastic ma mua o ka mea maʻamau? Inā nui loa kā mākou hāpana nui a ana ʻia i nā ʻumi kaukani o nā waiwai, a laila ʻoi aku ka maʻalahi o ka hana ʻana, e ʻōlelo, he kaukani maʻamau o lākou, ma mua o ka hāpana holoʻokoʻa. ʻO kēia kahi e pāʻani ai ka iho gradient stochastic. I kā mākou hihia, ʻoiaʻiʻo, ʻaʻole mākou e ʻike i kahi ʻokoʻa.

E nānā kākou i ke code.

Code no ka iho gradient stochastic

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

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Ke nānā pono nei mākou i nā coefficient a hopu iā mākou iho e nīnau ana i ka nīnau "Pehea e hiki ai kēia?" Loaʻa iā mākou nā waiwai coefficient ʻē aʻe Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi. Ua loaʻa paha i ka iho gradient stochastic nā ʻāpana kūpono loa no ka hoohalike? ʻAʻole naʻe. Ua lawa ka nānā ʻana i ka huina o nā deviations squared a ʻike me nā waiwai hou o nā coefficients, ʻoi aku ka nui o ka hewa. ʻAʻole mākou wikiwiki i ka manaʻolana. E kūkulu kākou i pakuhi o ka hoʻololi hewa.

Code no ka hoʻolālā ʻana i ka hōʻuluʻulu ʻana o nā haʻihaʻi ʻaoʻao i ka iho 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()

Kiʻikuhi No. 5 “Ka huina o nā haʻihaʻi huinaha i ka wā e iho ana i ka gradient stochastic”

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Ke nānā nei i ka papahana, hāʻule nā ​​​​mea āpau a i kēia manawa e hoʻoponopono mākou i nā mea āpau.

No laila he aha ka mea i hana? Ua hiki mai keia. Ke koho wale mākou i ka mahina, a laila no ka mahina i koho ʻia e ʻimi ai kā mākou algorithm e hōʻemi i ka hewa i ka helu ʻana i ka loaʻa kālā. A laila koho mākou i kahi mahina ʻē aʻe a hana hou i ka helu ʻana, akā hoʻemi mākou i ka hewa no ka mahina ʻelua i koho ʻia. I kēia manawa, e hoʻomanaʻo ʻoe ua haʻalele nui nā mahina ʻelua mai ka laina o ka hoʻohālikelike hoʻihoʻi laina maʻalahi. 'O ia ho'i, ke koho 'ia kekahi o kēia mau mahina 'elua, ma ka ho'emi 'ana i ka hewa o kēlā me kēia, ho'onui nui kā mākou algorithm i ka hewa no ka hāpana holo'oko'a. No laila he aha ka hana? He mea maʻalahi ka pane: pono ʻoe e hōʻemi i ka pae iho. Ma hope o nā mea a pau, ma ka hōʻemi ʻana i ka pae iho, e pau ka hewa i ka "lele" i luna a i lalo. A i ʻole, ʻaʻole e pau ka hewa "lele", akā ʻaʻole ia e hana wikiwiki :) E nānā kāua.

Code e holo SGD me nā mea liʻiliʻi liʻiliʻi

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

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Kiʻikuhi No. 6 “Ka huina o nā haʻihaʻi huinaha i ka wā o ka iho gradient stochastic (80 tausani kapuaʻi)”

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Ua hoʻomaikaʻi nā coefficient, akā ʻaʻole naʻe i kūpono. Hypothetically, hiki ke hoʻoponopono ʻia kēia ʻano. Koho mākou, no ka laʻana, i nā helu 1000 hope loa i nā waiwai o nā coefficient i hana ʻia ai ka hapa liʻiliʻi. ʻOiaʻiʻo, no kēia, pono mākou e kākau i nā waiwai o nā coefficient iā lākou iho. ʻAʻole mākou e hana i kēia, akā e hoʻolohe pono i ka papahana. ʻIke ʻia ke ʻano maʻalahi a me he mea lā e emi like ana ka hewa. ʻAʻole ʻoiaʻiʻo kēia. E nānā kākou i nā 1000 mua a hoʻohālikelike iā lākou me ka hope.

Code no ka pakuhi SGD (nā ʻanuʻu mua 1000)

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

Kiʻikuhi No. 7 “Ka huina o ka huinahā like SGD (1000 kapuaʻi mua)”

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Kiʻikuhi No. 8 “Ka huina o ka huina huinahalike SGD (nā ʻanuʻu 1000 hope loa)”

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

I ka hoʻomaka ʻana o ka iho ʻana, ʻike mākou i ka emi ʻana o ka hewa. I nā ʻōlelo hope loa, ʻike mākou e hele a puni ka hewa i ka waiwai o 1,475 a i kekahi manawa e like me kēia waiwai maikaʻi loa, akā ke piʻi mau nei ia ... Ke haʻi hou nei au, hiki iā ʻoe ke kākau i nā waiwai coefficients Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi и Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi, a laila koho i nā mea i liʻiliʻi ka hewa. Eia naʻe, ua loaʻa iā mākou kahi pilikia koʻikoʻi: pono mākou e lawe i 80 tausani mau ʻanuʻu (e ʻike i ke code) e hoʻokokoke i nā waiwai i ka maikaʻi. A ua kūʻē kēia i ka manaʻo o ka mālama ʻana i ka manawa helu me ka stochastic gradient descent e pili ana i ka gradient descent. He aha ka mea hiki ke hoʻoponopono a hoʻomaikaʻi? ʻAʻole paʻakikī ke hoʻomaopopo ʻana i ka hoʻomaʻamaʻa mua ʻana mākou me ka hilinaʻi e iho i lalo a no laila, pono mākou e waiho i kahi ʻanuʻu nui i nā ʻōkuhi mua a hoʻemi i ka pae i ko mākou neʻe ʻana i mua. ʻAʻole mākou e hana i kēia ma kēia ʻatikala - ua lōʻihi loa ia. Hiki i ka poʻe makemake ke noʻonoʻo iā lākou iho pehea e hana ai i kēia, ʻaʻole paʻakikī :)

I kēia manawa, e hana kākou i ka stochastic gradient descent me ka hoʻohana ʻana i ka waihona Nā NumPy (a ʻaʻole kākou e hina i nā pōhaku a kākou i ʻike mua ai)

Code no ka Descent Gradient Stochastic (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

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

Ua aneane like nā waiwai me ka iho ʻana me ka hoʻohana ʻole Nā NumPy. Eia naʻe, kūpono kēia.

E ʻike kākou i ka lōʻihi o ka iho ʻana o ka stochastic gradient.

Code no ka hoʻoholo ʻana i ka manawa helu SGD (80 tausani kapuaʻi)

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)

Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi

ʻO kaʻoi aku i loko o ka ululāʻau,ʻo ka pōʻeleʻele o nā ao: eia hou,ʻo ka hua'ōlelo "kaukau iho" hōʻike i ka hopena maikaʻi loa. ʻO kēia mau mea a pau e hōʻike ana he pono nā ala maʻalahi e hoʻohana ai i ka waihona Nā NumPy, ka mea e wikiwiki ai i na hana helu. Ma kēia ʻatikala ʻaʻole mākou e aʻo e pili ana iā lākou. Aia kekahi mea e noʻonoʻo ai i kou manawa manawaleʻa :)

Kūkākūkā mākou

Ma mua o ka hōʻuluʻulu ʻana, makemake wau e pane i kahi nīnau i ala mai paha mai kā mākou makamaka heluhelu. No ke aha, ʻoiaʻiʻo, ʻo ia ʻano "hoʻomāinoino" me nā iho, no ke aha e pono ai mākou e hele i luna a iho i ka mauna (ka hapa nui i lalo) i mea e ʻike ai i ka ʻāina haʻahaʻa waiwai, inā aia i loko o ko mākou mau lima kahi mea ikaika a maʻalahi, i ka ʻano o kahi hoʻonā analytical, e hoʻouna koke iā mākou i kahi kūpono?

Aia ka pane i kēia nīnau ma ka ʻili. I kēia manawa ua nānā mākou i kahi hiʻohiʻona maʻalahi loa, aia ka pane ʻoiaʻiʻo Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi pili i kekahi hōʻailona Hoʻoholo i ka hoohalike o ka hoʻihoʻi laina maʻalahi. ʻAʻole ʻoe e ʻike pinepine i kēia i ke ola, no laila e noʻonoʻo mākou he 2, 30, 50 a ʻoi aku paha nā hōʻailona. E hoʻohui kākou i kēia mau tausani, a i ʻole ʻumi tausani o nā waiwai no kēlā me kēia ʻano. I kēia hihia, ʻaʻole hiki i ka hopena analytical ke kū i ka hoʻāʻo a hāʻule. I ka huli ʻana, ʻo ka iho gradient a me kāna mau ʻokoʻa e hoʻokokoke mai iā mākou i ka pahuhopu - ka liʻiliʻi o ka hana. Mai hopohopo no ka wikiwiki - e nānā paha mākou i nā ala e hiki ai iā mākou ke hoʻonohonoho a hoʻoponopono i ka lōʻihi o ka pae (ʻo ia hoʻi, ka wikiwiki).

A i kēia manawa ka hōʻuluʻulu pōkole maoli.

ʻO ka mea mua, manaʻo wau e kōkua nā mea i hōʻike ʻia ma ka ʻatikala e hoʻomaka i nā "ʻepekema data" i ka hoʻomaopopo ʻana i ka hoʻoponopono ʻana i nā hoʻohālikelike laina maʻalahi (a ʻaʻole wale).

ʻO ka lua, ua nānā mākou i kekahi mau ala e hoʻoponopono ai i ka hoohalike. I kēia manawa, ma muli o ke kūlana, hiki iā mākou ke koho i ka mea kūpono loa e hoʻoponopono i ka pilikia.

ʻO ke kolu, ua ʻike mākou i ka mana o nā hoʻonohonoho ʻē aʻe, ʻo ia hoʻi ka lōʻihi o ka gradient descent step long. ʻAʻole hiki ke mālama ʻia kēia ʻāpana. E like me ka mea i hōʻike ʻia ma luna, i mea e hōʻemi ai i ke kumukūʻai o ka helu ʻana, pono e hoʻololi ʻia ka lōʻihi o ka wāwae i ka wā e iho ai.

ʻO ka hā, i kā mākou hihia, ua hōʻike nā hana "home-kākau" i nā hopena manawa maikaʻi loa no ka helu ʻana. ʻAʻole paha kēia ma muli o ka hoʻohana ʻoihana ʻoi loa o nā hiki o ka waihona Nā NumPy. Akā, inā paha, ʻo ka hopena hope e hōʻike iā ia iho. Ma kekahiʻaoʻao, i kekahi manawa pono e nīnau i nā manaʻo i hoʻokumuʻia, a ma kekahiʻaoʻao,ʻaʻole pono e hoʻopili i nā mea a pau - akā, i kekahi manawa,ʻoi aku ka maikaʻi o ke ala maʻalahi o ka hoʻoponoponoʻana i kahi pilikia. A no ka mea, ʻo kā mākou pahuhopu ke kālailai ʻana i ʻekolu ala e hoʻoholo ai i ka hoʻohālikelike hoʻihoʻi laina maʻalahi, ua lawa ka hoʻohana ʻana i nā hana "kākau ponoʻī" iā mākou.

Palapala (a i ʻole kekahi mea like)

1. Hoʻihoʻi laina

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

2. Keʻano huinahā liʻiliʻi loa

mathprofi.ru/metod_naimenshih_kvadratov.html

3. Puka

www.mathprofi.ru/chastnye_proizvodnye_primery.html

4. Gradient

mathprofi.ru/proizvodnaja_po_napravleniju_i_gradient.html

5. Ka iho gradient

habr.com/en/post/471458

habr.com/en/post/307312

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

6. Hale waihona puke 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

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka