ืืืืืจ ืื ืืืกืคืจ ืืจืืื ืืงืืืขืช ืืืฉืืืื ืืืชืืืืช ืฉื ืงื ืจืืจืกืื ืคืฉืื (ืืืื).
ืื ืืฉืืืืช ืืคืชืจืื ืืืฉืืืื ืื ืืื ื ืืื ืืืืกืกืืช ืขื ืฉืืืช ืืจืืืืขืื ืืงืื ืื ืืืืชืจ. ื ืกืื ืืช ืืฉืืืืช ืืืืคื ืืื:
- ืคืชืจืื ืื ืืืื
- ืืจืืื ืืฉืืคืืข
- ืืจืืื ืืฉืืคืืข ืกืืืืกืื
ืขืืืจ ืื ืฉืืื ืืคืชืจืื ืืฉืืืืช ืงื ืืฉืจ, ืืืืืจ ืืกืคืง ืคืื ืงืฆืืืช ืฉืื ืืช, ืืืืืืงืืช ืืขืืงืจ ืืืื ืฉื ืืชืืืช ืืื ืฉืืืืฉ ืืกืคืจืื ืจืืื ืืืื ืฉืืฉืชืืฉืื ืืืืฉืืืื ืจืืื. ืืื ืืืืื ืื ืฉืืืืฉ ืืืืื ืจืืื ืืงืืื ืืช ืขืืืืืช ืืืืฉืื.
ืื ืืงืื ืฉื ืืชื ืืืืืจ ืืชืื ืืฉืคื ืคืืชืื 2.7 ืขื ืืืืจืช ืฆืืง. ืงืื ืืืงืืจ ืืืงืืืฅ ืขื ื ืชืื ืื ืืืืืื ืืคืืจืกืืื ื
ืืืืืจ ืืืืื ืืืชืจ ืื ืืืชืืืืื ืืื ืืืื ืฉืืืจ ืืืื ืืืฉืชืื ืืืืจืื ืืืืืื ืงืืข ืจืื ืืืื ืืืื ื ืืืืืืชืืช - ืืืืืช ืืืื ื.
ืืื ืืืืืืฉ ืืช ืืืืืจ, ืื ื ืืฉืชืืฉืื ืืืืืื ืคืฉืืื ืืืื.
ืชื ืืื ืืืืืื
ืืฉ ืื ื ืืืืฉื ืขืจืืื ืืืืคืืื ืื ืชืืืช Y ื X (ืืืื ืืก' 1):
ืืืื ืืก' 1 "ืชื ืืื ืืืืืื"
ื ื ืื ืฉืืขืจืืื ืืื ืืืืฉ ืืฉื ื, ื - ืืื ืกืืช ืืืืืฉ. ืืืืืื ืืืจืืช, ืืืื ืกื ืชืืืื ืืืืืฉ ืืฉื ื, ืืื - ืืกืืื ืืืืื ืฉืื ืชืืืืืช ืืืื ืกืืช.
ืืืืืื ืืื ืื ืืื, ืื ืื ืงืืืช ืืืื ืฉื ืืชืืืช ืืืืชื ืืช ืฉื ืืคืืืื ืืืืืฉ ืืฉื ื, ืืื ืืืืื ืช ืืกืคืจ ืืขืจืืื - ืืฉ ืืขื ืืืื ืืื. ืขื ืืืช, ืคืืฉืื ืืื ืืืคืฉืจ, ืืื ืฉืืืืจืื, ืืืกืืืจ, ืื ืชืืื ืืงืืืช, ืืช ืืืืืจ ืฉืืืืืขืื ืืชืืืืื. ืืื ืคืฉืืืช ืืืกืคืจืื ืชืืคืฉืจ ืืื ืฉืจืืฆื ืืคืชืืจ ืืช ืืืืืื ืขื ืื ืืืจ ืืื ืขืืืืืช ืขืืืื ืืฉืืขืืชืืืช.
ืืื ื ื ืื ืฉื ืืชื ืืืขืจืื ืืืื ืืช ืืชืืืช ืื ืืชื ืช ืืืืืื ืขื ืืื ืืืฉืืืื ืืืชืืืืช ืฉื ืงื ืจืืจืกืื ืคืฉืื (ืืืืื) ืฉื ืืฆืืจื:
ืืืคื ืืื ืืืืืฉ ืฉืื ืืชืงืืื ืืืื ืกื, - ืืื ืกื ืืชืืืืช ืืืืืฉ, ะธ ืื ืืงืืื ืืจืืจืกืื ืฉื ืืงื ืืืฉืืขืจ.
ืฉืืื ืื ืฉืืืงืื ื ืงืจื ืืขืชืื ืงืจืืืืช ืืฉืืคืืข ืื ืืฉืืคืืข ืฉื ืืงื ืืืฉืืขืจ; ืืืืฆื ืืช ืืกืืื ืฉืื ืืืฉืจ ืื ืืฉืชื ื .
ืืจืืจ ืฉืืืฉืืื ืฉืื ื ืืืืืื ืืื ืืืืืจ ืืงืืืื ืืืื ืืืฉืืืื ะธ , ืฉืืื ืืกืืืืช ืฉื ืขืจืื ืืืื ืกื ืืืืืฉืืื ืฉืื ื ืืคื ืืืืฉ ืืืชืฉืืืืช ืืืืืชืืืช, ืืืืืจ. ืืขืจืืื ืืืืฆืืื ืืืืื ืืืื ืืื ืืืืืื.
ืืฉืืื ืืื ืคืืืช ืจืืืืขืืช
ืืคื ืฉืืืช ืืจืืืืขืื ืืงืื ืื, ืืฉ ืืืฉื ืืช ืืกืืืื ืืจืืืืข. ืืื ืืงื ืื ืืืคืฉืจืช ืื ืืืืื ืข ืืืืืื ืืืื ืฉื ืกืืืืช ืื ืืฉ ืืื ืกืืื ืื ืืคืืืื. ืืืืืื, ืื ืืืงืจื ืืื, ืืกืืืื ืืื +5 (ืคืืืก ืืืฉ), ืืืฉื ื -5 (ืืื ืืก ืืืฉ), ืื ืกืืื ืืกืืืืช ืืืื ืื ืืช ืื ืืืกืชืื ื-0 (ืืคืก). ืืชื ืื ืฆืจืื ืืจืืืืข ืืช ืืกืืืื, ืืื ืืืฉืชืืฉ ืืืืคืืื ืืืืืืืืก ืืื ืื ืืกืืืืช ืืืื ืืืืืืืช ืืืฆืืืจื. ืื ื ืชืขืื ืขื ื ืงืืื ืื ืืืจืืื, ืืื ื ืฆืืื ืจืง ืฉืืฆืืจื ื ืืืืช ืืืืฉืืืื ื ืืื ืืจืืืืข ืืช ืืกืืืื.
ืื ื ืจืืืช ืื ืืกืื ืฉืืขืืจืชื ื ืงืืข ืืช ืืกืืื ืืงืื ืืืืชืจ ืฉื ืกืืืืช ืืจืืืืข (ืฉืืืืืช):
ืืืคื ืืื ืคืื ืงืฆืื ืฉื ืงืืจืื ืฉื ืชืฉืืืืช ืืืืชืืืช (ืืืืืจ, ืืืื ืกื ืฉืืืฉืื ื),
ืื ืืชืฉืืืืช ืืืืืชืืืช (ืืืื ืกืืช ืืกืืคืงืืช ืืืืื),
ืืื ืืื ืืืืื (ืืกืคืจ ืืืืืฉ ืฉืื ื ืงืืขืช ืืืจืืื)
ืืืื ื ืืืื ืืช ืืคืื ืงืฆืื, ื ืืืืจ ืืช ืืฉืืืืืช ืืืืคืจื ืฆืืืืืืช ืืืืงืืืช, ืื ืืื ืืืื ืื ืืขืืืจ ืืคืชืจืื ืืื ืืืื. ืืื ืจืืฉืืช, ืืืื ื ืฆื ืืกืืืจ ืงืฆืจ ืขื ืืื ืืืืื ืื ืืืืจ ืืช ืืืฉืืขืืช ืืืืืืืืจืืช ืฉื ืื ืืืจืช.
ืืืืื
ืืืคืจื ืฆืืืฆืื ืืื ืคืขืืืช ืืฆืืืช ืื ืืืจืช ืฉื ืคืื ืงืฆืื.
ืืื ืืฉืืฉืช ืื ืืืจืช? ืื ืืืจืช ืฉื ืคืื ืงืฆืื ืืืคืืื ืช ืืช ืงืฆื ืืฉืื ืื ืฉื ืืคืื ืงืฆืื ืืืืืจืช ืื ื ืืช ืืืืืื ืฉืื. ืื ืื ืืืจืช ืื ืงืืื ื ืชืื ื ืืืืืืช, ืืคืื ืงืฆืื ืืืื; ืืืจืช, ืืคืื ืงืฆืื ืืืจืืช. ืืืื ืฉืืขืจื ืฉื ืื ืืืจืช ืืืืืืืช ืืืื ืืืชืจ, ืื ืงืฆื ืืฉืื ืื ืฉื ืขืจืื ืืคืื ืงืฆืื ืืืื ืืืชืจ, ืืื ืื ืืฉืืคืืข ืฉื ืืจืฃ ืืคืื ืงืฆืืืช ืชืืื ืืืชืจ.
ืืืืืื, ืืชื ืืื ืฉื ืืขืจืืช ืงืืืืจืืื ืืืช ืงืจืืืืช, ืขืจื ืื ืืืจืช ืื ืงืืื M(0,0) ืฉืืื ื +25 ืคืืจืืฉื ืฉืื ืงืืื ื ืชืื ื, ืืืฉืจ ืืขืจื ืืืื ืืืื ื ืืคื ืืืืื ืงืื ืื ืฆืืื ืืืช, ืขืจื ืืื ื-25 ืืืืืืช ืงืื ืื ืฆืืื ืืืืช. ืืืจืฃ ืื ื ืจืื ืืื ืขืืืื ืื ืชืืืื ืืขืจืืื ืื ืงืืื ื ืชืื ื.
ืืืืื ืืืจืช. ืืขืจื ืื ืืืจ ืฉืืื -0,1 ืืืืจ ืฉืืืฉืจ ื ืขืงืืจ ืืืืืื ืงืื ืื ืฆืืื ืืืช ืืืช, ืขืจื ืืืจื ื-0,1 ืืืืื ืงืื ืื ืฆืืื ืืืช ืืืื. ืืื ืขื ืืืช, ืืืจืฃ ืฉื ืืคืื ืงืฆืื, ืื ื ืืืืืื ืืจืืืช ืฉืืคืืข ืืงืืฉื ืืืจืืฉ ืืืคื ืืื. ืื ืืฆืืืจืื ืื ืืืืื ืืืจ, ืื ืืืืื ืื ืื ื ืืืจืืื ืืื ืืืื ืืืืจืื ืืชืื ืืืืจ, ืฉืื ืืื ืืืืืื ืืงืืืืช, ืฉืื ืืืื ื ืฆืจืืืื ืืืคืก ืขื ืคืกืืืช ืชืืืืืช ืืืื :)
ืื, ืืืืจ ืืืืื ืืคืื ืงืฆืื ืืกืืืืืื ะธ , ืื ื ืืืืืจืื ืืฉืืืืืช ืืืคืจื ืฆืืืืืืช ืืืงืืืช ืืกืืจ 1. ืืืืจ ืงืืืขืช ืืืฉืืืืืช, ื ืงืื ืืขืจืืช ืฉื ืฉืชื ืืฉืืืืืช, ืฉืขื ืืื ืคืชืจืื ื ื ืืื ืืืืืจ ืขืจืืื ืืืื ืฉื ืืืงืืืื ะธ , ืฉืขืืืจื ืืขืจืืื ืฉื ืื ืืืจืืช ืืืชืืืืืช ืื ืงืืืืช ื ืชืื ืืช ืืฉืชื ืื ืืืืืช ืืืื ืืืื ืงืื ื, ืืืืงืจื ืฉื ืคืชืจืื ืื ืืืื ืื ืืฉืชื ืื ืืื. ืืืืืื ืืืจืืช, ืคืื ืงืฆืืืช ืืฉืืืื ืืืงืืืื ืฉื ืืฆืื ืชืืืข ืืืื ืืืื, ืฉืื ืขืจืื ืื ืืืจืืช ืืืืงืืืช ืื ืงืืืืช ืืื ืืืื ืฉืืืื ืืืคืก.
ืื ืืคื ืืืื ืืืืื ื, ืืืฉืืืื ืื ืืืจืช ืืืืงืืช ืฉื ืืกืืจ ืืจืืฉืื ืืืืก ืืืงืื ืืงืื ืืช ืืืืคืก:
ืืฉืืืืช ื ืืืจืช ืืืงืืช ืืกืืจ 1 ืืืืก ื ืืงืื ืืช ืืืืคืก:
ืืชืืฆืื ืืื, ืงืืืื ื ืืขืจืืช ืืฉืืืืืช ืฉืืฉ ืื ืคืชืจืื ืื ืืืื ืคืฉืื ืืืื:
ืืืชืืื{ืืฉืืืื*}
ืืืชืืื{ืืงืจืื}
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
ืกืืฃ{ืืงืจืื}
ืกืืฃ{ืืฉืืืื*}
ืืคื ื ืคืชืจืื ืืืฉืืืื, ืืืื ื ืืขื ืืจืืฉ, ื ืืืืง ืฉืืืขืื ื ื ืืื ื ืื ืขืฆื ืืช ืื ืชืื ืื.
ืืขืื ื ืืขืืฆืื ื ืชืื ืื
ืืฉ ืืฆืืื ืื ืืฉื ืืขืืืื ืื ืขืืืจ ืืคืชืจืื ืืื ืืืื, ืืืืืฉื ืขืืืจ ืืจืืื ืฉืืคืืข ืืกืืืืกืื, ื ืฉืชืืฉ ืืงืื ืืฉืชื ืืจืืืฆืืืช: ืืืืฆืขืืช ืืกืคืจืืื ืจืืื ืืืื ืืืฉืชืืฉ ืื, ืื ื ืฆืืจื ืขืืฆืื ื ืชืื ืื ืืชืืื (ืจืื ืงืื).
ืงืื ืืขืื ืช ืืขืืืื ื ืชืื ืื
# ะธะผะฟะพััะธััะตะผ ะฒัะต ะฝัะถะฝัะต ะฝะฐะผ ะฑะธะฑะปะธะพัะตะบะธ
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 '********************************************'
ืจืืื
ืืขืช, ืืืืจ ืฉืขืฉืื ื, ืจืืฉืืช, ืืช ืื ืชืื ืื, ืฉื ืืช, ืืืงื ื ืืช ื ืืื ืืช ืืืขืื ื ืืืืกืืฃ ืคืจืืื ื ืืช ืื ืชืื ืื, ื ืืฆืข ืืช ืืืืืื ืืจืืฉืื ื. ืืฉืืื ืืืฉืืฉืช ืืขืชืื ืงืจืืืืช ืืื ืืื ืขืืืืช ืืื ืกืคืจืืืช ืืืื ืื. ืืืืืื ืฉืื ื, ืืืื ืืืกืคืจืื ืืืืืืืื, ืืื ืืขื ืืืฉืชืืฉ ืืกืคืจืืื ืืืื ืื. ื ืฉืชืืฉ ืืกืคืจืืื ืืจืืืื ืืืคืืืืืื ืืคืฉืื ืชืกืชืื ืขื ืชืืื ืืช ืืคืืืืจ.
ืงืื ืคืืืืจ
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()
ืชืจืฉืื ืืก' 1 "ืชืืืช ืืืื ืกืืช ืืืืืฉ ืืฉื ื"
ืคืชืจืื ืื ืืืื
ืืืื ื ืฉืชืืฉ ืืืืื ืื ืคืืฆืื ืืืืชืจ ื ืคึผึดืืชืึนื ืืืคืชืืจ ืืช ืืขืจืืช ืืืฉืืืืืช:
ืืืชืืื{ืืฉืืืื*}
ืืืชืืื{ืืงืจืื}
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
ืกืืฃ{ืืงืจืื}
ืกืืฃ{ืืฉืืืื*}
ืืคื ืืืืช ืงืจืืืืจ ื ืืฆื ืืช ืืงืืืข ืืืืื, ืืื ืื ืืงืืืขืื ืขื ืืื ืืขื ืืื , ืืืืจ ืืื, ืืืืงืช ืืงืืืข ื ืืงืืืข ืืืืื - ืืฆื ืืช ืืืงืื , ืืืืคื ืืืื ืื ื ืืืฆืืื ืืช ืืืงืื .
ืงืื ืคืชืจืื ืื ืืืื
# ะพะฟัะตะดะตะปะธะผ ััะฝะบัะธั ะดะปั ัะฐััะตัะฐ ะบะพัััะธัะธะตะฝัะพะฒ 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)
ืื ื ืื ืฉืงืืืื ื:
ืื ื ืืฆืื ืขืจืื ืืืงืืืื, ืกืืื ืืกืืืืช ืืจืืืืข ื ืงืืข. ื ืฆืืืจ ืงื ืืฉืจ ืืืืกืืืืจืืช ืืคืืืืจ ืืืชืื ืืืงืืืื ืฉื ืืฆืื.
ืงืื ืฉืืจืช ืจืืจืกืื
# ะพะฟัะตะดะตะปะธะผ ััะฝะบัะธั ะดะปั ัะพัะผะธัะพะฒะฐะฝะธั ะผะฐััะธะฒะฐ ัะฐัััะตัะฝัั
ะทะฝะฐัะตะฝะธะน ะฒััััะบะธ
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()
ืชืจืฉืื ืืก' 2 "ืชืฉืืืืช ื ืืื ืืช ืืืืืฉืืืช"
ืืชื ืืืื ืืืกืชืื ืขื ืืจืฃ ืืกืืืื ืขืืืจ ืื ืืืืฉ. ืืืงืจื ืฉืื ื, ืื ื ืคืืง ืืื ืขืจื ืืขืฉื ืืฉืืขืืชื, ืืื ื ืกืคืง ืืช ืกืงืจื ืืชื ื ืขื ืืื ืืืคืืื ืช ืืฉืืืืช ืืจืืจืกืื ืืืื ืืืจืืช ืืคืฉืืื ืืช ืืชืืืช ืฉื ืืคืืืื ืืืืืฉ ืืฉื ื.
ืงืื ืชืจืฉืื ืกืืืื
# ะพะฟัะตะดะตะปะธะผ ััะฝะบัะธั ะดะปั ัะพัะผะธัะพะฒะฐะฝะธั ะผะฐััะธะฒะฐ ะพัะบะปะพะฝะตะฝะธะน ะฒ ะฟัะพัะตะฝัะฐั
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()
ืชืจืฉืื ืืก' 3 "ืกืืืืช, %"
ืื ืืืฉืื, ืืื ืืฉืืื ื ืืช ืืืฉืืื ืฉืื ื.
ืืื ื ืืชืื ืคืื ืงืฆืื ืฉื ืืขืื ืืงืืืข ืืช ืืืงืืืื ะธ ืืฉืชืืฉ ืืกืคืจืืื ืจืืื, ืืืชืจ ืืืืง, ื ืืชืื ืฉืชื ืคืื ืงืฆืืืช: ืืืืช ืืืืฆืขืืช ืืืจืืฆื โโืคืกืืืื-ืืคืืื (ืื ืืืืืฅ ืืคืืขื, ืืืืืื ืฉืืชืืืื ืืืจืื ืืืืื ื ืืืฉืืืืช ืืื ืืฆืื), ืืฉื ืืื ืืืืฆืขืืช ืืฉืืืืช ืืืจืืฆื.
ืงืื ืคืชืจืื ืื ืืืื (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
ื ืฉืืื ืืช ืืืื ืืืืฉืงืข ืืงืืืขืช ืืืงืืืื ะธ , ืืืชืื ื-3 ืืฉืืืืช ืฉืืืฆืื.
ืงืื ืืืืฉืื ืืื ืืืฉืื
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)
ืขื ืืืืช ืงืื ื ืฉื ื ืชืื ืื, ืืืฆืืช ืงืืืื ืคืื ืงืฆืื "ื ืืชืืช ืืขืฆืื", ืืืืฆืืช ืืช ืืืงืืืื ืืฉืืืช Cramer.
ืขืืฉืื ืืชื ืืืื ืืขืืืจ ืืืจืืื ืืืจืืช ืืืฆืื ืืงืืืื ะธ .
ืืจืืื ืืฉืืคืืข
ืจืืฉืืช, ืืื ื ืืืืจ ืืื ืฉืืคืืข. ืืืืืื ืคืฉืืืืช, ืืฉืืคืืข ืืื ืงืืข ืืืฆืืื ืืช ืืืืื ืืฆืืืื ืืืงืกืืืืืช ืฉื ืคืื ืงืฆืื. ืืื ืืืืื ืืืืคืืก ืขื ืืจ, ืืืฉืจ ืคื ื ืืฉืืคืืข ืื ืืืงืื ืื ื ืืฆื ืืืืคืืก ืืชืืื ืืืืชืจ ืืจืืฉ ืืืจ. ืืคืชืืื ืืช ืืืืืื ืขื ืืืจ, ืื ื ืืืืจืื ืฉืืืขืฉื ืื ื ืืงืืงืื ืืืจืืื ืืชืืืื ืืืืชืจ ืขื ืื ืช ืืืืืข ืืฉืคืื ืืื ืฉืืืชืจ ืืืจ, ืืืืืจ ืืืื ืืืื - ืืืงืื ืื ืืคืื ืงืฆืื ืืื ื ืขืืื ืื ืืืจืืช. ืืฉืื ืื ืื ืืืจืช ืชืืื ืฉืืื ืืืคืก. ืืื, ืื ืื ื ืื ืฆืจืืืื ืฉืืคืืข, ืืื ืื ืื ืฉืืคืืข. ืืื ืืืฆืื ืืช ืื ืื-ืืืจืื ืืชื ืจืง ืฆืจืื ืืืืคืื ืืช ืืฉืืคืืข ื -1 (ืคืืืช ืืื).
ืืื ื ืฉืื ืื ืืขืืืื ืฉืืคืื ืงืฆืื ืืืืืืช ืืืืืช ืืื ืืื ืืืืช, ืืืืืจ ืฉืืจืื ื ืืืืช ืืื ืืืืฆืขืืช ืืืืืืจืืชื ืืืืฆืข ืืืื, ืื ื ืืื ืืืฆืื ืืื ืืืื ื ืืกืฃ, ืฉืขืฉืื ืืืืืช ื ืืื ืืื ืฉื ืืฆื. ืืืื ื ืจืืข, ืื ืื ืืืื ืขืืื ื! ืืืงืจื ืฉืื ื ืขืกืงืื ื ืืืื ืืืื ืืืื, ืฉืื ืชืคืงืืื ื ืขื ืืืจืฃ ืคืจืืืื ืจืืืื. ืืืคื ืฉืืืื ื ืฆืจืืืื ืืืขืช ืืืื ืืืงืืจืก ืฉืื ื ืืืชืืืืงื ืืืืช ืืกืคืจ, ืืคืจืืืื ืืฉ ืจืง ืืื ืืืื ืืื.
ืืืจื ืฉืืืืื ื ืืื ืื ืื ื ืฆืจืืืื ืฉืืคืืข, ืืื ืฉืืฉืืคืืข ืืื ืงืืข, ืืืืืจ ืืงืืืจ ืขื ืงืืืืจืืื ืืืช ื ืชืื ืืช, ืฉืื ืืืืืง ืืืชื ืืงืืืื ะธ ืื ืื ื ืืืืืื ืืืืฉื ืืจืืื ืืฉืืคืืข.
ืืคื ื ืฉืืชืืื, ืื ื ืืฆืืข ืืงืจืื ืจืง ืืื ืืฉืคืืื ืขื ืืืืืจืืชื ืืืจืืื:
- ืื ื ืงืืืขืื ืืฆืืจื ืคืกืืืื ืืงืจืืืช ืืช ืืงืืืืจืืื ืืืช ืฉื ืืืงืืืื ะธ . ืืืืืื ืฉืื ื, ื ืืืืจ ืืงืืืื ืืื ืืคืก. ืืื ื ืืื ื ืคืืฅ, ืื ืืื ืืงืจื ืขืฉืื ืืืืืช ื ืืื ืืฉืื.
- ืืชืื ืงืืืืจืืื ืื ืืืคืืืช ืืช ืืขืจื ืฉื ืื ืืืจืช ืืืืงืืช ืืกืืจ 1 ืื ืงืืื . ืื ืื ืื ืืืจืช ืืืืืืช, ืืคืื ืงืฆืื ืืืื. ืืื, ืืืคืืชืช ืขืจื ืื ืืืจืช, ื ื ืืข ืืืืืื ืืฆืืืื ืืืคืื, ืืืืืจ ืืืืืื ืืืจืืื. ืื ืื ืืืจืช ืฉืืืืืช, ืื ืืคืื ืงืฆืื ืืฉืื ืื ืืืจืืช ืืขื ืืื ืืคืืชืช ืขืจื ืื ืืืจืช ืื ื ื ืขืื ืืืืืื ืืืจืืื.
- ืื ื ืืืฆืขืื ืคืขืืื ืืืื ืขื ืืงืืืืจืืื ืื : ืืคืืืชืื ืืช ืืขืจื ืฉื ืื ืืืจืช ืืืืงืืช ืื ืงืืื .
- ืืื ืื ืืงืคืืฅ ืืขื ืืืื ืืืื ืืืืืก ืืืื ืขืืืง, ืืฉ ืฆืืจื ืืืืืืจ ืืช ืืืื ืืฆืขื ืืืืืื ืืืจืืื. ืืืืคื ืืืื, ืืชื ืืืื ืืืชืื ืืืืจ ืฉืื ืขื ืืื ืืืืืืจ ืืช ืืฉืื ืืฆืืจื ื ืืื ื ืืืื ืืฉื ืืช ืืืชื ืืืืื ืชืืืื ืืืจืืื ืขื ืื ืช ืืืคืืืช ืืช ืขืืืืืช ืืืืฉืื. ืืื ืขืืฉืื ืืคื ืื ื ืืฉืืื ืงืฆืช ืืืจืช, ืืื ื ื ืืกืก ืืช ืืืื ืืฆืขื ืืฉืืื ืืืืขืืช ืฉื "ืชืงืข" ืื, ืืื ืฉืืืืจืื ืืฉืคื ืืจืืืืช, ืืืคืืจืืช.
- ืืจืืข ืฉืื ืื ื ืืืงืืืืจืืื ืืืช ืื ืชืื ืืช ะธ ืืืืกืืจ ืืช ืขืจืื ืื ืืืจืืช, ื ืงืื ืงืืืืจืืื ืืืช ืืืฉืืช ะธ . ืื ืื ื ืขืืฉืื ืืช ืืฆืขื ืืื (ืืืกืืจ), ืืืจ ืืืงืืืืจืืื ืืืช ืืืืืฉืืืช. ืืื ืืืืืืจ ืืชืืื ืฉืื ืืฉืื, ืขื ืืืฉืืช ืืืชืื ืกืืช ืื ืืจืฉืช.
ืืช ืื! ืขืืฉืื ืื ืื ื ืืืื ืื ืืืืช ืืืคืฉ ืืช ืืขืจืืฅ ืืขืืืง ืืืืชืจ ืฉื ืชืขืืช ืืจืืื ื. ืืืื ื ืชืืื.
ืงืื ืืืจืืื ืืฉืืคืืข
# ะฝะฐะฟะธัะตะผ ััะฝะบัะธั ะณัะฐะดะธะตะฝัะฝะพะณะพ ัะฟััะบะฐ ะฑะตะท ะธัะฟะพะปัะทะพะฒะฐะฝะธั ะฑะธะฑะปะธะพัะตะบะธ 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
ืฆืืื ื ืขื ืืชืืชืืช ืชืขืืช ืืจืืื ื ืืฉื ืืฆืื ื ืืช ืื ืืืชื ืขืจืื ืืืงืืืื ะธ , ืืื ืืืืืง ืื ืฉืืื ืฆืคืื.
ืืืื ื ืฆืืื ื ืืกืฃ, ืจืง ืฉืืคืขื, ืจืื ืืื ืืขืืืง ืฉืื ื ืืชืืื ืืืื ืืืืืืืช ืืืจืืช, ืืืืืจ ืกืคืจืืื ืจืืื.
ืงืื ืืืจืืื ืืฉืืคืืข (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
ืขืจืื ืืงืื ะธ ืืืชื ื ืืชื ืืฉืื ืื.
ืืื ื ืืื ืืืฆื ืืฉืชื ืชื ืืฉืืืื ืืืืื ืืจืืื ืืฉืืคืืข, ืืืืืจ ืืืฆื ืืฉืชื ื ืกืืื ืืกืืืืช ืืจืืืืข ืขื ืื ืฆืขื.
ืงืื ืืฉืจืืื ืกืืืืื ืฉื ืกืืืืช ืืจืืืืข
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()
ืืจืฃ ืืก' 4 "ืกืืื ืืกืืืืช ืืจืืืืข ืืืืื ืืจืืื ืืฉืืคืืข"
ืืืจืฃ ืจืืืื ืฉืืื ืฆืขื ืืฉืืืื ืืืจืืช, ืืืืจื ืืกืคืจ ืืกืืื ืฉื ืืืืจืฆืืืช ืื ืื ื ืจืืืื ืงื ืืืขื ืืืคืงื.
ืืืกืืฃ, ืืืื ื ืืืื ืืช ืืืืื ืืืื ืืืฆืืข ืืงืื:
ืงืื ืืงืืืขืช ืืื ืืืฉืื ืืจืืื ืืฉืืคืืข
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)
ืืืื ืื ืื ื ืขืืฉืื ืืฉืื ืื ืืกืืจ, ืืื ืฉืื ืื ืคืื ืงืฆืื ืคืฉืืื "ืืชืืื ืืืืช" ืฉืืื ื ืืฉืชืืฉืช ืืกืคืจืืื ืจืืื ืขืืื ืขื ืืื ืืืืฉืื ืฉื ืคืื ืงืฆืื ืืืืฆืขืืช ืืกืคืจืืื ืจืืื.
ืืื ืื ืื ื ืื ืขืืืืื ืืืงืื, ืืื ืืชืงืืืื ืืงืจืืช ืืืืื ืืจื ืืจืืฉืช ื ืืกืคืช ืืคืชืืจ ืืช ืืฉืืืืช ืืจืืจืกืื ืืืื ืืืจืืช ืืคืฉืืื. ืคืืืฉ ืืืชื ื!
ืืจืืื ืืฉืืคืืข ืกืืืืกืื
ืขื ืื ืช ืืืืื ืืืืืจืืช ืืช ืขืงืจืื ืืคืขืืื ืฉื ืืจืืืช ืฉืืคืืข ืกืืืืกืืืช, ืขืืืฃ ืืงืืืข ืืช ืืืืืืื ืฉืื ืืืจืืื ืฉืืคืืขืืช ืจืืืื. ืื ืื ื, ืืืงืจื ืฉื ืืจืืื ืืฉืืคืืข, ืืืฉืืืืืช ืื ืืืจืืช ืฉื ะธ ืืฉืชืืฉ ืืกืืืืื ืฉื ืืขืจืืื ืฉื ืื ืืชืืื ืืช ืืืชืฉืืืืช ืืืืืชืืืช ืืืืื ืืช ืืืืื (ืืืืืจ, ืืกืืืืื ืฉื ืื ะธ ). ืืืืจืืช ืฉืืคืืข ืกืืืืกืื, ืื ื ืฉืชืืฉ ืืื ืืขืจืืื ืืงืืืืื ืืืืื, ืืื ืืืงืื ืืืช, ืืืจ ืคืกืืืื ืืงืจืืืช ืืื ืฉื ืงืจื ืืื ืืงืก ืืืื ืื ืฉืชืืฉ ืืขืจืืื ืฉืื.
ืืืืืื, ืื ืืืื ื ืงืืข ืืืกืคืจ 3 (ืฉืืืฉ), ืื ื ืืงื ืืช ืืขืจืืื ะธ , ืื ื ืืืืฃ ืืช ืืขืจืืื ืืืฉืืืืืช ืื ืืืจืืช ืื ืงืืข ืงืืืืจืืื ืืืช ืืืฉืืช. ืืืืจ ืืื, ืืืืจ ืงืืืขืช ืืงืืืืจืืื ืืืช, ืื ื ืฉืื ืงืืืขืื ืืืืคื ืคืกืืืื ืืงืจืื ืืช ืืื ืืงืก ืืืืื, ืืืืืคืื ืืช ืืขืจืืื ืืชืืืืื ืืืื ืืงืก ืืืฉืืืืืช ืืืืคืจื ืฆืืืืืืช ืืืืงืืืช, ืืงืืืขืื ืืช ืืงืืืืจืืื ืืืช ืืฆืืจื ืืืฉื ะธ ืืื ' ืขื ืฉืืืชืื ืกืืช ืืืคืืช ืืืจืืงื. ืืืื ืจืืฉืื, ืืืื ืื ื ืจืื ืฉืื ืืืื ืืขืืื ืืืื, ืืื ืื ืื. ื ืืื ืฉืจืืื ืืฆืืื ืฉืืฉืืืื ืื ืืืจืืช ืืื ืฆืขื, ืืื ืืืืื ืืฉ ื ืืืื.
ืืื ืืืชืจืื ืืช ืฉื ืืจืืื ืืฉืืคืืข ืกืืืืกืื ืขื ืคื ื ืงืื ืื ืฆืืื ืืื? ืื ืืืื ืืืืื ืฉืื ื ืืืื ืืืื ืื ืืื ืืขืฉืจืืช ืืืคื ืขืจืืื, ืื ืงื ืืจืื ืืืชืจ ืืขืื, ื ื ืื, ืืืฃ ืืงืจืื ืืื, ืืื ืืช ืืืืื ืืืื. ืืื ื ืื ืกืช ืืชืืื ื ืืจืืื ืืฉืืคืืข ืกืืืืกืื. ืืืงืจื ืฉืื ื, ืืืืื, ืื ื ืืืื ืืืืื ืืืื.
ืืืื ื ืกืชืื ืขื ืืงืื.
ืงืื ืืืจืืืช ืืจืืืื ื ืกืืืืกืืืช
# ะพะฟัะตะดะตะปะธะผ ััะฝะบัะธั ััะพั
.ะณัะฐะด.ัะฐะณะฐ
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])
ืื ื ืืกืชืืืื ืืืื ืขื ืืืงืืืื ืืชืืคืกืื ืืช ืขืฆืื ื ืฉืืืืื ืืช ืืฉืืื "ืืื ืื ืืืื ืืืืืช?" ืืฉ ืื ื ืขืจืื ืืงืื ืืืจืื ะธ . ืืืื ืืจืืืช ืืจืืืื ื ืกืืืืกืืืช ืืฆืื ืคืจืืืจืื ืืืคืืืืืืื ืืืชืจ ืืืฉืืืื? ืืืจืื ืืฆืขืจ ืื. ืืกืคืืง ืืืกืชืื ืขื ืกืืื ืืกืืืืช ืืจืืืืข ืืืจืืืช ืฉืขื ืขืจืืื ืืืฉืื ืฉื ืืืงืืืื, ืืฉืืืื ืืืืื ืืืชืจ. ืื ืื ื ืื ืืืืจืื ืืืชืืืืฉ. ืืืื ื ืื ื ืืจืฃ ืฉื ืฉืื ืื ืืฉืืืื.
ืงืื ืืฉืจืืื ืกืืื ืืกืืืืช ืืจืืืืข ืืืจืืื ืฉื ืืจืืืื ื ืกืืืืกืื
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()
ืืจืฃ ืืก' 5 "ืกืืื ืืกืืืืช ืืจืืืืข ืืืืื ืืจืืื ืืฉืืคืืข ืกืืืืกืื"
ืืกืชืืืื ืขื ืืื ืืืื ืื, ืืื ืืกืชืืจ ืืขืืฉืื ื ืชืงื ืืื.
ืื ืื ืงืจื? ืงืจื ืืืืจ ืืื. ืืืฉืจ ืื ื ืืืืจืื ืืืงืจืื ืืืืฉ, ืื ืื ืขืืืจ ืืืืืฉ ืื ืืืจ ืฉืืืืืืจืืชื ืฉืื ื ืืืงืฉ ืืืคืืืช ืืช ืืฉืืืื ืืืืฉืื ืืืื ืกื. ืืืืจ ืืื ืื ื ืืืืจืื ืืืืฉ ื ืืกืฃ ืืืืืจืื ืขื ืืืืฉืื, ืื ืื ื ืืฆืืฆืืื ืืช ืืฉืืืื ืขืืืจ ืืืืืฉ ืืฉื ื ืฉื ืืืจ. ืืขืช ืืืจื ืฉืืืืืฉืืื ืืจืืฉืื ืื ืืืจืืื ืืืืคื ืืฉืืขืืชื ืืืงื ืฉื ืืฉืืืืช ืืจืืจืกืื ืืืื ืืืจืืช ืืคืฉืืื. ืืืฉืืขืืช ืืื ืฉืืืฉืจ ื ืืืจ ืืื ืืืืืืฉืืื ืืืื, ืขื ืืื ืืคืืชืช ืืฉืืืื ืฉื ืื ืืื ืืื, ืืืืืืจืืชื ืฉืื ื ืืืืื ืืจืฆืื ืืช ืืช ืืฉืืืื ืขืืืจ ืืืืื ืืืื. ืื ืื ืืขืฉืืช? ืืชืฉืืื ืคืฉืืื: ืฆืจืื ืืฆืืฆื ืืช ืฉืื ืืืจืืื. ืืืจื ืืื, ืขื ืืื ืืคืืชืช ืืืจืืช ืืืจืืื, ืืฉืืืื ืื ืชืคืกืืง "ืืงืคืืฅ" ืืืขืื ืืืืื. ืื ืืืชืจ ืืืืง, ืฉืืืืช ื"ืงืคืืฆื" ืื ืชืคืกืืง, ืืื ืืื ืื ืชืขืฉื ืืช ืื ืื ืื ืืืจ :) ืืืื ื ืืืืง.
ืงืื ืืืคืขืืช SGD ืืืจืืืืื ืงืื ืื ืืืชืจ
# ะทะฐะฟัััะธะผ ััะฝะบัะธั, ัะผะตะฝััะธะฒ ัะฐะณ ะฒ 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()
ืืจืฃ ืืก' 6 "ืกืืื ืืกืืืืช ืืจืืืืข ืืืืื ืืจืืืช ืืจืืืื ื ืกืืืืกืืืช (80 ืืืฃ ืฆืขืืื)"
ืืืงืืืื ืืฉืชืคืจื, ืื ืขืืืื ืืื ื ืืืืืืืืื. ืืืืคื ืืืคืืชืื, ื ืืชื ืืชืงื ืืืช ืืืจื ืื. ืื ื ืืืืจืื, ืืืฉื, ื-1000 ืืืืืจืฆืืืช ืืืืจืื ืืช ืืช ืขืจืื ืืืงืืืื ืฉืืื ื ืขืฉืชื ืืฉืืืื ืืืื ืืืืืช. ื ืืื, ืืฉืืื ืื ื ืฆืืจื ืืจืฉืื ืื ืืช ืขืจืื ืืืงืืืื ืขืฆืื. ืื ื ืขืฉื ืืืช, ืืื ื ืฉืื ืื ืืืื ืืืื ืื. ืื ื ืจืื ืืืง ืื ืจืื ืฉืืฉืืืื ืคืืืชืช ืืืืคื ืฉืืื. ืืืขืฉื ืื ืื ื ืืื. ืืืื ื ืกืชืื ืขื 1000 ืืืืืจืฆืืืช ืืจืืฉืื ืืช ืื ืฉืืื ืืืชื ืขื ืืืืจืื ืืช.
ืงืื ืืชืจืฉืื SGD (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()
ืืจืฃ ืืก' 7 "ืกืืื ืืกืืืืช ืืจืืืืข SGD (1000 ืืฆืขืืื ืืจืืฉืื ืื)"
ืืจืฃ ืืก' 8 "ืกืืื ืืกืืืืช ืืจืืืืข SGD (1000 ืืฆืขืืื ืืืืจืื ืื)"
ืืืจ ืืชืืืืช ืืืจืืื ืื ื ืจืืืื ืืจืืื ืืืืื ืืชืืืื ืืืื ืืืขืืช. ืืืืืจืฆืืืช ืืืืจืื ืืช, ืื ื ืจืืืื ืฉืืฉืืืื ืืกืชืืืืช ืืืกืืื ืืขืจื ืฉื 1,475 ืืืจืืขืื ืืกืืืืื ืืคืืื ืฉืืื ืืขืจื ืืืืคืืืืื ืืื, ืืื ืื ืืื ืขืืืื ืขืืื... ืื ื ืืืืจ, ืืชื ืืืื ืืจืฉืื ืืช ืืขืจืืื ืฉื ื- ืืงืืืื ะธ , ืืืืืจ ืืื ืืืจ ืืช ืืื ืฉืขืืืจื ืืฉืืืื ืืื ืืืืืช. ืขื ืืืช, ืืืืชื ืื ื ืืขืื ืืืืจื ืืืชืจ: ืืืื ื ืฆืจืืืื ืืขืฉืืช 80 ืืืฃ ืฆืขืืื (ืจืื ืงืื) ืืื ืืืืืข ืืขืจืืื ืงืจืืืื ืืืืคืืืืืืื. ืืื ืืืจ ืกืืชืจ ืืช ืืจืขืืื ืฉื ืืืกืืื ืืืื ืืืฉืื ืขื ืืจืืืช ืฉืืคืืข ืกืืืืกืืืช ืืืืก ืืืจืืืช ืฉืืคืืข. ืื ื ืืชื ืืชืงื ืืืฉืคืจ? ืื ืงืฉื ืืฉืื ืื ืฉืืืืืจืฆืืืช ืืจืืฉืื ืืช ืื ื ืืืจืืื ืืืืืืื, ืืืื, ืขืืื ื ืืืฉืืืจ ืฆืขื ืืืื ืืืืืจืฆืืืช ืืจืืฉืื ืืช ืืืฆืืฆื ืืช ืืฆืขื ืืื ืฉืื ื ืืชืงืืืื. ืื ื ืขืฉื ืืืช ืืืืืจ ืื - ืืื ืืืจ ืืจืื ืืื. ืื ืฉืจืืฆื ืืืื ืืืฉืื ืืขืฆืื ืืื ืืขืฉืืช ืืช ืื, ืื ืื ืงืฉื :)
ืืขืช ืืื ื ืืฆืข ืืจืืื ืืฉืืคืืข ืกืืืืกืื ืืืืฆืขืืช ืืกืคืจืืื ืจืืื (ืืืืื ืื ื ืืขื ืขื ืืืื ืื ืฉืืืืื ื ืงืืื ืืื)
ืงืื ืืืจืืื ืืฉืืคืืข ืกืืืืกืื (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
ืืขืจืืื ืืชืืจืจื ืืืืขื ืืืื ืืืื ืืขืช ืืจืืื ืืื ืฉืืืืฉ ืจืืื. ืขื ืืืช, ืื ืืืืื ื.
ืืืื ืืืืืช ืืื ืืื ืืงื ืื ื ืืจืืืืช ืฉืืคืืข ืกืืืืกืืืืช.
ืงืื ืืงืืืขืช ืืื ืืืฉืื SGD (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)
ืืื ืฉื ืื ืกืื ืืชืื ืืืขืจ, ืื ืืขื ื ืื ืืืื ืืืชืจ: ืฉืื, ืื ืืกืื "ืืืชื ืขืฆืื" ืืฆืืื ืืช ืืชืืฆืื ืืืืื ืืืืชืจ. ืื ืื ืืฆืืืข ืขื ืื ืฉืืืืืืช ืืืืืช ืืจืืื ืขืืื ืืช ืืคืืื ืืืชืจ ืืืฉืชืืฉ ืืกืคืจืืื ืจืืื, ืฉืืืืช ืืืจื ืืช ืคืขืืืืช ืืืืฉืื. ืืืืืจ ืื ืื ื ืืื ืขืืืื. ืืืื ืขื ืื ืืืฉืื ืืืื ื ืืคื ืื :)
ืื ื ืืกืืืื
ืืคื ื ืกืืืื, ืืจืฆืื ื ืืขื ืืช ืขื ืฉืืื ืฉืืื ืื ืจืื ืขืืชื ืืืงืืจื ืืืงืจ ืฉืื ื. ืืื ืืขืฆื "ืขืื ืื" ืืื ืขื ืืจืืืืช, ืืื ืื ืื ื ืฆืจืืืื ืืืืช ืืืขืื ืืืจ (ืืขืืงืจ ืืืื) ืืื ืืืฆืื ืืช ืืฉืคืื ืืืงืจื, ืื ืืฉ ืืืืื ื ืืืฉืืจ ืื ืืืง ืืคืฉืื, ื- ืฆืืจื ืฉื ืคืชืจืื ืื ืืืื, ืฉืืขืืืจ ืืืชื ื ืืืืืืช ืืืงืื ืื ืืื?
ืืชืฉืืื ืืฉืืื ืื ื ืืฆืืช ืขื ืคื ื ืืฉืื. ืืขืช ืืกืชืืื ื ืขื ืืืืื ืคืฉืืื ืืืื, ืฉืื ืืชืฉืืื ืืืืืชืืช ืืื ืชืืื ืืกืืื ืืื . ืืชื ืื ืจืืื ืืช ืื ืืขืชืื ืงืจืืืืช ืืืืื, ืื ืืืื ื ืืืืื ืฉืืฉ ืื ื 2, 30, 50 ืื ืืืชืจ ืกืืื ืื. ืืืื ื ืืกืืฃ ืืื ืืืคื, ืื ืืคืืื ืขืฉืจืืช ืืืคื ืขืจืืื ืขืืืจ ืื ืชืืื ื. ืืืงืจื ืื, ืืืชืื ืฉืืคืชืจืื ืืื ืืืื ืื ืืขืืื ืืืืื ืืืืฉื. ืืชืืจื, ืืจืืื ืืฉืืคืืข ืืืืืจืืืฆืืืช ืฉืื ืืงืจืื ืืืชื ื ืืื ืืื ืืืื ืื ืืืืจื - ืืืื ืืืื ืฉื ืืคืื ืงืฆืื. ืืื ืชืืื ืืืื ืืืืืจืืช - ืื ืจืื ืฉื ืืืืง ืืจืืื ืฉืืืคืฉืจื ืื ื ืืืืืืจ ืืืืืกืช ืืช ืืืจื ืืฆืขื (ืืืืืจ, ืืืืจืืช).
ืืขืืฉืื ืืกืืืื ืืงืฆืจ ืืืฉ.
ืจืืฉืืช, ืื ื ืืงืืื ืฉืืืืืจ ืืืืฆื ืืืืืจ ืืขืืืจ ื"ืืืขื ื ื ืชืื ืื" ืืชืืืืื ืืืื ื ืืืฆื ืืคืชืืจ ืืฉืืืืืช ืจืืจืกืื ืืื ืืืจืืืช ืคืฉืืืืช (ืืื ืจืง).
ืฉื ืืช, ืืืงื ื ืืื ืืจืืื ืืคืชืืจ ืืช ืืืฉืืืื. ืืขืช, ืืืชืื ืืืฆื, ื ืืื ืืืืืจ ืืช ืืืชืืื ืืืืชืจ ืืคืชืจืื ืืืขืื.
ืฉืืืฉืืช, ืจืืื ื ืืช ืืืื ืฉื ืืืืจืืช ื ืืกืคืืช, ืืืืืจ ืืืจื ืฆืขื ืืืจืืื ืืฉืืคืืข. ืื ืืคืฉืจ ืืืื ืื ืืช ืืคืจืืืจ ืืื. ืืคื ืฉืฆืืื ืืขืื, ืขื ืื ืช ืืืืืื ืืช ืขืืืช ืืืืฉืืืื, ืืฉ ืืฉื ืืช ืืช ืืืจื ืืฆืขื ืืืืื ืืืจืืื.
ืจืืืขืืช, ืืืงืจื ืฉืื ื, ืคืื ืงืฆืืืช "ืืชืืืืช ืืืืช" ืืจืื ืืช ืชืืฆืืืช ืืืื ืืืืืืช ืืืืชืจ ืืืืฉืืืื. ืื ืื ืจืื ื ืืืข ืืืฉืืืืฉ ืืื ืืงืฆืืขื ืืืืชืจ ืืืืืืืช ืืกืคืจืืื ืจืืื. ืืื ืื ืื ืื, ืืืกืงื ื ืืืื ืืขืืื ืขื ืขืฆืื. ืืฆื ืืื, ืืคืขืืื ืืืื ืืืืื ืกืคืง ืืืขืืช ืืืืกืกืืช, ืืืฆื ืฉื ื, ืื ืชืืื ืืืื ืืกืื ืืื - ืืืืคื, ืืคืขืืื ืืจื ืคืฉืืื ืืืชืจ ืืคืชืจืื ืืขืื ืืขืืื ืืืชืจ. ืืืืืืื ืฉืืืืจื ืฉืื ื ืืืืชื ืื ืชื ืฉืืืฉ ืืืฉืืช ืืคืชืจืื ืืฉืืืืช ืจืืจืกืื ืืื ืืจืืช ืคืฉืืื, ืืฉืืืืฉ ืืคืื ืงืฆืืืช "ื ืืชืืืช ืืขืฆืื" ืืกืคืืง ืื ื ืืืืื.
ืกืคืจืืช (ืื ืืฉืื ืืื)
1. ืจืืจืกืื ืืื ืืจืืช
2. ืฉืืืช ืืจืืืืขืื ืืงืื ืื ืืืืชืจ
3. ื ืืืจืช
4. ืืขืืจ ืฆืืข
5. ืืจืืื ืืฉืืคืืข
6. ืกืคืจืืืช NumPy
ืืงืืจ: www.habr.com